import React, { useState, useEffect, useMemo } from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; import { FaFilter, FaChevronDown, FaChevronUp, FaTimes, FaCalendarAlt, FaMap } from 'react-icons/fa'; import MaintenanceCalendar from '../components/MaintenanceCalendar'; import LinkField from '../components/LinkField'; import useUserHospitalFilter from '../hooks/useUserHospitalFilter'; const MaintenanceCalendarPage: React.FC = () => { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const { filterHospital, filtersLocked, handleHospitalChange } = useUserHospitalFilter(); // Filter states const [filterDepartment, setFilterDepartment] = useState(''); const [filterStatus, setFilterStatus] = useState(''); const [filterAssignTo, setFilterAssignTo] = useState(''); // Load filters from URL on mount (only when hospital is not locked to user profile) useEffect(() => { if (filtersLocked) return; const hospital = searchParams.get('hospital'); const status = searchParams.get('status'); if (hospital) handleHospitalChange(hospital); if (status) setFilterStatus(status); }, [searchParams, filtersLocked, handleHospitalChange]); // View type states const [viewType, setViewType] = useState<'maintenance-log' | 'ppm-planner'>('maintenance-log'); // UI states const [isFilterExpanded, setIsFilterExpanded] = useState(false); const [activeFilterCount, setActiveFilterCount] = useState(0); // Update active filter count useEffect(() => { const count = [filterHospital, filterDepartment, filterStatus, filterAssignTo].filter(Boolean).length; setActiveFilterCount(count); }, [filterHospital, filterDepartment, filterStatus, filterAssignTo]); const handleClearFilters = () => { if (!filtersLocked) { handleHospitalChange(''); } setFilterDepartment(''); setFilterStatus(''); setFilterAssignTo(''); }; const hasActiveFilters = filterHospital || filterDepartment || filterStatus || filterAssignTo; // Build filters for calendar - memoized to prevent object reference changes const calendarFilters: Record = useMemo(() => { const filters: Record = {}; if (filterHospital) filters['company'] = filterHospital; if (filterDepartment) filters['department'] = filterDepartment; if (filterStatus) filters['maintenance_status'] = filterStatus; if (filterAssignTo) filters['assign_to_name'] = filterAssignTo; return filters; }, [filterHospital, filterDepartment, filterStatus, filterAssignTo]); return (
{/* Header - Single Row on Desktop/Laptop */}
{/* Left Side - Title */}

Maintenance Calendar

{/* Right Side - All Controls in Single Row */}
{/* View Type Dropdown */}
{/* Filters Button */}
{/* Yearly PPM Planner Button */} {viewType === 'ppm-planner' && (
)}
{/* Filter Panel */} {isFilterExpanded && (
{/* Hospital */}
{filterHospital && !filtersLocked && ( )}
{/* Department */}
setFilterDepartment(val)} placeholder="All Departments" compact={true} /> {filterDepartment && ( )}
{/* Status */}
{filterStatus && ( )}
{/* Assigned To */}
setFilterAssignTo(val)} placeholder="All Technicians" compact={true} /> {filterAssignTo && ( )}
{hasActiveFilters && (
)}
)}
{/* Calendar */}
); }; export default MaintenanceCalendarPage;