forked from git.gladyson/openmonetis
Remove createActionHandler, validateHashToken, decimalSchema, optionalPeriodSchema, dateStringSchema, amountSchema, FeedbackDialog standalone, CalendarEventType, parseDateKey, entre outros. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import type { CalendarDay, CalendarEvent } from "@/components/calendario/types";
|
|
|
|
export const formatDateKey = (date: Date) => date.toISOString().slice(0, 10);
|
|
|
|
const getWeekdayIndex = (date: Date) => {
|
|
const day = date.getUTCDay(); // 0 (domingo) - 6 (sábado)
|
|
// Ajusta para segunda-feira como primeiro dia
|
|
return day === 0 ? 6 : day - 1;
|
|
};
|
|
|
|
export const buildCalendarDays = ({
|
|
year,
|
|
monthIndex,
|
|
events,
|
|
}: {
|
|
year: number;
|
|
monthIndex: number;
|
|
events: Map<string, CalendarEvent[]>;
|
|
}): CalendarDay[] => {
|
|
const startOfMonth = new Date(Date.UTC(year, monthIndex, 1));
|
|
const offset = getWeekdayIndex(startOfMonth);
|
|
const startDate = new Date(Date.UTC(year, monthIndex, 1 - offset));
|
|
const totalCells = 42; // 6 semanas
|
|
const now = new Date();
|
|
const todayKey = formatDateKey(
|
|
new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate())),
|
|
);
|
|
|
|
const days: CalendarDay[] = [];
|
|
|
|
for (let index = 0; index < totalCells; index += 1) {
|
|
const currentDate = new Date(startDate);
|
|
currentDate.setUTCDate(startDate.getUTCDate() + index);
|
|
|
|
const dateKey = formatDateKey(currentDate);
|
|
const isCurrentMonth = currentDate.getUTCMonth() === monthIndex;
|
|
const dateLabel = currentDate.getUTCDate().toString();
|
|
const eventsForDay = events.get(dateKey) ?? [];
|
|
|
|
days.push({
|
|
date: dateKey,
|
|
label: dateLabel,
|
|
isCurrentMonth,
|
|
isToday: dateKey === todayKey,
|
|
events: eventsForDay,
|
|
});
|
|
}
|
|
|
|
return days;
|
|
};
|
|
|
|
export const WEEK_DAYS_SHORT = [
|
|
"Seg",
|
|
"Ter",
|
|
"Qua",
|
|
"Qui",
|
|
"Sex",
|
|
"Sáb",
|
|
"Dom",
|
|
];
|