element-plus
Version:
A Component Library for Vue 3
1 lines • 4.8 kB
Source Map (JSON)
{"version":3,"file":"use-checkbox-event.mjs","sources":["../../../../../../../packages/components/checkbox/src/composables/use-checkbox-event.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, nextTick, watch } from 'vue'\nimport { useFormItem } from '@element-plus/components/form'\nimport { debugWarn } from '@element-plus/utils'\nimport { CHANGE_EVENT } from '@element-plus/constants'\nimport { checkboxGroupContextKey } from '../constants'\n\nimport type { useFormItemInputId } from '@element-plus/components/form'\nimport type { CheckboxProps } from '../checkbox'\nimport type {\n CheckboxDisabled,\n CheckboxModel,\n CheckboxStatus,\n} from '../composables'\n\nexport const useCheckboxEvent = (\n props: CheckboxProps,\n {\n model,\n isLimitExceeded,\n hasOwnLabel,\n isDisabled,\n isLabeledByFormItem,\n }: Pick<CheckboxModel, 'model' | 'isLimitExceeded'> &\n Pick<CheckboxStatus, 'hasOwnLabel'> &\n Pick<CheckboxDisabled, 'isDisabled'> &\n Pick<ReturnType<typeof useFormItemInputId>, 'isLabeledByFormItem'>\n) => {\n const checkboxGroup = inject(checkboxGroupContextKey, undefined)\n const { formItem } = useFormItem()\n const { emit } = getCurrentInstance()!\n\n function getLabeledValue(value: string | number | boolean) {\n return [true, props.trueValue, props.trueLabel].includes(value)\n ? (props.trueValue ?? props.trueLabel ?? true)\n : (props.falseValue ?? props.falseLabel ?? false)\n }\n\n function emitChangeEvent(\n checked: string | number | boolean,\n e: InputEvent | MouseEvent\n ) {\n emit(CHANGE_EVENT, getLabeledValue(checked), e)\n }\n\n function handleChange(e: Event) {\n if (isLimitExceeded.value) return\n\n const target = e.target as HTMLInputElement\n emit(CHANGE_EVENT, getLabeledValue(target.checked), e)\n }\n\n async function onClickRoot(e: MouseEvent) {\n if (isLimitExceeded.value) return\n\n if (!hasOwnLabel.value && !isDisabled.value && isLabeledByFormItem.value) {\n // fix: https://github.com/element-plus/element-plus/issues/9981\n const eventTargets: EventTarget[] = e.composedPath()\n const hasLabel = eventTargets.some(\n (item) => (item as HTMLElement).tagName === 'LABEL'\n )\n if (!hasLabel) {\n model.value = getLabeledValue(\n [false, props.falseValue, props.falseLabel].includes(model.value)\n )\n await nextTick()\n emitChangeEvent(model.value, e)\n }\n }\n }\n\n const validateEvent = computed(\n () => checkboxGroup?.validateEvent || props.validateEvent\n )\n\n watch(\n () => props.modelValue,\n () => {\n if (validateEvent.value) {\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n }\n )\n\n return {\n handleChange,\n onClickRoot,\n }\n}\n"],"names":[],"mappings":";;;;;;AAcO,MAAM,gBAAA,GAAmB,CAC9B,KAAA,EACA;AAAA,EACE,KAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAIG;AACH,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,uBAAA,EAAyB,MAAS,CAAA;AAC/D,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,EAAY;AACjC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,kBAAA,EAAmB;AAEpC,EAAA,SAAS,gBAAgB,KAAA,EAAkC;AA/B7D,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAgCI,IAAA,OAAO,CAAC,MAAM,KAAA,CAAM,SAAA,EAAW,MAAM,SAAS,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,GAAA,CACzD,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,cAAN,IAAA,GAAA,EAAA,GAAmB,KAAA,CAAM,cAAzB,IAAA,GAAA,EAAA,GAAsC,IAAA,GAAA,CACtC,iBAAM,UAAA,KAAN,IAAA,GAAA,EAAA,GAAoB,KAAA,CAAM,UAAA,KAA1B,IAAA,GAAA,EAAA,GAAwC,KAAA;AAAA,EAC/C;AAEA,EAAA,SAAS,eAAA,CACP,SACA,CAAA,EACA;AACA,IAAA,IAAA,CAAK,YAAA,EAAc,eAAA,CAAgB,OAAO,CAAA,EAAG,CAAC,CAAA;AAAA,EAChD;AAEA,EAAA,SAAS,aAAa,CAAA,EAAU;AAC9B,IAAA,IAAI,gBAAgB,KAAA,EAAO;AAE3B,IAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,IAAA,IAAA,CAAK,YAAA,EAAc,eAAA,CAAgB,MAAA,CAAO,OAAO,GAAG,CAAC,CAAA;AAAA,EACvD;AAEA,EAAA,eAAe,YAAY,CAAA,EAAe;AACxC,IAAA,IAAI,gBAAgB,KAAA,EAAO;AAE3B,IAAA,IAAI,CAAC,WAAA,CAAY,KAAA,IAAS,CAAC,UAAA,CAAW,KAAA,IAAS,oBAAoB,KAAA,EAAO;AAExE,MAAA,MAAM,YAAA,GAA8B,EAAE,YAAA,EAAa;AACnD,MAAA,MAAM,WAAW,YAAA,CAAa,IAAA;AAAA,QAC5B,CAAC,IAAA,KAAU,IAAA,CAAqB,OAAA,KAAY;AAAA,OAC9C;AACA,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,KAAA,CAAM,KAAA,GAAQ,eAAA;AAAA,UACZ,CAAC,OAAO,KAAA,CAAM,UAAA,EAAY,MAAM,UAAU,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,KAAK;AAAA,SAClE;AACA,QAAA,MAAM,QAAA,EAAS;AACf,QAAA,eAAA,CAAgB,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,QAAA;AAAA,IACpB,MAAA,CAAM,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,aAAA,KAAiB,KAAA,CAAM;AAAA,GAC9C;AAEA,EAAA,KAAA;AAAA,IACE,MAAM,KAAA,CAAM,UAAA;AAAA,IACZ,MAAM;AACJ,MAAA,IAAI,cAAc,KAAA,EAAO;AACvB,QAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,SAAS,QAAA,CAAA,CAAU,KAAA,CAAM,CAAC,GAAA,KAAQ,UAAU,GAAG,CAAA,CAAA;AAAA,MAC3D;AAAA,IACF;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}