@opensig/opendesign
Version:
54 lines (53 loc) • 1.57 kB
JavaScript
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
};