Rocky_Mountain_Vending/.pnpm-store/v10/files/9b/de836a9a26f822357621462b851e762611afea61a6b9cbac41ac169691bacbaa15bfe95167b901ff4ecbe584929f5be7f7bf0a42e35af485c1e4e80cd07974
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

132 lines
3.8 KiB
Text

import { DayFlag } from "../UI.js";
import type { CalendarDay, DateLib } from "../classes/index.js";
import type { DayPickerProps, Modifiers } from "../types/index.js";
import { dateMatchModifiers } from "../utils/dateMatchModifiers.js";
/**
* Creates a function to retrieve the modifiers for a given day.
*
* This function calculates both internal and custom modifiers for each day
* based on the provided calendar days and DayPicker props.
*
* @private
* @param days The array of `CalendarDay` objects to process.
* @param props The DayPicker props, including modifiers and configuration
* options.
* @param dateLib The date library to use for date manipulation.
* @returns A function that retrieves the modifiers for a given `CalendarDay`.
*/
export function createGetModifiers(
days: CalendarDay[],
props: DayPickerProps,
navStart: Date | undefined,
navEnd: Date | undefined,
dateLib: DateLib
) {
const {
disabled,
hidden,
modifiers,
showOutsideDays,
broadcastCalendar,
today
} = props;
const {
isSameDay,
isSameMonth,
startOfMonth,
isBefore,
endOfMonth,
isAfter
} = dateLib;
const computedNavStart = navStart && startOfMonth(navStart);
const computedNavEnd = navEnd && endOfMonth(navEnd);
const internalModifiersMap: Record<DayFlag, CalendarDay[]> = {
[DayFlag.focused]: [],
[DayFlag.outside]: [],
[DayFlag.disabled]: [],
[DayFlag.hidden]: [],
[DayFlag.today]: []
};
const customModifiersMap: Record<string, CalendarDay[]> = {};
for (const day of days) {
const { date, displayMonth } = day;
const isOutside = Boolean(displayMonth && !isSameMonth(date, displayMonth));
const isBeforeNavStart = Boolean(
computedNavStart && isBefore(date, computedNavStart)
);
const isAfterNavEnd = Boolean(
computedNavEnd && isAfter(date, computedNavEnd)
);
const isDisabled = Boolean(
disabled && dateMatchModifiers(date, disabled, dateLib)
);
const isHidden =
Boolean(hidden && dateMatchModifiers(date, hidden, dateLib)) ||
isBeforeNavStart ||
isAfterNavEnd ||
// Broadcast calendar will show outside days as default
(!broadcastCalendar && !showOutsideDays && isOutside) ||
(broadcastCalendar && showOutsideDays === false && isOutside);
const isToday = isSameDay(date, today ?? dateLib.today());
if (isOutside) internalModifiersMap.outside.push(day);
if (isDisabled) internalModifiersMap.disabled.push(day);
if (isHidden) internalModifiersMap.hidden.push(day);
if (isToday) internalModifiersMap.today.push(day);
// Add custom modifiers
if (modifiers) {
Object.keys(modifiers).forEach((name) => {
const modifierValue = modifiers?.[name];
const isMatch = modifierValue
? dateMatchModifiers(date, modifierValue, dateLib)
: false;
if (!isMatch) return;
if (customModifiersMap[name]) {
customModifiersMap[name].push(day);
} else {
customModifiersMap[name] = [day];
}
});
}
}
return (day: CalendarDay): Modifiers => {
// Initialize all the modifiers to false
const dayFlags: Record<DayFlag, boolean> = {
[DayFlag.focused]: false,
[DayFlag.disabled]: false,
[DayFlag.hidden]: false,
[DayFlag.outside]: false,
[DayFlag.today]: false
};
const customModifiers: Modifiers = {};
// Find the modifiers for the given day
for (const name in internalModifiersMap) {
const days = internalModifiersMap[name as DayFlag];
dayFlags[name as DayFlag] = days.some((d) => d === day);
}
for (const name in customModifiersMap) {
customModifiers[name] = customModifiersMap[name].some((d) => d === day);
}
return {
...dayFlags,
// custom modifiers should override all the previous ones
...customModifiers
};
};
}