UNPKG

@opensig/opendesign

Version:

54 lines (53 loc) 1.57 kB
import { toRefs, computed, provide } from "vue"; import dayjs from "dayjs"; import { useFormField } from "../../_composables/use-form-field.mjs"; import { datePickerInjectKey } from "../provide.mjs"; import { parseValue } from "../utils.mjs"; import { isNil } from "../../_utils/is.mjs"; const END_UNIT_MAP = { year: "year", month: "month", date: "day", datetime: null }; function toTimestamp(value) { var _a; if (isNil(value)) return void 0; return (_a = parseValue(value)) == null ? void 0 : _a.valueOf(); } function formatOut(ts, valueFormat) { return valueFormat === "x" ? ts : dayjs(ts).format(valueFormat); } function useRangePickerBase(opts) { const { props, mode, start, end, emit } = opts; const propsRefs = toRefs(props); const formField = useFormField(props, emit); const modeRef = computed(() => mode); const startTimestamp = computed({ get: () => toTimestamp(start.value), set: (ts) => { start.value = isNil(ts) ? void 0 : formatOut(ts, props.valueFormat); } }); const endTimestamp = computed({ get: () => toTimestamp(end.value), set: (ts) => { if (isNil(ts)) { end.value = void 0; return; } const unit = END_UNIT_MAP[mode]; const finalTs = unit ? dayjs(ts).endOf(unit).valueOf() : ts; end.value = formatOut(finalTs, props.valueFormat); } }); provide(datePickerInjectKey, { ...propsRefs, mode: modeRef, color: formField.effectiveColor }); return { startTimestamp, endTimestamp, ...formField }; } export { useRangePickerBase };