Files

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