vuestic-ui
Version:
Vue 3 UI Framework
73 lines (72 loc) • 2.01 kB
JavaScript
import { ref, computed } from "vue";
import { i as isDate } from "../../../utils/is-date.js";
const JANUARY_MONTH_INDEX = 0;
const DECEMBER_MONTH_INDEX = 11;
const addMonth = (view) => {
if (view.month === DECEMBER_MONTH_INDEX) {
return { ...view, year: view.year + 1, month: JANUARY_MONTH_INDEX };
} else {
return { ...view, month: view.month + 1 };
}
};
const subMonth = (view) => {
if (view.month === JANUARY_MONTH_INDEX) {
return { ...view, year: view.year - 1, month: DECEMBER_MONTH_INDEX };
} else {
return { ...view, month: view.month - 1 };
}
};
const getDefaultDate = (modelValue) => {
if (isDate(modelValue)) {
return modelValue;
}
if (isDate(modelValue == null ? void 0 : modelValue.start)) {
return modelValue.start;
}
if (Array.isArray(modelValue) && isDate(modelValue[0])) {
return modelValue[0];
}
return /* @__PURE__ */ new Date();
};
const useView = (props, emit, defaultOverride) => {
const defaultDate = getDefaultDate(props.modelValue);
const defaultView = {
type: "day",
year: defaultDate.getFullYear(),
month: defaultDate.getMonth(),
...defaultOverride
};
const statefulView = ref(defaultView);
const syncView = computed({
get() {
return { ...statefulView.value, ...props.view };
},
set(view) {
statefulView.value = view;
emit("update:view", view);
}
});
const next = () => {
if (syncView.value.type === "day") {
syncView.value = addMonth(syncView.value);
} else if (syncView.value.type === "month") {
syncView.value = { ...syncView.value, year: syncView.value.year + 1 };
}
};
const prev = () => {
if (syncView.value.type === "day") {
syncView.value = subMonth(syncView.value);
} else if (syncView.value.type === "month") {
syncView.value = { ...syncView.value, year: syncView.value.year - 1 };
}
};
return {
syncView,
next,
prev
};
};
export {
useView as u
};
//# sourceMappingURL=view.js.map