import { useEffect } from "react"; import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate, useParams } from "react-router"; import { Alert, Box, Button, CircularProgress, FormControl, FormControlLabel, InputLabel, MenuItem, Paper, Select, Stack, Switch, TextField, Typography, } from "@mui/material"; import { pmScheduleDefaultValues, pmScheduleSchema, type PmScheduleFormValues, } from "@/domain/pm-schedules/schemas/pm-schedule-schema"; import { usePmScheduleDetail } from "@/domain/pm-schedules/use-cases/use-pm-schedule-detail"; import { usePmScheduleFormOptions } from "@/domain/pm-schedules/use-cases/use-pm-schedule-form-options"; import { useSavePmSchedule } from "@/domain/pm-schedules/use-cases/use-save-pm-schedule"; import { toDateInputValue } from "@/lib/time-utils"; export default function PmScheduleFormPage() { const { id } = useParams(); const navigate = useNavigate(); const isEdit = Boolean(id); const { data: schedule, isLoading, error } = usePmScheduleDetail(id); const { assets, locations, isLoading: optionsLoading, error: optionsError, } = usePmScheduleFormOptions(); const savePmSchedule = useSavePmSchedule(id); const { register, handleSubmit, reset, control, formState: { errors }, } = useForm({ resolver: zodResolver(pmScheduleSchema), defaultValues: pmScheduleDefaultValues, }); useEffect(() => { if (schedule && isEdit) { reset({ name: schedule.name, frequency: schedule.frequency as PmScheduleFormValues["frequency"], startDate: toDateInputValue(schedule.startDate), isActive: schedule.isActive, assetId: schedule.assetId, locationId: schedule.locationId, }); } }, [schedule, isEdit, reset]); if ((isEdit && isLoading) || optionsLoading) { return ( ); } return ( {isEdit ? "Edit PM Schedule" : "Create PM Schedule"} {Boolean(error) && Failed to load PM schedule} {Boolean(optionsError) && ( {optionsError instanceof Error ? optionsError.message : "Failed to load form options"} )} savePmSchedule.mutate(values))}> ( Frequency )} /> ( Asset )} /> ( Location )} /> ( } label="Active" /> )} /> ); }