{"version":3,"file":"date-select.mjs","sources":["../../../../../../../packages/components/date-select/src/date-select.tsx"],"sourcesContent":["import {\n  type ComponentPublicInstance,\n  type ExtractPropTypes,\n  type PropType,\n  computed,\n  defineComponent,\n  ref,\n  watch,\n} from 'vue'\n\n// Utils\nimport { useExpose } from '@xzx-design/hooks'\nimport {\n  createNamespace,\n  extend,\n  isDate,\n  isSameValue,\n  pick,\n} from '@xzx-design/utils'\nimport { Select } from '../../select'\nimport {\n  formatValueRange,\n  genOptions,\n  getMonthEndDay,\n  selectInheritKeys,\n  sharedProps,\n} from './utils'\n\n// Components\nimport type { SelectInstance } from '../../select'\n\nconst currentYear = new Date().getFullYear()\nconst [name] = createNamespace('date-select')\n\nexport type DateSelectColumnType = 'year' | 'month' | 'day'\n\nexport const dateSelectProps = extend({}, sharedProps, {\n  columnsType: {\n    type: Array as PropType<DateSelectColumnType[]>,\n    default: () => ['year', 'month', 'day'],\n  },\n  minDate: {\n    type: Date,\n    default: () => new Date(currentYear - 10, 0, 1),\n    validator: isDate,\n  },\n  maxDate: {\n    type: Date,\n    default: () => new Date(currentYear + 10, 11, 31),\n    validator: isDate,\n  },\n})\n\nexport type DateSelectExpose = {\n  confirm: () => void\n  getSelectedDate: () => string[]\n}\n\nexport type DateSelectProps = ExtractPropTypes<typeof dateSelectProps>\n\nexport type DateSelectInstance = ComponentPublicInstance<\n  DateSelectProps,\n  DateSelectExpose\n>\n\nexport default defineComponent({\n  name,\n\n  props: dateSelectProps,\n\n  emits: ['confirm', 'cancel', 'change', 'update:modelValue'],\n\n  setup(props, { emit, slots }) {\n    const currentValues = ref<string[]>(props.modelValue)\n    const updatedByExternalSources = ref(false)\n    const selectRef = ref<SelectInstance>()\n    const computedValues = computed(() =>\n      updatedByExternalSources.value ? props.modelValue : currentValues.value\n    )\n\n    const isMinYear = (year: number) => year === props.minDate.getFullYear()\n    const isMaxYear = (year: number) => year === props.maxDate.getFullYear()\n    const isMinMonth = (month: number) => month === props.minDate.getMonth() + 1\n    const isMaxMonth = (month: number) => month === props.maxDate.getMonth() + 1\n\n    const getValue = (type: DateSelectColumnType) => {\n      const { minDate, columnsType } = props\n      const index = columnsType.indexOf(type)\n      const value = computedValues.value[index]\n\n      if (value) {\n        return +value\n      }\n\n      switch (type) {\n        case 'year':\n          return minDate.getFullYear()\n        case 'month':\n          return minDate.getMonth() + 1\n        case 'day':\n          return minDate.getDate()\n      }\n    }\n\n    const genYearOptions = () => {\n      const minYear = props.minDate.getFullYear()\n      const maxYear = props.maxDate.getFullYear()\n      return genOptions(\n        minYear,\n        maxYear,\n        'year',\n        props.formatter,\n        props.filter,\n        computedValues.value\n      )\n    }\n\n    const genMonthOptions = () => {\n      const year = getValue('year')\n      const minMonth = isMinYear(year) ? props.minDate.getMonth() + 1 : 1\n      const maxMonth = isMaxYear(year) ? props.maxDate.getMonth() + 1 : 12\n\n      return genOptions(\n        minMonth,\n        maxMonth,\n        'month',\n        props.formatter,\n        props.filter,\n        computedValues.value\n      )\n    }\n\n    const genDayOptions = () => {\n      const year = getValue('year')\n      const month = getValue('month')\n      const minDate =\n        isMinYear(year) && isMinMonth(month) ? props.minDate.getDate() : 1\n      const maxDate =\n        isMaxYear(year) && isMaxMonth(month)\n          ? props.maxDate.getDate()\n          : getMonthEndDay(year, month)\n\n      return genOptions(\n        minDate,\n        maxDate,\n        'day',\n        props.formatter,\n        props.filter,\n        computedValues.value\n      )\n    }\n\n    const confirm = () => selectRef.value?.confirm()\n\n    const getSelectedDate = () => currentValues.value\n\n    const columns = computed(() =>\n      props.columnsType.map((type) => {\n        switch (type) {\n          case 'year':\n            return genYearOptions()\n          case 'month':\n            return genMonthOptions()\n          case 'day':\n            return genDayOptions()\n          default:\n            if (process.env.NODE_ENV !== 'production') {\n              throw new Error(\n                `[Vant] DateSelect: unsupported columns type: ${type}`\n              )\n            }\n            return []\n        }\n      })\n    )\n\n    watch(currentValues, (newValues) => {\n      if (!isSameValue(newValues, props.modelValue)) {\n        emit('update:modelValue', newValues)\n      }\n    })\n\n    watch(\n      () => props.modelValue,\n      (newValues, oldValues) => {\n        updatedByExternalSources.value = isSameValue(\n          oldValues,\n          currentValues.value\n        )\n        newValues = formatValueRange(newValues, columns.value)\n        if (!isSameValue(newValues, currentValues.value)) {\n          currentValues.value = newValues\n        }\n        updatedByExternalSources.value = false\n      },\n      {\n        immediate: true,\n      }\n    )\n\n    const onChange = (...args: unknown[]) => emit('change', ...args)\n    const onCancel = (...args: unknown[]) => emit('cancel', ...args)\n    const onConfirm = (...args: unknown[]) => emit('confirm', ...args)\n\n    useExpose<DateSelectExpose>({ confirm, getSelectedDate })\n\n    return () => (\n      <Select\n        ref={selectRef}\n        v-slots={slots}\n        v-model={currentValues.value}\n        columns={columns.value}\n        onChange={onChange}\n        onCancel={onCancel}\n        onConfirm={onConfirm}\n        {...pick(props, selectInheritKeys)}\n      />\n    )\n  },\n})\n"],"names":["currentYear","Date","getFullYear","name","createNamespace","dateSelectProps","extend","sharedProps","columnsType","type","Array","default","minDate","validator","isDate","maxDate","defineComponent","props","emits","setup","emit","slots","currentValues","ref","modelValue","updatedByExternalSources","selectRef","computedValues","computed","value","isMinYear","year","isMaxYear","isMinMonth","month","getMonth","isMaxMonth","getValue","index","indexOf","getDate","genYearOptions","minYear","maxYear","genOptions","formatter","filter","genMonthOptions","minMonth","maxMonth","genDayOptions","getMonthEndDay","confirm","getSelectedDate","columns","map","process","env","NODE_ENV","Error","watch","newValues","isSameValue","oldValues","formatValueRange","immediate","onChange","args","onCancel","onConfirm","useExpose","_createVNode","Select","_mergeProps","$event","pick","selectInheritKeys"],"mappings":"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"}