Files
gridpilot.gg/docs/architecture/website/VIEW_DATA.md
2026-01-11 14:04:48 +01:00

1.6 KiB

ViewData (Website Templates)

ViewData is the only allowed input type for Templates in apps/website.

Authoritative contract: WEBSITE_CONTRACT.md.

1) Definition

ViewData is a JSON-serializable, template-ready data structure:

  • primitives (strings/numbers/booleans)
  • arrays and plain objects
  • null for missing values

2) What ViewData is NOT

ViewData is not:

  • an API Transport DTO (raw transport)
  • a ViewModel (client-only class)
  • a Display Object instance

3) Construction rules

ViewData MUST be created in client code:

  1. Initial SSR-safe render: ViewData = fromDTO(PageDTO)
  2. Post-hydration render: ViewData = fromViewModel(ViewModel)

These transformations are Presenters. See PRESENTERS.md.

Templates MUST NOT compute derived values.

Presenters MUST NOT call the API.

4) Determinism rules

Any formatting used to produce ViewData MUST be deterministic.

Forbidden anywhere in formatting code paths:

  • Intl.*
  • Date.toLocaleString() / Date.toLocaleDateString() / Date.toLocaleTimeString()

Reason: SSR and browser outputs can differ.

Localization MUST NOT depend on runtime locale APIs. If localized strings are required, they MUST be provided as deterministic inputs (for example via API-provided labels or a deterministic code-to-label map) and passed through Presenters into ViewData.

5) Relationship to Display Objects

Display Objects are used to implement formatting/mapping, but their instances MUST NOT be stored inside ViewData.

Only primitive outputs produced by Display Objects may appear in ViewData.