- Split frontend/src/lib/api.ts (2042 lines) into 12 focused domain modules: client.ts (base HTTP/auth), calendar.ts, documents.ts, employees.ts, equipment.ts, feed.ts, messages.ts, notifications.ts, procurement.ts, requests.ts, utils.ts, and index.ts barrel that preserves all existing imports - Extract calendar modal state from AppShell into useCalendarModals hook - Extract CalendarModals and MobileDrawers into components/layout/ - AppShell: 745 → 460 lines, focused on layout concerns only - Fix setState-in-effect lint error with startTransition pattern - Stabilize notifications memo to prevent unnecessary re-renders - Fix flaky WS test: handle CancelledError in channels-testing cleanup - All 609 backend tests pass, TypeScript typecheck clean, ESLint clean
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
"use client";
|
|
|
|
import { CalendarModal } from "@/components/CalendarModal";
|
|
import CalendarParticipantsModal from "@/components/CalendarParticipantsModal";
|
|
import { EventModal } from "@/components/EventModal";
|
|
import { ViewDayEventsModal } from "@/components/ViewDayEventsModal";
|
|
import { ViewEventDetailsModal } from "@/components/ViewEventDetailsModal";
|
|
import type { useCalendarModals } from "@/hooks/useCalendarModals";
|
|
|
|
type CalendarModalsProps = ReturnType<typeof useCalendarModals>;
|
|
|
|
export function CalendarModals(props: CalendarModalsProps) {
|
|
return (
|
|
<>
|
|
<CalendarModal
|
|
isOpen={props.showCalendarModal}
|
|
onClose={props.closeCalendarModal}
|
|
calendar={props.editingCalendar}
|
|
/>
|
|
|
|
{props.participantsCalendar && (
|
|
<CalendarParticipantsModal
|
|
isOpen={props.showParticipantsModal}
|
|
onClose={props.closeParticipantsModal}
|
|
calendarId={props.participantsCalendar.id}
|
|
calendarName={props.participantsCalendar.name}
|
|
userRole={props.participantsCalendar.user_role}
|
|
/>
|
|
)}
|
|
|
|
<EventModal
|
|
isOpen={props.showEventModal}
|
|
onClose={props.closeEventModal}
|
|
event={props.editingEvent}
|
|
onSave={props.handleEventSaved}
|
|
showParticipants={true}
|
|
/>
|
|
|
|
<ViewDayEventsModal
|
|
isOpen={props.showDayEventsModal}
|
|
onClose={props.closeDayEventsModal}
|
|
date={props.selectedDateForModal}
|
|
events={props.sidebarEvents}
|
|
onEventClick={props.handleEventClickFromDay}
|
|
onCreateEvent={props.handleCreateEventFromDay}
|
|
/>
|
|
|
|
<ViewEventDetailsModal
|
|
isOpen={props.showEventDetailsModal}
|
|
onClose={props.closeEventDetailsModal}
|
|
event={props.viewingEvent}
|
|
onEdit={props.handleEditFromDetails}
|
|
onDelete={props.handleDeleteEvent}
|
|
showParticipants={true}
|
|
/>
|
|
</>
|
|
);
|
|
}
|