2.5 KiB
2.5 KiB
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 |
— | — | — |