{"version":3,"file":"panel-month-range.mjs","sources":["../../../../../../../packages/components/date-picker/src/date-picker-com/panel-month-range.vue"],"sourcesContent":["<template>\n  <div\n    class=\"el-picker-panel el-date-range-picker\"\n    :class=\"[\n      {\n        'has-sidebar': $slots.sidebar || hasShortcuts,\n      },\n    ]\"\n  >\n    <div class=\"el-picker-panel__body-wrapper\">\n      <slot name=\"sidebar\" class=\"el-picker-panel__sidebar\"></slot>\n      <div v-if=\"hasShortcuts\" class=\"el-picker-panel__sidebar\">\n        <button\n          v-for=\"(shortcut, key) in shortcuts\"\n          :key=\"key\"\n          type=\"button\"\n          class=\"el-picker-panel__shortcut\"\n          @click=\"handleShortcutClick(shortcut)\"\n        >\n          {{ shortcut.text }}\n        </button>\n      </div>\n      <div class=\"el-picker-panel__body\">\n        <div\n          class=\"el-picker-panel__content el-date-range-picker__content is-left\"\n        >\n          <div class=\"el-date-range-picker__header\">\n            <button\n              type=\"button\"\n              class=\"el-picker-panel__icon-btn d-arrow-left\"\n              @click=\"leftPrevYear\"\n            >\n              <el-icon><d-arrow-left /></el-icon>\n            </button>\n            <button\n              v-if=\"unlinkPanels\"\n              type=\"button\"\n              :disabled=\"!enableYearArrow\"\n              :class=\"{ 'is-disabled': !enableYearArrow }\"\n              class=\"el-picker-panel__icon-btn d-arrow-right\"\n              @click=\"leftNextYear\"\n            >\n              <el-icon><d-arrow-right /></el-icon>\n            </button>\n            <div>{{ leftLabel }}</div>\n          </div>\n          <month-table\n            selection-mode=\"range\"\n            :date=\"leftDate\"\n            :min-date=\"minDate\"\n            :max-date=\"maxDate\"\n            :range-state=\"rangeState\"\n            :disabled-date=\"disabledDate\"\n            @changerange=\"handleChangeRange\"\n            @pick=\"handleRangePick\"\n            @select=\"onSelect\"\n          />\n        </div>\n        <div\n          class=\"el-picker-panel__content el-date-range-picker__content is-right\"\n        >\n          <div class=\"el-date-range-picker__header\">\n            <button\n              v-if=\"unlinkPanels\"\n              type=\"button\"\n              :disabled=\"!enableYearArrow\"\n              :class=\"{ 'is-disabled': !enableYearArrow }\"\n              class=\"el-picker-panel__icon-btn d-arrow-left\"\n              @click=\"rightPrevYear\"\n            >\n              <el-icon><d-arrow-left /></el-icon>\n            </button>\n            <button\n              type=\"button\"\n              class=\"el-picker-panel__icon-btn d-arrow-right\"\n              @click=\"rightNextYear\"\n            >\n              <el-icon><d-arrow-right /></el-icon>\n            </button>\n            <div>{{ rightLabel }}</div>\n          </div>\n          <month-table\n            selection-mode=\"range\"\n            :date=\"rightDate\"\n            :min-date=\"minDate\"\n            :max-date=\"maxDate\"\n            :range-state=\"rangeState\"\n            :disabled-date=\"disabledDate\"\n            @changerange=\"handleChangeRange\"\n            @pick=\"handleRangePick\"\n            @select=\"onSelect\"\n          />\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, ref, watch, inject, toRef } from 'vue'\nimport dayjs from 'dayjs'\nimport ElIcon from '@element-plus/components/icon'\nimport { useLocale } from '@element-plus/hooks'\nimport { DArrowLeft, DArrowRight } from '@element-plus/icons-vue'\nimport MonthTable from './basic-month-table.vue'\n\nimport type { PropType } from 'vue'\nimport type { Dayjs } from 'dayjs'\n\nexport default defineComponent({\n  components: { MonthTable, ElIcon, DArrowLeft, DArrowRight },\n\n  props: {\n    unlinkPanels: Boolean,\n    parsedValue: {\n      type: Array as PropType<Dayjs[]>,\n    },\n  },\n\n  emits: ['pick', 'set-picker-option'],\n\n  setup(props, ctx) {\n    const { t, lang } = useLocale()\n    const leftDate = ref(dayjs().locale(lang.value))\n    const rightDate = ref(dayjs().locale(lang.value).add(1, 'year'))\n\n    const hasShortcuts = computed(() => !!shortcuts.length)\n\n    const handleShortcutClick = (shortcut) => {\n      const shortcutValues =\n        typeof shortcut.value === 'function' ? shortcut.value() : shortcut.value\n      if (shortcutValues) {\n        ctx.emit('pick', [\n          dayjs(shortcutValues[0]).locale(lang.value),\n          dayjs(shortcutValues[1]).locale(lang.value),\n        ])\n        return\n      }\n      if (shortcut.onClick) {\n        shortcut.onClick(ctx)\n      }\n    }\n\n    const leftPrevYear = () => {\n      leftDate.value = leftDate.value.subtract(1, 'year')\n      if (!props.unlinkPanels) {\n        rightDate.value = rightDate.value.subtract(1, 'year')\n      }\n    }\n\n    const rightNextYear = () => {\n      if (!props.unlinkPanels) {\n        leftDate.value = leftDate.value.add(1, 'year')\n      }\n      rightDate.value = rightDate.value.add(1, 'year')\n    }\n\n    const leftNextYear = () => {\n      leftDate.value = leftDate.value.add(1, 'year')\n    }\n\n    const rightPrevYear = () => {\n      rightDate.value = rightDate.value.subtract(1, 'year')\n    }\n    const leftLabel = computed(() => {\n      return `${leftDate.value.year()} ${t('el.datepicker.year')}`\n    })\n\n    const rightLabel = computed(() => {\n      return `${rightDate.value.year()} ${t('el.datepicker.year')}`\n    })\n\n    const leftYear = computed(() => {\n      return leftDate.value.year()\n    })\n\n    const rightYear = computed(() => {\n      return rightDate.value.year() === leftDate.value.year()\n        ? leftDate.value.year() + 1\n        : rightDate.value.year()\n    })\n\n    const enableYearArrow = computed(() => {\n      return props.unlinkPanels && rightYear.value > leftYear.value + 1\n    })\n\n    const minDate = ref(null)\n    const maxDate = ref(null)\n\n    const rangeState = ref({\n      endDate: null,\n      selecting: false,\n    })\n\n    const handleChangeRange = (val) => {\n      rangeState.value = val\n    }\n\n    const handleRangePick = (val, close = true) => {\n      // const defaultTime = props.defaultTime || []\n      // const minDate_ = modifyWithTimeString(val.minDate, defaultTime[0])\n      // const maxDate_ = modifyWithTimeString(val.maxDate, defaultTime[1])\n      // todo\n      const minDate_ = val.minDate\n      const maxDate_ = val.maxDate\n      if (maxDate.value === maxDate_ && minDate.value === minDate_) {\n        return\n      }\n      maxDate.value = maxDate_\n      minDate.value = minDate_\n\n      if (!close) return\n      handleConfirm()\n    }\n\n    const isValidValue = (value) => {\n      return (\n        Array.isArray(value) &&\n        value &&\n        value[0] &&\n        value[1] &&\n        value[0].valueOf() <= value[1].valueOf()\n      )\n    }\n\n    const handleConfirm = (visible = false) => {\n      if (isValidValue([minDate.value, maxDate.value])) {\n        ctx.emit('pick', [minDate.value, maxDate.value], visible)\n      }\n    }\n\n    const onSelect = (selecting) => {\n      rangeState.value.selecting = selecting\n      if (!selecting) {\n        rangeState.value.endDate = null\n      }\n    }\n\n    const formatToString = (value) => {\n      return value.map((_) => _.format(format))\n    }\n\n    const getDefaultValue = () => {\n      let start: Dayjs\n      if (Array.isArray(defaultValue.value)) {\n        const left = dayjs(defaultValue.value[0])\n        let right = dayjs(defaultValue.value[1])\n        if (!props.unlinkPanels) {\n          right = left.add(1, 'year')\n        }\n        return [left, right]\n      } else if (defaultValue.value) {\n        start = dayjs(defaultValue.value)\n      } else {\n        start = dayjs()\n      }\n      start = start.locale(lang.value)\n      return [start, start.add(1, 'year')]\n    }\n\n    // pickerBase.hub.emit('SetPickerOption', ['isValidValue', isValidValue])\n    ctx.emit('set-picker-option', ['formatToString', formatToString])\n    const pickerBase = inject('EP_PICKER_BASE') as any\n    const { shortcuts, disabledDate, format } = pickerBase.props\n    const defaultValue = toRef(pickerBase.props, 'defaultValue')\n\n    watch(\n      () => defaultValue.value,\n      (val) => {\n        if (val) {\n          const defaultArr = getDefaultValue()\n          leftDate.value = defaultArr[0]\n          rightDate.value = defaultArr[1]\n        }\n      },\n      { immediate: true }\n    )\n\n    watch(\n      () => props.parsedValue,\n      (newVal) => {\n        if (newVal && newVal.length === 2) {\n          minDate.value = newVal[0]\n          maxDate.value = newVal[1]\n          leftDate.value = minDate.value\n          if (props.unlinkPanels && maxDate.value) {\n            const minDateYear = minDate.value.year()\n            const maxDateYear = maxDate.value.year()\n            rightDate.value =\n              minDateYear === maxDateYear\n                ? maxDate.value.add(1, 'year')\n                : maxDate.value\n          } else {\n            rightDate.value = leftDate.value.add(1, 'year')\n          }\n        } else {\n          const defaultArr = getDefaultValue()\n          minDate.value = null\n          maxDate.value = null\n          leftDate.value = defaultArr[0]\n          rightDate.value = defaultArr[1]\n        }\n      },\n      { immediate: true }\n    )\n\n    return {\n      shortcuts,\n      disabledDate,\n      onSelect,\n      handleRangePick,\n      rangeState,\n      handleChangeRange,\n      minDate,\n      maxDate,\n      enableYearArrow,\n      leftLabel,\n      rightLabel,\n      leftNextYear,\n      leftPrevYear,\n      rightNextYear,\n      rightPrevYear,\n      t,\n      leftDate,\n      rightDate,\n      hasShortcuts,\n      handleShortcutClick,\n    }\n  },\n})\n</script>\n"],"names":["_openBlock","_Fragment","_createElementBlock","_createCommentVNode","_withCtx","_normalizeClass"],"mappings":"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"}