wip: booking process
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { Controller} from '@hotwired/stimulus'
|
||||
import { Controller } from '@hotwired/stimulus'
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['field']
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
import { Controller } from '@hotwired/stimulus'
|
||||
|
||||
export default class extends Controller {
|
||||
|
||||
static targets = [ 'fields', 'field', 'addButton', 'index' ]
|
||||
static values = {
|
||||
prototype: String,
|
||||
maxItems: Number,
|
||||
itemsCount: Number,
|
||||
}
|
||||
|
||||
connect () {
|
||||
this.index = this.itemsCountValue = this.fieldTargets.length
|
||||
}
|
||||
|
||||
addItem() {
|
||||
let prototype = JSON.parse(this.prototypeValue)
|
||||
const newField = prototype.replace(/__name__/g, this.index)
|
||||
this.fieldsTarget.insertAdjacentHTML('beforeend', newField)
|
||||
this.index++
|
||||
this.itemsCountValue++
|
||||
}
|
||||
|
||||
removeItem(event) {
|
||||
this.fieldTargets.forEach(element => {
|
||||
if (element.contains(event.target)) {
|
||||
element.remove()
|
||||
this.itemsCountValue--
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
itemsCountValueChanged(itemsCount) {
|
||||
if (this.hasIndexTarget) {
|
||||
this.indexTargets.forEach((target, index) => {
|
||||
target.innerText = index + 1
|
||||
})
|
||||
}
|
||||
if (false === this.hasAddButtonTarget || 0 === this.maxItemsValue) {
|
||||
return
|
||||
}
|
||||
const maxItemsReached = itemsCount >= this.maxItemsValue
|
||||
this.addButtonTarget.classList.toggle('hidden', maxItemsReached)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user