- Replace ESLint with Biome for linting and formatting - Configure Biome with tabs, double quotes, and organized imports - Move all SQL/Drizzle queries from page.tsx files to data.ts files - Create new data.ts files for: ajustes, dashboard, relatorios/categorias - Update existing data.ts files: extrato, fatura (add lancamentos queries) - Remove all drizzle-orm imports from page.tsx files - Update README.md with new tooling info Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import type { CalendarDay, CalendarEvent } from "@/components/calendario/types";
|
|
|
|
export const formatDateKey = (date: Date) => date.toISOString().slice(0, 10);
|
|
|
|
export const parseDateKey = (value: string) => {
|
|
const [yearStr, monthStr, dayStr] = value.split("-");
|
|
const year = Number.parseInt(yearStr ?? "", 10);
|
|
const month = Number.parseInt(monthStr ?? "", 10);
|
|
const day = Number.parseInt(dayStr ?? "", 10);
|
|
|
|
return new Date(Date.UTC(year, (month ?? 1) - 1, day ?? 1));
|
|
};
|
|
|
|
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",
|
|
];
|