UNPKG

@arco-design/web-vue

Version:

Arco Design Vue 2.0: A Vue.js 3 UI Library

161 lines (160 loc) 5.55 kB
import { toRefs, computed, reactive, nextTick } from "vue"; import pick from "../../_utils/pick.js"; import { methods, getSortedDayjsArray } from "../../_utils/date.js"; import usePanelSpan from "./use-panel-span.js"; import useHeaderValue from "./use-header-value.js"; function useRangeHeaderValue(props) { const { startHeaderMode, endHeaderMode, mode, value, defaultValue, selectedValue, format, onChange } = toRefs(props); const isDateOrWeek = computed(() => ["date", "week"].includes(mode.value)); const unit = computed(() => isDateOrWeek.value ? "M" : "y"); const isSame = (current, target) => current.isSame(target, unit.value); const { span, superSpan } = usePanelSpan( reactive({ mode }) ); const startMode = computed(() => (startHeaderMode == null ? void 0 : startHeaderMode.value) || mode.value); const endMode = computed(() => (endHeaderMode == null ? void 0 : endHeaderMode.value) || mode.value); const startValue = computed(() => { var _a; return (_a = value.value) == null ? void 0 : _a[0]; }); const endValue = computed(() => { var _a; return (_a = value.value) == null ? void 0 : _a[1]; }); const startDefaultValue = computed(() => { var _a; return (_a = defaultValue.value) == null ? void 0 : _a[0]; }); const endDefaultValue = computed(() => { var _a; return (_a = defaultValue.value) == null ? void 0 : _a[1]; }); const emitChange = (newVal) => { (onChange == null ? void 0 : onChange.value) && onChange.value(newVal); }; const { headerValue: startHeaderValue, setHeaderValue: setStartHeaderValue, headerOperations: startHeaderOperations, getDefaultLocalValue: getDefaultStartHeaderValue } = useHeaderValue( reactive({ mode: startMode, value: startValue, defaultValue: startDefaultValue, selectedValue: void 0, format, onChange: (newVal) => { emitChange([newVal, endHeaderValue.value]); } }) ); const { headerValue: endHeaderValue, setHeaderValue: setEndHeaderValue, headerOperations: endHeaderOperations, getDefaultLocalValue: getDefaultEndHeaderValue } = useHeaderValue( reactive({ mode: endMode, value: endValue, defaultValue: endDefaultValue, selectedValue: void 0, format, onChange: (newVal) => { emitChange([startHeaderValue.value, newVal]); } }) ); const setHeaderValue = (newVal) => { const isSameStartValue = isSame(startHeaderValue.value, newVal[0]); const isSameEndValue = isSame(endHeaderValue.value, newVal[1]); setStartHeaderValue(newVal[0], false); setEndHeaderValue(newVal[1], false); if (!isSameStartValue || !isSameEndValue) { (onChange == null ? void 0 : onChange.value) && (onChange == null ? void 0 : onChange.value(newVal)); } }; function getFixedValue(values) { let [header02, header12] = getSortedDayjsArray(values); const nextHeader = methods.add(header02, span.value, "M"); if (header12.isBefore(nextHeader, unit.value)) { header12 = nextHeader; } return [header02, header12]; } function getFormSelectedValue() { var _a, _b; let selected02 = (_a = selectedValue.value) == null ? void 0 : _a[0]; let selected12 = (_b = selectedValue.value) == null ? void 0 : _b[1]; if (selected02 && selected12) { [selected02, selected12] = getSortedDayjsArray([selected02, selected12]); } return [selected02, selected12]; } const [selected0, selected1] = getFormSelectedValue(); const [header0, header1] = getFixedValue([ selected0 || startHeaderValue.value, selected1 || endHeaderValue.value ]); setStartHeaderValue(header0, false); setEndHeaderValue(header1, false); const resetHeaderValue = () => { const defaultStartHeaderValue = getDefaultStartHeaderValue(); const defaultEndHeaderValue = getDefaultEndHeaderValue(); nextTick(() => { const [selected02, selected12] = getFormSelectedValue(); const [header02, header12] = getFixedValue([ selected02 || defaultStartHeaderValue, selected12 || defaultEndHeaderValue ]); setHeaderValue([header02, header12]); }); }; const canShortenMonth = computed( () => methods.add(startHeaderValue.value, span.value, "M").isBefore(endHeaderValue.value, unit.value) ); const canShortenYear = computed( () => methods.add(startHeaderValue.value, superSpan.value, "M").isBefore(endHeaderValue.value, unit.value) ); const computedStartHeaderOperations = computed(() => { const operations = ["onSuperPrev"]; if (isDateOrWeek.value) operations.push("onPrev"); if (canShortenMonth.value && isDateOrWeek) operations.push("onNext"); if (canShortenYear.value) operations.push("onSuperNext"); return pick(startHeaderOperations.value, operations); }); const computedEndHeaderOperations = computed(() => { const operations = ["onSuperNext"]; if (isDateOrWeek.value) operations.push("onNext"); if (canShortenMonth.value && isDateOrWeek.value) operations.push("onPrev"); if (canShortenYear.value) operations.push("onSuperPrev"); return pick(endHeaderOperations.value, operations); }); return { startHeaderValue, endHeaderValue, startHeaderOperations: computedStartHeaderOperations, endHeaderOperations: computedEndHeaderOperations, setHeaderValue, resetHeaderValue }; } export { useRangeHeaderValue as default };