UNPKG

@vuesax-alpha/nightly

Version:
1 lines 9.63 kB
{"version":3,"file":"use-checkbox.mjs","sources":["../../../../../../../packages/components/checkbox/src/composables/use-checkbox.ts"],"sourcesContent":["import {\n type ComponentInternalInstance,\n computed,\n inject,\n onBeforeMount,\n ref,\n toRaw,\n} from 'vue'\nimport { isEqual, isNil, toArray } from 'lodash-unified'\nimport { isArray, isBoolean, isObject, isUndefined } from '@vuesax-alpha/utils'\nimport { UPDATE_MODEL_EVENT } from '@vuesax-alpha/constants'\nimport { useDisabled } from '@vuesax-alpha/hooks'\nimport { checkboxGroupContextKey } from '@vuesax-alpha/tokens'\nimport type {\n CheckboxEmitsFn,\n CheckboxProps,\n CheckboxValueType,\n} from './../checkbox'\n\nconst setStoreValue = (\n props: CheckboxProps,\n { model }: Pick<UseCheckbox, 'model'>\n) => {\n if (props.checked) {\n if (isArray(model.value) && !model.value.includes(props.value)) {\n model.value.push(props.value)\n } else {\n model.value = props.value || true\n }\n }\n}\n\nexport const useCheckbox = (\n props: CheckboxProps,\n emit: CheckboxEmitsFn,\n slots: ComponentInternalInstance['slots']\n) => {\n // self model check status\n const selfModel = ref<boolean>(false)\n const isLimitExceeded = ref<boolean>(false)\n\n const checkboxGroup = inject(checkboxGroupContextKey, undefined)\n const isGroup = computed(() => isUndefined(checkboxGroup) === false)\n\n const isChecked = computed<boolean>(() => {\n const value = model.value || checkboxGroup?.modelValue\n\n if (isBoolean(value)) return value\n\n if (isArray(value)) {\n if (isObject(props.value)) {\n return value.map(toRaw).some((o) => isEqual(o, props.value))\n }\n return value.map(toRaw).includes(props.value)\n }\n\n if (value !== null && value !== undefined) return value === props.value\n\n if (props.checkedForce) return true\n\n return !!value\n })\n\n const hasOwnLabel = computed<boolean>(() => {\n return !!(slots.default || props.label)\n })\n\n const isLimitDisabled = computed(() => {\n const max = Number(checkboxGroup?.max?.value || props.max)\n const min = Number(checkboxGroup?.min?.value || props.min)\n\n return (\n (!isNil(max) && toArray(model.value).length >= max && !isChecked.value) ||\n (!isNil(min) && toArray(model.value).length <= min && isChecked.value)\n )\n })\n\n const isDisabled = useDisabled(\n computed(() => checkboxGroup?.disabled.value || isLimitDisabled.value)\n )\n\n const model = computed({\n get() {\n return isGroup.value\n ? checkboxGroup?.modelValue?.value\n : props.modelValue || selfModel.value\n },\n\n set(val: CheckboxValueType) {\n if (isDisabled.value || isLimitExceeded.value) return\n\n if (isGroup.value && isArray(val)) {\n isLimitExceeded.value =\n checkboxGroup?.max?.value !== undefined &&\n val.length > checkboxGroup?.max.value\n isLimitExceeded.value === false && checkboxGroup?.changeEvent?.(val)\n return\n }\n\n let updatedValue: CheckboxValueType = val\n // have self value\n if (val && props.value) {\n updatedValue = props.value\n }\n\n if (isBoolean(updatedValue)) {\n emit(UPDATE_MODEL_EVENT, updatedValue)\n } else if (isArray(props.modelValue)) {\n const modelValueRaw = props.modelValue.map(toRaw)\n\n const indexVal = modelValueRaw.findIndex((e) =>\n isEqual(e, updatedValue)\n )\n\n if (indexVal == -1) {\n modelValueRaw.push(updatedValue)\n } else {\n modelValueRaw.splice(indexVal, 1)\n }\n emit('update:modelValue', modelValueRaw)\n } else {\n if (updatedValue !== props.modelValue) {\n if (val) {\n emit(UPDATE_MODEL_EVENT, [props.modelValue, updatedValue])\n } else {\n emit(UPDATE_MODEL_EVENT, updatedValue)\n }\n } else {\n emit(UPDATE_MODEL_EVENT, props.notValue || false)\n }\n }\n\n selfModel.value = !!val\n },\n })\n\n onBeforeMount(() => {\n if (props.checked || props.checkedForce) {\n model.value = props.value || true\n }\n })\n\n const getCheckboxValue = (value: string | number | boolean) => {\n return value === props.value || value === true\n }\n\n const handleChange = (e: Event) => {\n if (isLimitExceeded.value) return\n\n const target = e.target as HTMLInputElement\n emit('change', getCheckboxValue(target.checked))\n }\n\n setStoreValue(props, { model })\n\n return {\n isChecked,\n isDisabled,\n hasOwnLabel,\n model,\n handleChange,\n }\n}\n\nexport type UseCheckbox = ReturnType<typeof useCheckbox>\n"],"names":[],"mappings":"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"}