`
}
_onChange(e) {
if (this._changingNow) {
return
}
this._changingNow = true
var input = e.target
var value = input.value
var div = input.parentElement
if (div.hasAttribute('data-record')) {
var dataList = div.querySelectorAll('[data-value]:not([hidden])')
for (var i = 0; i < dataList.length; i++) {
if (dataList[i] !== input) {
dataList[i].value = value || ''
}
}
}
if (div.hasAttribute('data-record')) {
this._build()
} else if (div.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {
this._add()
}
this._changingNow = false
}
_build(includeNewRecord?) {
if (includeNewRecord) var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]')
else var records = this.renderRoot.querySelectorAll('[data-record]')
var newmap = {}
for (var i = 0; i < records.length; i++) {
var record = records[i]
var key = (record.querySelector('[data-key]') as HTMLInputElement).value
var inputs = record.querySelectorAll('[data-value]:not([style*="display: none"])')
if (!inputs || inputs.length == 0) continue
var input = inputs[inputs.length - 1] as HTMLInputElement
var value = input.value
if (key) newmap[key] = value || ''
}
this.value = newmap
this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }))
}
/* map아이템들을 template(dom-repeat)용 배열로 변환하는 함수 */
_toArray(map) {
var array: { key: any; value: any }[] = []
for (var key in map) {
array.push({
key: key,
value: map[key]
})
}
return array
}
_add() {
this._build(true)
var inputs = this.renderRoot.querySelectorAll('[data-record-new] input:not([style*="display: none"])')
for (var i = 0; i < inputs.length; i++) {
let input = inputs[i] as HTMLInputElement
input.value = ''
}
;(inputs[0] as HTMLInputElement).focus()
}
_delete(e) {
var record = e.target.parentElement
record.querySelector('[data-key]').value = ''
this._build()
}
}