diff --git a/src/app/(protected)/settings/_components/services-registry-components.tsx b/src/app/(protected)/settings/_components/services-registry-components.tsx index 3095fd06..5762a7f4 100644 --- a/src/app/(protected)/settings/_components/services-registry-components.tsx +++ b/src/app/(protected)/settings/_components/services-registry-components.tsx @@ -179,125 +179,15 @@ export function ServiceEditorDrawer({ {Boolean(formError) && } - - Service Information - - onUpdate("name", event.target.value)} - placeholder="e.g., HVAC Inspection" + - - Trade - - - - Icon - - Pre-selected from the Trade; you can change it. - - - Supported Work Order Types - - - {SERVICE_WORK_ORDER_TYPES.map((type) => ( - onToggleType(type)} - /> - } - label={type} - /> - ))} - - {mode === "edit" && canChangeActiveState && ( - onUpdate("isActive", event.target.checked)} - /> - } - label="Active" - /> - )} - - - Completion Document - - { - onUpdate("requiresCompletionDocument", event.target.checked); - if (!event.target.checked) onUpdate("completionDocTemplateId", null); - }} - /> - } - label="Requires completion document" - /> - {form.requiresCompletionDocument && ( - template.id === form.completionDocTemplateId) ?? null - } - onChange={(_, template) => - onUpdate("completionDocTemplateId", template?.id ?? null) - } - getOptionLabel={(template) => template.name} - isOptionEqualToValue={(option, value) => String(option.id) === String(value.id)} - renderInput={(params) => ( - - )} - /> - )} - - Manage the document's own content on the Completion Document Templates page. - @@ -312,6 +202,141 @@ export function ServiceEditorDrawer({ ); } +type EditorFieldsProps = Pick< + EditorProps, + "mode" | "form" | "trades" | "templates" | "canChangeActiveState" | "onUpdate" | "onToggleType" +>; + +function ServiceEditorFields({ + mode, + form, + trades, + templates, + canChangeActiveState, + onUpdate, + onToggleType, +}: EditorFieldsProps) { + return ( + <> + + Service Information + + onUpdate("name", event.target.value)} + placeholder="e.g., HVAC Inspection" + /> + + Trade + + + + Icon + + Pre-selected from the Trade; you can change it. + + + Supported Work Order Types + + + {SERVICE_WORK_ORDER_TYPES.map((type) => ( + onToggleType(type)} + /> + } + label={type} + /> + ))} + + {mode === "edit" && canChangeActiveState && ( + onUpdate("isActive", event.target.checked)} + /> + } + label="Active" + /> + )} + + + Completion Document + + { + onUpdate("requiresCompletionDocument", event.target.checked); + if (!event.target.checked) onUpdate("completionDocTemplateId", null); + }} + /> + } + label="Requires completion document" + /> + {form.requiresCompletionDocument && ( + template.id === form.completionDocTemplateId) ?? null} + onChange={(_, template) => onUpdate("completionDocTemplateId", template?.id ?? null)} + getOptionLabel={(template) => template.name} + isOptionEqualToValue={(option, value) => String(option.id) === String(value.id)} + renderInput={(params) => ( + + )} + /> + )} + + Manage the document's own content on the Completion Document Templates page. + + + ); +} + function AlertMessage({ message }: { message: string }) { return ( diff --git a/src/app/(protected)/settings/_components/services-registry-view.tsx b/src/app/(protected)/settings/_components/services-registry-view.tsx index fab5e02f..286f904e 100644 --- a/src/app/(protected)/settings/_components/services-registry-view.tsx +++ b/src/app/(protected)/settings/_components/services-registry-view.tsx @@ -22,6 +22,7 @@ import { useServicesRegistryController, type ServiceStatus, } from "@/domain/services/use-cases/use-services-registry-controller"; +import type { Service } from "@/domain/services/types/service"; import { DeactivateServiceDialog, ServiceDetailsDrawer, @@ -100,53 +101,7 @@ export function ServicesRegistryView() { onAdd={controller.canManage ? controller.openCreate : undefined} /> ) : ( - - - - - Service - Trade - Completion Document - Status - - - - - {controller.filteredServices.map((service) => ( - controller.setSelected(service)} - sx={{ cursor: "pointer" }} - > - - - - - - - - {service.name} - - - {service.supportedWorkOrderTypes.join(" · ")} - - - - - {service.trade} - - {service.requiresCompletionDocument - ? service.completionDocTemplate?.name || "No template linked yet" - : "Not required"} - - {service.isActive ? "Active" : "Inactive"} - › - - ))} - -
-
+ )} void; +}) { + return ( + + + + + Service + Trade + Completion Document + Status + + + + + {services.map((service) => ( + onSelect(service)} + sx={{ cursor: "pointer" }} + > + + + + + + + + {service.name} + + + {service.supportedWorkOrderTypes.join(" · ")} + + + + + {service.trade} + + {service.requiresCompletionDocument + ? service.completionDocTemplate?.name || "No template linked yet" + : "Not required"} + + {service.isActive ? "Active" : "Inactive"} + › + + ))} + +
+
+ ); +} + function EmptyServices({ search, status,