mirror of
https://github.com/docusealco/docuseal
synced 2026-11-04 06:42:32 -05:00
52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
import { actionable } from '@github/catalyst/lib/actionable'
|
|
import { targets, targetable } from '@github/catalyst/lib/targetable'
|
|
|
|
export default actionable(targetable(class extends HTMLElement {
|
|
static [targets.static] = ['items', 'groups']
|
|
|
|
addItem (e) {
|
|
e.preventDefault()
|
|
|
|
const originalItem = this.items[0]
|
|
const duplicateItem = originalItem.cloneNode(true)
|
|
const uniqueId = Math.floor(Math.random() * 10 ** 16)
|
|
|
|
duplicateItem.querySelectorAll("select, textarea, input:not([type='hidden'])").forEach((input) => {
|
|
input.value = ''
|
|
input.checked = false
|
|
input.removeAttribute('selected')
|
|
})
|
|
|
|
duplicateItem.querySelectorAll('select, textarea, input').forEach((input) => {
|
|
input.name = input.name.replace('[1]', `[${uniqueId}]`)
|
|
})
|
|
|
|
duplicateItem.querySelectorAll('a.hidden').forEach((button) => button.classList.toggle('hidden'))
|
|
|
|
originalItem.parentNode.append(duplicateItem)
|
|
|
|
this.toggleMultipleClasses()
|
|
|
|
duplicateItem.querySelector("input:not([type='hidden'])")?.focus()
|
|
}
|
|
|
|
removeItem (e) {
|
|
e.preventDefault()
|
|
|
|
this.items.find((item) => item.contains(e.target))?.remove()
|
|
|
|
this.toggleMultipleClasses()
|
|
}
|
|
|
|
toggleMultipleClasses () {
|
|
const isMultiple = this.items.length > 1
|
|
const elements = [...this.items, ...this.groups]
|
|
|
|
elements.forEach((element) => {
|
|
const classes = element.dataset.multipleClasses || this.dataset.multipleClasses
|
|
|
|
classes?.split(' ').forEach((cls) => element.classList.toggle(cls, isMultiple))
|
|
})
|
|
}
|
|
}))
|