UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 5.66 kB
{"version":3,"file":"use-common-picker.mjs","names":[],"sources":["../../../../../../../packages/components/time-picker/src/composables/use-common-picker.ts"],"sourcesContent":["import { computed, ref } from 'vue'\nimport { isEqual } from 'lodash-unified'\nimport { useLocale } from '@element-plus/hooks/use-locale'\nimport { isArray } from '@element-plus/utils'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { dayOrDaysToDate, formatter, parseDate, valueEquals } from '../utils'\n\nimport type { Dayjs } from 'dayjs'\nimport type {\n DateModelType,\n DayOrDays,\n ModelValueType,\n PickerOptions,\n SingleOrRange,\n UserInput,\n} from '../common/props'\n\ninterface CommonPickerProps {\n modelValue: ModelValueType | null\n valueFormat?: string\n}\ntype CommonPickerEmits = (\n event: 'update:modelValue' | 'calendar-change' | 'panel-change',\n ...args: any[]\n) => void\n\nexport const useCommonPicker = <\n P extends CommonPickerProps,\n E extends CommonPickerEmits,\n>(\n props: P,\n emit: E\n) => {\n const { lang } = useLocale()\n const pickerVisible = ref(false)\n const pickerActualVisible = ref(false)\n const userInput = ref<UserInput>(null)\n\n const valueIsEmpty = computed(() => {\n const { modelValue } = props\n return (\n !modelValue || (isArray(modelValue) && !modelValue.filter(Boolean).length)\n )\n })\n\n const emitInput = (input: SingleOrRange<DateModelType> | null) => {\n if (!valueEquals(props.modelValue, input)) {\n let formatted\n if (isArray(input)) {\n formatted = input.map((item) =>\n formatter(item, props.valueFormat, lang.value)\n )\n } else if (input) {\n formatted = formatter(input, props.valueFormat, lang.value)\n }\n const emitVal = input ? formatted : input\n emit(UPDATE_MODEL_EVENT, emitVal, lang.value)\n }\n }\n\n const parsedValue = computed(() => {\n let dayOrDays: DayOrDays\n if (valueIsEmpty.value) {\n if (pickerOptions.value.getDefaultValue) {\n dayOrDays = pickerOptions.value.getDefaultValue()\n }\n } else {\n if (isArray(props.modelValue)) {\n dayOrDays = props.modelValue.map((d) =>\n parseDate(d, props.valueFormat, lang.value)\n ) as [Dayjs, Dayjs]\n } else {\n dayOrDays = parseDate(\n props.modelValue ?? '',\n props.valueFormat,\n lang.value\n )!\n }\n }\n\n if (pickerOptions.value.getRangeAvailableTime) {\n const availableResult = pickerOptions.value.getRangeAvailableTime(\n dayOrDays!\n )\n if (!isEqual(availableResult, dayOrDays!)) {\n dayOrDays = availableResult\n\n // The result is corrected only when model-value exists\n if (!valueIsEmpty.value) {\n emitInput(dayOrDaysToDate(dayOrDays))\n }\n }\n }\n if (isArray(dayOrDays!) && dayOrDays.some((day) => !day)) {\n dayOrDays = [] as unknown as DayOrDays\n }\n return dayOrDays!\n })\n\n const pickerOptions = ref<Partial<PickerOptions>>({})\n\n const onSetPickerOption = <T extends keyof PickerOptions>(\n e: [T, PickerOptions[T]]\n ) => {\n pickerOptions.value[e[0]] = e[1]\n pickerOptions.value.panelReady = true\n }\n\n const onCalendarChange = (e: [Date, null | Date]) => {\n emit('calendar-change', e)\n }\n\n const onPanelChange = (\n value: [Dayjs, Dayjs],\n mode: 'month' | 'year',\n view: unknown\n ) => {\n emit('panel-change', value, mode, view)\n }\n\n const onPick = (date: any = '', visible = false) => {\n pickerVisible.value = visible\n let result\n if (isArray(date)) {\n result = date.map((_) => _.toDate())\n } else {\n // clear btn emit null\n result = date ? date.toDate() : date\n }\n userInput.value = null\n emitInput(result)\n }\n\n return {\n parsedValue,\n pickerActualVisible,\n pickerOptions,\n pickerVisible,\n userInput,\n valueIsEmpty,\n emitInput,\n onCalendarChange,\n onPanelChange,\n onPick,\n onSetPickerOption,\n }\n}\n\nexport type CommonPickerContext = ReturnType<typeof useCommonPicker>\n"],"mappings":";;;;;;;;AA0BA,MAAa,mBAIX,OACA,SACG;CACH,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,gBAAgB,IAAI,MAAM;CAChC,MAAM,sBAAsB,IAAI,MAAM;CACtC,MAAM,YAAY,IAAe,KAAK;CAEtC,MAAM,eAAe,eAAe;EAClC,MAAM,EAAE,eAAe;AACvB,SACE,CAAC,cAAe,QAAQ,WAAW,IAAI,CAAC,WAAW,OAAO,QAAQ,CAAC;GAErE;CAEF,MAAM,aAAa,UAA+C;AAChE,MAAI,CAAC,YAAY,MAAM,YAAY,MAAM,EAAE;GACzC,IAAI;AACJ,OAAI,QAAQ,MAAM,CAChB,aAAY,MAAM,KAAK,SACrB,UAAU,MAAM,MAAM,aAAa,KAAK,MAAM,CAC/C;YACQ,MACT,aAAY,UAAU,OAAO,MAAM,aAAa,KAAK,MAAM;AAG7D,QAAK,oBADW,QAAQ,YAAY,OACF,KAAK,MAAM;;;CAIjD,MAAM,cAAc,eAAe;EACjC,IAAI;AACJ,MAAI,aAAa,OACf;OAAI,cAAc,MAAM,gBACtB,aAAY,cAAc,MAAM,iBAAiB;aAG/C,QAAQ,MAAM,WAAW,CAC3B,aAAY,MAAM,WAAW,KAAK,MAChC,UAAU,GAAG,MAAM,aAAa,KAAK,MAAM,CAC5C;MAED,aAAY,UACV,MAAM,cAAc,IACpB,MAAM,aACN,KAAK,MACN;AAIL,MAAI,cAAc,MAAM,uBAAuB;GAC7C,MAAM,kBAAkB,cAAc,MAAM,sBAC1C,UACD;AACD,OAAI,CAAC,QAAQ,iBAAiB,UAAW,EAAE;AACzC,gBAAY;AAGZ,QAAI,CAAC,aAAa,MAChB,WAAU,gBAAgB,UAAU,CAAC;;;AAI3C,MAAI,QAAQ,UAAW,IAAI,UAAU,MAAM,QAAQ,CAAC,IAAI,CACtD,aAAY,EAAE;AAEhB,SAAO;GACP;CAEF,MAAM,gBAAgB,IAA4B,EAAE,CAAC;CAErD,MAAM,qBACJ,MACG;AACH,gBAAc,MAAM,EAAE,MAAM,EAAE;AAC9B,gBAAc,MAAM,aAAa;;CAGnC,MAAM,oBAAoB,MAA2B;AACnD,OAAK,mBAAmB,EAAE;;CAG5B,MAAM,iBACJ,OACA,MACA,SACG;AACH,OAAK,gBAAgB,OAAO,MAAM,KAAK;;CAGzC,MAAM,UAAU,OAAY,IAAI,UAAU,UAAU;AAClD,gBAAc,QAAQ;EACtB,IAAI;AACJ,MAAI,QAAQ,KAAK,CACf,UAAS,KAAK,KAAK,MAAM,EAAE,QAAQ,CAAC;MAGpC,UAAS,OAAO,KAAK,QAAQ,GAAG;AAElC,YAAU,QAAQ;AAClB,YAAU,OAAO;;AAGnB,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}