# Business Logic Model — Unit 3: frontend-cms-page ## Component Orchestration `CmsPage` is the root orchestrator. It owns all modal state and delegates data operations to hooks. ``` CmsPage ├── useCmsInstances() → fetches instance list ├── CmsInstanceList → renders table, emits onSetStatus ├── AddCmsInstanceDialog → useAddCmsInstance() internally └── SetStatusDialog → useUpdateCmsInstanceStatus() internally ``` --- ## Data Flows ### Flow 1 — Load instances ``` CmsPage mounts → useCmsInstances fires GET /api/v1/CmsInstances → isPending: show loading indicator → isError: show error message → data=[]: render EmptyState (centered placeholder + Add button) → data=[...]: render CmsInstanceList ``` ### Flow 2 — Add CmsInstance ``` User clicks "Add CMS" button → addDialogOpen = true → AddCmsInstanceDialog opens User fills Name, URL, ApiKey and submits → useAddCmsInstance fires POST /api/v1/CmsInstances → HTTP 201: close dialog, invalidate ['cmsInstances'], toast success → HTTP 400: show FormBannerError inside dialog (do not close) → Network error: show FormBannerError inside dialog ``` ### Flow 3 — Update instance status ``` User clicks "Set Status" in row actions dropdown → statusTarget = instance → SetStatusDialog opens User selects status, optionally fills DisableMessage, submits → useUpdateCmsInstanceStatus fires PUT /api/v1/CmsInstances/{id}/status → HTTP 200 + slaveContactSuccess=true: close dialog, invalidate ['cmsInstances'], toast "Status updated — cliënt confirmed" → HTTP 200 + slaveContactSuccess=false: close dialog, invalidate ['cmsInstances'], toast "Status saved — cliënt unreachable" → HTTP 404: toast error "Instance not found" → HTTP 400: toast error (generic) → Network error: toast error (generic) ``` ### Flow 4 — DisableMessage conditional visibility ``` SetStatusDialog: status field changes → status === 'NotAvailable': show DisableMessage field (required) → status !== 'NotAvailable': hide DisableMessage field, clear value ``` --- ## Cache Strategy | Hook | Query key | Stale time | Invalidated by | |------|-----------|------------|----------------| | `useCmsInstances` | `['cmsInstances']` | 30 000 ms | `useAddCmsInstance.onSuccess`, `useUpdateCmsInstanceStatus.onSuccess` | | `useAddCmsInstance` | — | — | — | | `useUpdateCmsInstanceStatus` | — | — | — |