import { html } from 'lit'
import { property, state } from 'lit/decorators.js'
import { UsBaseElement } from '../../base/UsBaseElement'
import { customElementIfNotExist } from '../../../utils/customElementIfNotExist'
declare global {
interface HTMLElementTagNameMap {
'us-form-wrap': UsFormWrap
}
}
@customElementIfNotExist('us-form-wrap')
export class UsFormWrap extends UsBaseElement {
@property({ type: String, attribute: 'data-testid', reflect: true }) dataTestId = 'form_wrap_component'
@state() formValidInputsMap = new Map()
@state() isValidForm = false
@state() validCheck!: boolean
connectedCallback(): void {
super.connectedCallback()
this.addEventListener('validHandler', this.inputListener as EventListener)
}
disconnectedCallback(): void {
this.removeEventListener('validHandler', this.inputListener as EventListener)
super.disconnectedCallback()
}
render() {
return html`
`
}
createRenderRoot() {
return this
}
inputListener(e: CustomEvent) {
const { id, isValid } = e.detail
this.formValidInputsMap.set(id, isValid)
this.isValidForm = !Array.from(this.formValidInputsMap.values()).includes(false)
const options = {
detail: {
isValid: this.isValidForm,
},
bubbles: true,
composed: true,
}
if (this.validCheck !== this.isValidForm)
this.dispatchEvent(new CustomEvent('validHandlerForm', options))
this.validCheck = this.isValidForm
}
}