import type { ReactNode } from "react"; import { useNavigate } from "react-router"; import { Alert, Box, Button, CircularProgress, Paper, Stack, Typography } from "@mui/material"; import { VendorPortalTokenPanel } from "./vendor-portal-token-panel"; import { VendorRosterConflictAlert } from "./vendor-roster-conflict-alert"; import { VendorRosterFormFields } from "./vendor-roster-form-fields"; import { VendorRosterLoadErrorAlert } from "./vendor-roster-load-error"; import { useVendorRosterForm } from "./use-vendor-roster-form"; interface VendorRosterPageProps { vendorId?: string; companyId?: string; } function PageShell({ title, subtitle, children, }: { title: string; subtitle: string; children: ReactNode; }) { return ( {title} {subtitle} {children} ); } export default function VendorRosterPage({ vendorId, companyId }: VendorRosterPageProps) { const navigate = useNavigate(); const isEdit = vendorId !== undefined || companyId !== undefined; const form = useVendorRosterForm({ mode: isEdit ? "update" : "create", vendorId, companyId, onSuccess: () => navigate("/vendors"), }); if (isEdit && form.isLoading) { return ( ); } if (isEdit && form.isError) { return ( Failed to load vendor company. Try again. ); } if (isEdit && !form.roster) { return null; } const title = isEdit ? "Edit Vendor Company" : "Add Vendor Company"; const subtitle = isEdit ? "Update company details and technicians in one save." : "Register a company and add zero, one, or multiple technicians."; const companySelectionProps = isEdit ? {} : { companies: form.companies, selectedCompanyId: form.selectedCompanyId, onSelectCompany: form.selectCompany, onClearSelectedCompany: form.clearSelectedCompany, }; return ( {form.loadErrorMessage !== null && ( )} {form.conflict !== null && ( )} {isEdit && vendorId !== undefined && vendorId !== "" && ( )} ); }