/** * @ai-summary Mobile maintenance screen with tabs for records and schedules */ import React, { useState } from 'react'; import { useQueryClient } from '@tanstack/react-query'; import { Box, Tabs, Tab } from '@mui/material'; import { GlassCard } from '../../../shared-minimal/components/mobile/GlassCard'; import { Button } from '../../../shared-minimal/components/Button'; import { useMaintenanceRecords } from '../hooks/useMaintenanceRecords'; import { MaintenanceRecordForm } from '../components/MaintenanceRecordForm'; import { MaintenanceRecordsList } from '../components/MaintenanceRecordsList'; import { MaintenanceRecordEditDialog } from '../components/MaintenanceRecordEditDialog'; import { MaintenanceScheduleForm } from '../components/MaintenanceScheduleForm'; import { MaintenanceSchedulesList } from '../components/MaintenanceSchedulesList'; import { MaintenanceScheduleEditDialog } from '../components/MaintenanceScheduleEditDialog'; import type { MaintenanceRecordResponse, UpdateMaintenanceRecordRequest, MaintenanceScheduleResponse, UpdateScheduleRequest } from '../types/maintenance.types'; export const MaintenanceMobileScreen: React.FC = () => { const queryClient = useQueryClient(); const { records, schedules, isRecordsLoading, isSchedulesLoading, recordsError, schedulesError, updateRecord, deleteRecord, updateSchedule, deleteSchedule } = useMaintenanceRecords(); const [activeTab, setActiveTab] = useState<'records' | 'schedules'>('records'); const [showForm, setShowForm] = useState(false); const [editingRecord, setEditingRecord] = useState(null); const [editDialogOpen, setEditDialogOpen] = useState(false); const [editingSchedule, setEditingSchedule] = useState(null); const [scheduleEditDialogOpen, setScheduleEditDialogOpen] = useState(false); const handleEdit = (record: MaintenanceRecordResponse) => { setEditingRecord(record); setEditDialogOpen(true); }; const handleEditSave = async (id: string, data: UpdateMaintenanceRecordRequest) => { try { await updateRecord({ id, data }); queryClient.refetchQueries({ queryKey: ['maintenanceRecords'] }); setEditDialogOpen(false); setEditingRecord(null); } catch (error) { console.error('Failed to update maintenance record:', error); throw error; } }; const handleEditClose = () => { setEditDialogOpen(false); setEditingRecord(null); }; const handleDelete = async (recordId: string) => { try { await deleteRecord(recordId); queryClient.refetchQueries({ queryKey: ['maintenanceRecords', 'all'] }); } catch (error) { console.error('Failed to delete maintenance record:', error); } }; const handleScheduleEdit = (schedule: MaintenanceScheduleResponse) => { setEditingSchedule(schedule); setScheduleEditDialogOpen(true); }; const handleScheduleEditSave = async (id: string, data: UpdateScheduleRequest) => { try { await updateSchedule({ id, data }); queryClient.refetchQueries({ queryKey: ['maintenanceSchedules'] }); setScheduleEditDialogOpen(false); setEditingSchedule(null); } catch (error) { console.error('Failed to update maintenance schedule:', error); throw error; } }; const handleScheduleEditClose = () => { setScheduleEditDialogOpen(false); setEditingSchedule(null); }; const handleScheduleDelete = async (scheduleId: string) => { try { await deleteSchedule(scheduleId); queryClient.refetchQueries({ queryKey: ['maintenanceSchedules'] }); } catch (error) { console.error('Failed to delete maintenance schedule:', error); } }; const isLoading = activeTab === 'records' ? isRecordsLoading : isSchedulesLoading; const hasError = activeTab === 'records' ? recordsError : schedulesError; return (
{/* Header */}

Maintenance

{/* Tabs */} { setActiveTab(v as 'records' | 'schedules'); setShowForm(false); }} aria-label="Maintenance tabs" sx={{ minHeight: 40, '& .MuiTab-root': { minHeight: 40, fontSize: '0.875rem', textTransform: 'none', }, }} > {/* Add Button */}
{/* Loading State */} {isLoading && (
Loading maintenance {activeTab}...
)} {/* Error State */} {hasError && (

Failed to load maintenance {activeTab}

)}
{/* Form */} {showForm && !isLoading && !hasError && (

{activeTab === 'records' ? 'New Maintenance Record' : 'New Maintenance Schedule'}

{activeTab === 'records' ? ( ) : ( )}
)} {/* Records List */} {activeTab === 'records' && !isLoading && !hasError && (

Recent Records

{records && records.length === 0 ? (

No maintenance records yet

Add a record to track your vehicle maintenance

) : ( )}
)} {/* Schedules List */} {activeTab === 'schedules' && !isLoading && !hasError && (

Maintenance Schedules

{schedules && schedules.length === 0 ? (

No schedules yet

Create a schedule to get maintenance reminders

) : ( )}
)} {/* Edit Dialogs */}
); }; export default MaintenanceMobileScreen;