{"version":3,"file":"Header.mjs","sources":["../../../src/date-picker/base/Header.tsx"],"sourcesContent":["import { defineComponent, PropType, ref, computed } from 'vue';\nimport { PaginationMini, JumperTrigger } from '../../pagination';\nimport TSelect from '../../select';\nimport { useConfig, usePrefixClass } from '../../hooks/useConfig';\nimport type { TdDatePickerProps } from '../type';\n\nexport default defineComponent({\n  name: 'XDatePickerHeader',\n  props: {\n    mode: {\n      type: String as PropType<TdDatePickerProps['mode']>,\n      default: 'date',\n    },\n    year: Number,\n    month: Number,\n    onMonthChange: Function,\n    onYearChange: Function,\n    onJumperClick: Function as PropType<(context: { e: MouseEvent; trigger: JumperTrigger }) => {}>,\n  },\n  setup(props) {\n    const { classPrefix } = useConfig('classPrefix');\n    const COMPONENT_NAME = usePrefixClass('date-picker__header');\n    const { globalConfig } = useConfig('datePicker');\n\n    const yearOptions = ref(initOptions(props.year));\n    const showMonthPicker = props.mode === 'date' || props.mode === 'week';\n\n    // 年份选择展示区间\n    const nearestYear = computed(\n      () =>\n        yearOptions.value.find((option) => option.value - props.year <= 9 && option.value - props.year >= 0)?.value ||\n        props.year,\n    );\n\n    const monthOptions = computed(() =>\n      globalConfig.value.months.map((item: string, index: number) => ({ label: item, value: index })),\n    );\n\n    function initOptions(year: number) {\n      const options = [];\n      if (props.mode === 'year') {\n        const extraYear = year % 10;\n        const minYear = year - extraYear - 100;\n        const maxYear = year - extraYear + 100;\n\n        for (let i = minYear; i <= maxYear; i += 10) {\n          options.push({ label: `${i} - ${i + 9}`, value: i + 9 });\n        }\n      } else {\n        options.push({ label: `${year}`, value: year });\n\n        for (let i = 1; i <= 10; i++) {\n          options.push({ label: `${year + i}`, value: year + i });\n          options.unshift({ label: `${year - i}`, value: year - i });\n        }\n      }\n\n      return options;\n    }\n\n    function loadMoreYear(year: number, type?: 'add' | 'reduce') {\n      const options = [];\n      if (props.mode === 'year') {\n        const extraYear = year % 10;\n        if (type === 'add') {\n          for (let i = year - extraYear + 10; i <= year - extraYear + 50; i += 10) {\n            options.push({ label: `${i} - ${i + 9}`, value: i });\n          }\n        } else {\n          for (let i = year - extraYear - 1; i > year - extraYear - 50; i -= 10) {\n            options.unshift({ label: `${i - 9} - ${i}`, value: i });\n          }\n        }\n      } else if (type === 'add') {\n        for (let i = year + 1; i <= year + 10; i++) {\n          options.push({ label: `${i}`, value: i });\n        }\n      } else {\n        for (let i = year - 1; i > year - 10; i--) {\n          options.unshift({ label: `${i}`, value: i });\n        }\n      }\n\n      return options;\n    }\n\n    // hover title\n    const labelMap = {\n      year: {\n        prev: globalConfig.value.preDecade,\n        current: globalConfig.value.now,\n        next: globalConfig.value.nextDecade,\n      },\n      month: {\n        prev: globalConfig.value.preYear,\n        current: globalConfig.value.now,\n        next: globalConfig.value.nextYear,\n      },\n      date: {\n        prev: globalConfig.value.preMonth,\n        current: globalConfig.value.now,\n        next: globalConfig.value.nextMonth,\n      },\n    };\n\n    // 滚动顶部底部自动加载\n    function handleScroll({ e }: any) {\n      if (e.target.scrollTop === 0) {\n        handlePanelTopClick(e);\n      } else if (e.target.scrollTop === e.target.scrollHeight - e.target.clientHeight) {\n        handlePanelBottomClick(e);\n      }\n    }\n\n    function handlePanelTopClick(e: MouseEvent) {\n      e?.stopPropagation?.();\n\n      const firstYear = yearOptions.value[0].value;\n      const options = loadMoreYear(firstYear, 'reduce');\n      yearOptions.value = [...options, ...yearOptions.value];\n    }\n\n    function handlePanelBottomClick(e: MouseEvent) {\n      e?.stopPropagation?.();\n\n      const lastYear = yearOptions.value.slice(-1)[0].value;\n      const options = loadMoreYear(lastYear, 'add');\n      yearOptions.value = [...yearOptions.value, ...options];\n    }\n\n    return () => (\n      <div class={COMPONENT_NAME.value}>\n        <div class={`${COMPONENT_NAME.value}-controller`}>\n          {showMonthPicker && (\n            <TSelect\n              class={`${COMPONENT_NAME.value}-controller-month`}\n              value={props.month}\n              options={monthOptions.value}\n              onChange={(val: number) => props.onMonthChange?.(val)}\n              popupProps={{\n                attach: (triggerElement: HTMLElement) => triggerElement.parentNode,\n                overlayClassName: `${COMPONENT_NAME.value}-controller-month-popup`,\n              }}\n            />\n          )}\n          <TSelect\n            class={`${COMPONENT_NAME.value}-controller-year`}\n            value={props.mode === 'year' ? nearestYear.value : props.year}\n            options={yearOptions.value}\n            onChange={(val: number) => props.onYearChange?.(val)}\n            popupProps={{\n              onScroll: handleScroll,\n              attach: (triggerElement: HTMLElement) => triggerElement.parentNode,\n              overlayClassName: `${COMPONENT_NAME.value}-controller-year-popup`,\n            }}\n            panelTopContent={() => (\n              <div class={`${classPrefix.value}-select-option`} onClick={handlePanelTopClick}>\n                ...\n              </div>\n            )}\n            panelBottomContent={() => (\n              <div class={`${classPrefix.value}-select-option`} onClick={handlePanelBottomClick}>\n                ...\n              </div>\n            )}\n          />\n        </div>\n\n        <PaginationMini tips={labelMap[props.mode]} size=\"small\" onChange={props.onJumperClick} />\n      </div>\n    );\n  },\n});\n"],"names":["name","props","mode","type","year","month","onMonthChange","onYearChange","onJumperClick","label","value","prev","current","next","date","e","yearOptions","_createVNode","TSelect","overlayClassName","onScroll","_createTextVNode"],"mappings":"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"}