UNPKG

@wordpress/components

Version:
154 lines (152 loc) 6.43 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // packages/components/src/date-time/date/use-lilius/index.ts var use_lilius_exports = {}; __export(use_lilius_exports, { Day: () => Day, Month: () => Month, useLilius: () => useLilius }); module.exports = __toCommonJS(use_lilius_exports); var import_date_fns = require("date-fns"); var import_element = require("@wordpress/element"); var Month = /* @__PURE__ */ (function(Month2) { Month2[Month2["JANUARY"] = 0] = "JANUARY"; Month2[Month2["FEBRUARY"] = 1] = "FEBRUARY"; Month2[Month2["MARCH"] = 2] = "MARCH"; Month2[Month2["APRIL"] = 3] = "APRIL"; Month2[Month2["MAY"] = 4] = "MAY"; Month2[Month2["JUNE"] = 5] = "JUNE"; Month2[Month2["JULY"] = 6] = "JULY"; Month2[Month2["AUGUST"] = 7] = "AUGUST"; Month2[Month2["SEPTEMBER"] = 8] = "SEPTEMBER"; Month2[Month2["OCTOBER"] = 9] = "OCTOBER"; Month2[Month2["NOVEMBER"] = 10] = "NOVEMBER"; Month2[Month2["DECEMBER"] = 11] = "DECEMBER"; return Month2; })({}); var Day = /* @__PURE__ */ (function(Day2) { Day2[Day2["SUNDAY"] = 0] = "SUNDAY"; Day2[Day2["MONDAY"] = 1] = "MONDAY"; Day2[Day2["TUESDAY"] = 2] = "TUESDAY"; Day2[Day2["WEDNESDAY"] = 3] = "WEDNESDAY"; Day2[Day2["THURSDAY"] = 4] = "THURSDAY"; Day2[Day2["FRIDAY"] = 5] = "FRIDAY"; Day2[Day2["SATURDAY"] = 6] = "SATURDAY"; return Day2; })({}); var inRange = (date, min, max) => ((0, import_date_fns.isEqual)(date, min) || (0, import_date_fns.isAfter)(date, min)) && ((0, import_date_fns.isEqual)(date, max) || (0, import_date_fns.isBefore)(date, max)); var clearTime = (date) => (0, import_date_fns.set)(date, { hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }); var useLilius = ({ weekStartsOn = Day.SUNDAY, viewing: initialViewing = /* @__PURE__ */ new Date(), selected: initialSelected = [], numberOfMonths = 1 } = {}) => { const [viewing, setViewing] = (0, import_element.useState)(initialViewing); const viewToday = (0, import_element.useCallback)(() => setViewing((0, import_date_fns.startOfToday)()), [setViewing]); const viewMonth = (0, import_element.useCallback)((month) => setViewing((v) => (0, import_date_fns.setMonth)(v, month)), []); const viewPreviousMonth = (0, import_element.useCallback)(() => setViewing((v) => (0, import_date_fns.subMonths)(v, 1)), []); const viewNextMonth = (0, import_element.useCallback)(() => setViewing((v) => (0, import_date_fns.addMonths)(v, 1)), []); const viewYear = (0, import_element.useCallback)((year) => setViewing((v) => (0, import_date_fns.setYear)(v, year)), []); const viewPreviousYear = (0, import_element.useCallback)(() => setViewing((v) => (0, import_date_fns.subYears)(v, 1)), []); const viewNextYear = (0, import_element.useCallback)(() => setViewing((v) => (0, import_date_fns.addYears)(v, 1)), []); const [selected, setSelected] = (0, import_element.useState)(initialSelected.map(clearTime)); const clearSelected = () => setSelected([]); const isSelected = (0, import_element.useCallback)((date) => selected.findIndex((s) => (0, import_date_fns.isEqual)(s, date)) > -1, [selected]); const select = (0, import_element.useCallback)((date, replaceExisting) => { if (replaceExisting) { setSelected(Array.isArray(date) ? date : [date]); } else { setSelected((selectedItems) => selectedItems.concat(Array.isArray(date) ? date : [date])); } }, []); const deselect = (0, import_element.useCallback)((date) => setSelected((selectedItems) => Array.isArray(date) ? selectedItems.filter((s) => !date.map((d) => d.getTime()).includes(s.getTime())) : selectedItems.filter((s) => !(0, import_date_fns.isEqual)(s, date))), []); const toggle = (0, import_element.useCallback)((date, replaceExisting) => isSelected(date) ? deselect(date) : select(date, replaceExisting), [deselect, isSelected, select]); const selectRange = (0, import_element.useCallback)((start, end, replaceExisting) => { if (replaceExisting) { setSelected((0, import_date_fns.eachDayOfInterval)({ start, end })); } else { setSelected((selectedItems) => selectedItems.concat((0, import_date_fns.eachDayOfInterval)({ start, end }))); } }, []); const deselectRange = (0, import_element.useCallback)((start, end) => { setSelected((selectedItems) => selectedItems.filter((s) => !(0, import_date_fns.eachDayOfInterval)({ start, end }).map((d) => d.getTime()).includes(s.getTime()))); }, []); const calendar = (0, import_element.useMemo)(() => (0, import_date_fns.eachMonthOfInterval)({ start: (0, import_date_fns.startOfMonth)(viewing), end: (0, import_date_fns.endOfMonth)((0, import_date_fns.addMonths)(viewing, numberOfMonths - 1)) }).map((month) => (0, import_date_fns.eachWeekOfInterval)({ start: (0, import_date_fns.startOfMonth)(month), end: (0, import_date_fns.endOfMonth)(month) }, { weekStartsOn }).map((week) => (0, import_date_fns.eachDayOfInterval)({ start: (0, import_date_fns.startOfWeek)(week, { weekStartsOn }), end: (0, import_date_fns.endOfWeek)(week, { weekStartsOn }) }))), [viewing, weekStartsOn, numberOfMonths]); return { clearTime, inRange, viewing, setViewing, viewToday, viewMonth, viewPreviousMonth, viewNextMonth, viewYear, viewPreviousYear, viewNextYear, selected, setSelected, clearSelected, isSelected, select, deselect, toggle, selectRange, deselectRange, calendar }; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Day, Month, useLilius }); //# sourceMappingURL=index.js.map