{"version":3,"file":"panel-time-range.mjs","sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/panel-time-range.vue"],"sourcesContent":["<template>\n  <div v-if=\"actualVisible\" class=\"el-time-range-picker el-picker-panel\">\n    <div class=\"el-time-range-picker__content\">\n      <div class=\"el-time-range-picker__cell\">\n        <div class=\"el-time-range-picker__header\">\n          {{ t('el.datepicker.startTime') }}\n        </div>\n        <div\n          :class=\"{ 'has-seconds': showSeconds, 'is-arrow': arrowControl }\"\n          class=\"el-time-range-picker__body el-time-panel__content\"\n        >\n          <time-spinner\n            ref=\"minSpinner\"\n            role=\"start\"\n            :show-seconds=\"showSeconds\"\n            :am-pm-mode=\"amPmMode\"\n            :arrow-control=\"arrowControl\"\n            :spinner-date=\"minDate\"\n            :disabled-hours=\"disabledHours_\"\n            :disabled-minutes=\"disabledMinutes_\"\n            :disabled-seconds=\"disabledSeconds_\"\n            @change=\"handleMinChange\"\n            @set-option=\"onSetOption\"\n            @select-range=\"setMinSelectionRange\"\n          />\n        </div>\n      </div>\n      <div class=\"el-time-range-picker__cell\">\n        <div class=\"el-time-range-picker__header\">\n          {{ t('el.datepicker.endTime') }}\n        </div>\n        <div\n          :class=\"{ 'has-seconds': showSeconds, 'is-arrow': arrowControl }\"\n          class=\"el-time-range-picker__body el-time-panel__content\"\n        >\n          <time-spinner\n            ref=\"maxSpinner\"\n            role=\"end\"\n            :show-seconds=\"showSeconds\"\n            :am-pm-mode=\"amPmMode\"\n            :arrow-control=\"arrowControl\"\n            :spinner-date=\"maxDate\"\n            :disabled-hours=\"disabledHours_\"\n            :disabled-minutes=\"disabledMinutes_\"\n            :disabled-seconds=\"disabledSeconds_\"\n            @change=\"handleMaxChange\"\n            @set-option=\"onSetOption\"\n            @select-range=\"setMaxSelectionRange\"\n          />\n        </div>\n      </div>\n    </div>\n    <div class=\"el-time-panel__footer\">\n      <button\n        type=\"button\"\n        class=\"el-time-panel__btn cancel\"\n        @click=\"handleCancel()\"\n      >\n        {{ t('el.datepicker.cancel') }}\n      </button>\n      <button\n        type=\"button\"\n        class=\"el-time-panel__btn confirm\"\n        :disabled=\"btnConfirmDisabled\"\n        @click=\"handleConfirm()\"\n      >\n        {{ t('el.datepicker.confirm') }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, inject } from 'vue'\nimport dayjs from 'dayjs'\nimport { union } from 'lodash-unified'\nimport { useLocale } from '@element-plus/hooks'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport TimeSpinner from './basic-time-spinner.vue'\nimport { getAvailableArrs, useOldValue } from './useTimePicker'\n\nimport type { PropType } from 'vue'\nimport type { Dayjs } from 'dayjs'\n\nconst makeSelectRange = (start: number, end: number) => {\n  const result = []\n  for (let i = start; i <= end; i++) {\n    result.push(i)\n  }\n  return result\n}\nexport default defineComponent({\n  components: { TimeSpinner },\n\n  props: {\n    visible: Boolean,\n    actualVisible: Boolean,\n    parsedValue: {\n      type: [Array] as PropType<Array<Dayjs>>,\n    },\n    format: {\n      type: String,\n      default: '',\n    },\n  },\n\n  emits: ['pick', 'select-range', 'set-picker-option'],\n\n  setup(props, ctx) {\n    const { t, lang } = useLocale()\n    const minDate = computed(() => props.parsedValue[0])\n    const maxDate = computed(() => props.parsedValue[1])\n    const oldValue = useOldValue(props)\n    const handleCancel = () => {\n      ctx.emit('pick', oldValue.value, null)\n    }\n    const showSeconds = computed(() => {\n      return props.format.includes('ss')\n    })\n    const amPmMode = computed(() => {\n      if (props.format.includes('A')) return 'A'\n      if (props.format.includes('a')) return 'a'\n      return ''\n    })\n\n    const minSelectableRange = ref([])\n    const maxSelectableRange = ref([])\n\n    const handleConfirm = (visible = false) => {\n      ctx.emit('pick', [minDate.value, maxDate.value], visible)\n    }\n\n    const handleMinChange = (date) => {\n      handleChange(date.millisecond(0), maxDate.value)\n    }\n    const handleMaxChange = (date) => {\n      handleChange(minDate.value, date.millisecond(0))\n    }\n\n    const isValidValue = (_date: Dayjs[]) => {\n      const parsedDate = _date.map((_) => dayjs(_).locale(lang.value))\n      const result = getRangeAvailableTime(parsedDate)\n      return parsedDate[0].isSame(result[0]) && parsedDate[1].isSame(result[1])\n    }\n\n    const handleChange = (_minDate, _maxDate) => {\n      // todo getRangeAvailableTime(_date).millisecond(0)\n      ctx.emit('pick', [_minDate, _maxDate], true)\n    }\n    const btnConfirmDisabled = computed(() => {\n      return minDate.value > maxDate.value\n    })\n\n    const selectionRange = ref([0, 2])\n    const setMinSelectionRange = (start, end) => {\n      ctx.emit('select-range', start, end, 'min')\n      selectionRange.value = [start, end]\n    }\n\n    const offset = computed(() => (showSeconds.value ? 11 : 8))\n    const setMaxSelectionRange = (start, end) => {\n      ctx.emit('select-range', start, end, 'max')\n      selectionRange.value = [start + offset.value, end + offset.value]\n    }\n\n    const changeSelectionRange = (step) => {\n      const list = showSeconds.value ? [0, 3, 6, 11, 14, 17] : [0, 3, 8, 11]\n      const mapping = ['hours', 'minutes'].concat(\n        showSeconds.value ? ['seconds'] : []\n      )\n      const index = list.indexOf(selectionRange.value[0])\n      const next = (index + step + list.length) % list.length\n      const half = list.length / 2\n      if (next < half) {\n        timePickerOptions['start_emitSelectRange'](mapping[next])\n      } else {\n        timePickerOptions['end_emitSelectRange'](mapping[next - half])\n      }\n    }\n\n    const handleKeydown = (event: KeyboardEvent) => {\n      const code = event.code\n\n      if (code === EVENT_CODE.left || code === EVENT_CODE.right) {\n        const step = code === EVENT_CODE.left ? -1 : 1\n        changeSelectionRange(step)\n        event.preventDefault()\n        return\n      }\n\n      if (code === EVENT_CODE.up || code === EVENT_CODE.down) {\n        const step = code === EVENT_CODE.up ? -1 : 1\n        const role = selectionRange.value[0] < offset.value ? 'start' : 'end'\n        timePickerOptions[`${role}_scrollDown`](step)\n        event.preventDefault()\n        return\n      }\n    }\n\n    const disabledHours_ = (role, compare) => {\n      const defaultDisable = disabledHours ? disabledHours(role) : []\n      const isStart = role === 'start'\n      const compareDate = compare || (isStart ? maxDate.value : minDate.value)\n      const compareHour = compareDate.hour()\n      const nextDisable = isStart\n        ? makeSelectRange(compareHour + 1, 23)\n        : makeSelectRange(0, compareHour - 1)\n      return union(defaultDisable, nextDisable)\n    }\n    const disabledMinutes_ = (hour, role, compare) => {\n      const defaultDisable = disabledMinutes ? disabledMinutes(hour, role) : []\n      const isStart = role === 'start'\n      const compareDate = compare || (isStart ? maxDate.value : minDate.value)\n      const compareHour = compareDate.hour()\n      if (hour !== compareHour) {\n        return defaultDisable\n      }\n      const compareMinute = compareDate.minute()\n      const nextDisable = isStart\n        ? makeSelectRange(compareMinute + 1, 59)\n        : makeSelectRange(0, compareMinute - 1)\n      return union(defaultDisable, nextDisable)\n    }\n    const disabledSeconds_ = (hour, minute, role, compare) => {\n      const defaultDisable = disabledSeconds\n        ? disabledSeconds(hour, minute, role)\n        : []\n      const isStart = role === 'start'\n      const compareDate = compare || (isStart ? maxDate.value : minDate.value)\n      const compareHour = compareDate.hour()\n      const compareMinute = compareDate.minute()\n      if (hour !== compareHour || minute !== compareMinute) {\n        return defaultDisable\n      }\n      const compareSecond = compareDate.second()\n      const nextDisable = isStart\n        ? makeSelectRange(compareSecond + 1, 59)\n        : makeSelectRange(0, compareSecond - 1)\n      return union(defaultDisable, nextDisable)\n    }\n\n    const getRangeAvailableTime = (dates: Array<Dayjs>) => {\n      return dates.map((_, index) =>\n        getRangeAvailableTimeEach(\n          dates[0],\n          dates[1],\n          index === 0 ? 'start' : 'end'\n        )\n      )\n    }\n\n    const { getAvailableHours, getAvailableMinutes, getAvailableSeconds } =\n      getAvailableArrs(disabledHours_, disabledMinutes_, disabledSeconds_)\n\n    const getRangeAvailableTimeEach = (\n      startDate: Dayjs,\n      endDate: Dayjs,\n      role\n    ) => {\n      const availableMap = {\n        hour: getAvailableHours,\n        minute: getAvailableMinutes,\n        second: getAvailableSeconds,\n      }\n      const isStart = role === 'start'\n      let result = isStart ? startDate : endDate\n      const compareDate = isStart ? endDate : startDate\n      ;['hour', 'minute', 'second'].forEach((_) => {\n        if (availableMap[_]) {\n          let availableArr\n          const method = availableMap[_]\n          if (_ === 'minute') {\n            availableArr = method(result.hour(), role, compareDate)\n          } else if (_ === 'second') {\n            availableArr = method(\n              result.hour(),\n              result.minute(),\n              role,\n              compareDate\n            )\n          } else {\n            availableArr = method(role, compareDate)\n          }\n          if (\n            availableArr &&\n            availableArr.length &&\n            !availableArr.includes(result[_]())\n          ) {\n            const pos = isStart ? 0 : availableArr.length - 1\n            result = result[_](availableArr[pos])\n          }\n        }\n      })\n      return result\n    }\n\n    const parseUserInput = (value: Dayjs[] | Dayjs) => {\n      if (!value) return null\n      if (Array.isArray(value)) {\n        return value.map((_) => dayjs(_, props.format).locale(lang.value))\n      }\n      return dayjs(value, props.format).locale(lang.value)\n    }\n\n    const formatToString = (value: Dayjs[] | Dayjs) => {\n      if (!value) return null\n      if (Array.isArray(value)) {\n        return value.map((_) => _.format(props.format))\n      }\n      return value.format(props.format)\n    }\n\n    const getDefaultValue = () => {\n      if (Array.isArray(defaultValue)) {\n        return defaultValue.map((_) => dayjs(_).locale(lang.value))\n      }\n      const defaultDay = dayjs(defaultValue).locale(lang.value)\n      return [defaultDay, defaultDay.add(60, 'm')]\n    }\n\n    ctx.emit('set-picker-option', ['formatToString', formatToString])\n    ctx.emit('set-picker-option', ['parseUserInput', parseUserInput])\n    ctx.emit('set-picker-option', ['isValidValue', isValidValue])\n    ctx.emit('set-picker-option', ['handleKeydown', handleKeydown])\n    ctx.emit('set-picker-option', ['getDefaultValue', getDefaultValue])\n    ctx.emit('set-picker-option', [\n      'getRangeAvailableTime',\n      getRangeAvailableTime,\n    ])\n\n    const timePickerOptions = {} as any\n    const onSetOption = (e) => {\n      timePickerOptions[e[0]] = e[1]\n    }\n\n    const pickerBase = inject('EP_PICKER_BASE') as any\n    const {\n      arrowControl,\n      disabledHours,\n      disabledMinutes,\n      disabledSeconds,\n      defaultValue,\n    } = pickerBase.props\n\n    return {\n      arrowControl,\n      onSetOption,\n      setMaxSelectionRange,\n      setMinSelectionRange,\n      btnConfirmDisabled,\n      handleCancel,\n      handleConfirm,\n      t,\n      showSeconds,\n      minDate,\n      maxDate,\n      amPmMode,\n      handleMinChange,\n      handleMaxChange,\n      minSelectableRange,\n      maxSelectableRange,\n      disabledHours_,\n      disabledMinutes_,\n      disabledSeconds_,\n    }\n  },\n})\n</script>\n"],"names":["_createElementBlock","_createElementVNode","_toDisplayString"],"mappings":"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"}