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,