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 !== "" && (
)}
);
}