UNPKG

@opentiny/vue-renderless

Version:

An enterprise-class UI component library, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.

176 lines (175 loc) 5.7 kB
import "../chunk-G2ADBYYC.js"; import { DATEPICKER, formatDate, isDate1 as isDate, nextYear, nextMonth1 as nextMonth } from "@opentiny/utils"; const calcDefaultValue = (value) => { if (Array.isArray(value)) { return [new Date(value[0]), new Date(value[1])]; } else if (value) { return [new Date(value), nextMonth(new Date(value))]; } return [/* @__PURE__ */ new Date(), nextMonth(/* @__PURE__ */ new Date())]; }; const watchValue = ({ state }) => (data) => { if (!data) { state.minDate = null; state.maxDate = null; } else if (Array.isArray(data)) { if (isDate(data[1])) { state.maxDate = new Date(data[1]); } else { state.maxDate = null; } if (isDate(data[0])) { state.minDate = new Date(data[0]); } else { state.minDate = null; } if (!state.minDate) { state.leftDate = calcDefaultValue(state.defaultValue)[0]; state.rightDate = nextYear(state.leftDate); } else { state.leftDate = state.minDate; if (state.maxDate && state.unlinkPanels) { const minDateYear = state.minDate.getFullYear(); const maxDateYear = state.maxDate.getFullYear(); state.rightDate = maxDateYear === minDateYear ? nextYear(state.maxDate) : state.maxDate; } else { state.rightDate = nextYear(state.leftDate); } } } }; const handleClear = ({ emit, state }) => () => { state.maxDate = null; state.minDate = null; state.leftDate = calcDefaultValue(state.defaultValue)[0]; state.rightDate = nextYear(state.leftDate); emit("pick", null); }; const handleChangeRange = (state) => (val) => { state.rangeState = val.rangeState; state.minDate = val.minDate; state.maxDate = val.maxDate; }; const watchDefaultValue = ({ state }) => (data) => { if (!Array.isArray(state.value)) { const [left, right] = calcDefaultValue(data); state.leftDate = left; state.rightDate = data && data[1] && left.getFullYear() !== right.getFullYear() && state.unlinkPanels ? right : nextYear(state.leftDate); } }; const handleRangePick = ({ api, state, props }) => (val, close = true) => { if (props.readonly) { return; } const maxDate = val.maxDate; const minDate = val.minDate; if (state.minDate === minDate && state.maxDate === maxDate) { return; } if (state.onPick) { state.onPick(val); } state.minDate = minDate; state.maxDate = maxDate; setTimeout(() => { state.minDate = minDate; state.maxDate = maxDate; }, 10); if (!close) { return; } api.handleConfirm(); }; const handleShortcutClick = (state, api, props) => (shortcutEvent) => { if (shortcutEvent.onClick) { const choose = { $emit: (type, [start, end]) => { var _a; if ((_a = props.shortcuts) == null ? void 0 : _a.length) { state.value = [start, end]; state.leftStartYear = Math.floor(start.getFullYear() / 10) * 10; state.rightStartYear = state.leftStartYear + DATEPICKER.PanelYearNum; state.leftDate = start; state.rightDate = end; api.handleRangePick({ minDate: isDate(start) ? start.getFullYear() : start, maxDate: isDate(end) ? end.getFullYear() : end }); } else { api.doPick(start, end); } } }; shortcutEvent.onClick(choose); } }; const doPick = (emit) => (begin, end) => { emit("pick", [begin, end], false); }; const leftPrevYear = (state, api) => () => { state.leftStartYear = state.leftStartYear - DATEPICKER.PanelYearNum; if (!state.unlinkPanels) { api.rightPrevYear(); } }; const leftNextYear = (state) => () => { state.leftStartYear = state.leftStartYear + DATEPICKER.PanelYearNum; }; const rightPrevYear = (state) => () => { state.rightStartYear = state.rightStartYear - DATEPICKER.PanelYearNum; }; const rightNextYear = (state, api) => () => { state.rightStartYear = state.rightStartYear + DATEPICKER.PanelYearNum; if (!state.unlinkPanels) { api.leftNextYear(); } }; const handleConfirm = ({ api, emit, state, t }) => (show = false) => { const { minDate, maxDate } = state; const newMin = minDate ? new Date(minDate, 0, 2) : null; const newMax = maxDate ? new Date(maxDate, 0, 2) : null; if (api.isValidValue([newMin, newMax])) { emit("pick", [newMin, newMax], show); const defaultFormat = DATEPICKER.DateFormats.year; const start = formatDate(newMin, defaultFormat, t); const end = formatDate(newMax, defaultFormat, t); emit("update:modelValue", [start, end]); emit("select-change", [start, end]); } }; const isValidValue = (state) => (data) => { return data && Array.isArray(data) && data[1] && data[0] && isDate(data[1]) && isDate(data[0]) && data[0] <= data[1] && (typeof state.disabledDate === "function" ? !state.disabledDate(data[1]) && !state.disabledDate(data[0]) : true); }; const resetView = (state) => () => { state.maxDate = state.value && isDate(state.value[0]) ? new Date(state.value[1]) : null; state.minDate = state.value && isDate(state.value[0]) ? new Date(state.value[0]) : null; }; const watchModelValue = ({ state }) => (val) => { if ((val == null ? void 0 : val.length) === 2) { const start = new Date(val[0], 0, 2); const end = new Date(val[1], 0, 2); state.value = [start, end]; state.minDate = start; state.maxDate = end; state.leftDate = start; state.rightDate = end; } }; export { calcDefaultValue, doPick, handleChangeRange, handleClear, handleConfirm, handleRangePick, handleShortcutClick, isValidValue, leftNextYear, leftPrevYear, resetView, rightNextYear, rightPrevYear, watchDefaultValue, watchModelValue, watchValue };