import { useEffect, useState } from "react"; import axiosInstance from "../../../src/axiosSecure"; import { useSession } from "next-auth/react"; import Layout from "../../../components/layout"; import ProtectedRoute from "../../../components/protectedRoute"; import { UserRole, EventLogType } from "@prisma/client"; const timeFilters = [ { label: "1 седмица", value: 7 }, { label: "1 месец", value: 30 }, { label: "3 месеца", value: 90 }, { label: "Всички", value: null }, ]; const eventTypes = [ { label: "Заявки", value: EventLogType.AssignmentReplacementRequested }, { label: "Приети замествания", value: EventLogType.AssignmentReplacementAccepted }, { label: "Ръчно въведени замествания", value: EventLogType.AssignmentReplacementManual }, ]; export default function EventLogList() { const [eventLogs, setEventLog] = useState([]); const [requestedAssignments, setRequestedAssignments] = useState([]); const [showOpenRequests, setShowOpenRequests] = useState(false); const [selectedTimeFilter, setSelectedTimeFilter] = useState(null); // Time filter state const [selectedEventTypes, setSelectedEventTypes] = useState(eventTypes.map((et) => et.value)); // Default: all types const { data: session } = useSession(); useEffect(() => { const fetchEventLogs = async () => { try { const where = encodeURIComponent( JSON.stringify({ OR: selectedEventTypes.map((type) => ({ type })), }) ); const { data: eventLogsData } = await axiosInstance.get( `/api/data/prisma/eventLog?where=${where}&include={"publisher":{"select":{"firstName":true,"lastName":true}},"shift":{"include":{"assignments":{"include":{"publisher":{"select":{"firstName":true,"lastName":true}}}}}}}` ); setEventLog(eventLogsData); const { data: shiftsData } = await axiosInstance.get( `/api/data/prisma/assignment?where={"publicGuid":{"not":"null"}}&include={"shift":{"include":{"assignments":{"include":{"publisher":{"select":{"firstName":true,"lastName":true}}}}}},"publisher":{"select":{"firstName":true,"lastName":true}}}` ); setRequestedAssignments(shiftsData); } catch (error) { console.error(error); } }; fetchEventLogs(); }, [selectedEventTypes]); // Filter events based on the selected time range const filteredEventLogs = eventLogs.filter((event) => { if (!selectedTimeFilter) return true; const eventDate = new Date(event.date); const cutoffDate = new Date(); cutoffDate.setDate(cutoffDate.getDate() - selectedTimeFilter); return eventDate >= cutoffDate; }); // Toggle event type selection const toggleEventType = (eventType) => { setSelectedEventTypes((prev) => prev.includes(eventType) ? prev.filter((type) => type !== eventType) : [...prev, eventType] ); }; return (

Заявки за заместване

{/* Event Type Filter Pills */}
{eventTypes.map((type) => ( ))}
{/* Time Filter Pills */}
{timeFilters.map((filter) => ( ))}
{!showOpenRequests && filteredEventLogs.map((event) => ( ))} {showOpenRequests && requestedAssignments.map((assignment) => ( ))}
На От Дата Смяна Събитие
{new Date(event.date).toLocaleString("bg")} {event.publisher?.firstName && event.publisher?.lastName ? `${event.publisher.firstName} ${event.publisher.lastName}` : "???"} {new Date(event.shift?.startTime).toLocaleString("bg")} {event.shift?.assignments.map((ass) => (
{ass.publisher.firstName + " " + ass.publisher.lastName}
))}
{event.content}
{new Date(assignment.date).toLocaleString("bg")} {assignment.publisher.firstName + " " + assignment.publisher.lastName} {new Date(assignment.shift.startTime).toLocaleString("bg")} {assignment.shift.assignments.map((ass) => (
{ass.publisher.firstName + " " + ass.publisher.lastName}
))}
); }