Application Pages

Application Pages

En Application Page er en hybrid mellem en helt fri block-canvas og en hardcoded route. Den eksisterer som en rigtig Page-record i storage (så editor kan tilføje blocks, sortere, gemme), men strukturerelt-krævede blocks kan ikke slettes. Selve siden kan heller ikke slettes — applikationen afhænger af den.

Freeform vs Application

Freeform Application
Hvem definerer Editor Sitetypen (i kode)
Blocks kan slettes? Alle Alle undtagen required
Siden kan slettes? Ja Nej (DELETE returnerer 403)
Reset til template? Nej Ja, via knap
Eksempler Om kunstneren, Contact Forside (creator), Links, Collections

Required blocks

En ContentTypeDefinition kan deklarere pageKind: "application" + requiredBlocks: [...]. Den sidste forekomst af hvert required block-navn kan ikke slettes i BlockArray-editoren. Dette håndhæves både UI-side (delete-knap disabled) og server-side (strict reject ved save).

export const linksPageTypeDefinition: ContentTypeDefinition = {
  name: "LinksPage",
  pageKind: "application",
  requiredBlocks: [
    { name: "SocialChannelsList", config: { heading: "Find me elsewhere" } }
  ],
  allowedBlocks: ["SocialChannelsList", "Text", "Image", "Spacer", "Cta"],
  // ...
};

Editor-flow

  1. Application-page vises i /admin/pages med 🔒 application-badge + er sorteret øverst i træet.
  2. Delete-knappen er erstattet med en disabled-tekst.
  3. På rediger-siden får editor en amber-banner: "🔒 Det er en application-side..."
  4. Kind-felt (på MenuItems og lignende) er read-only.
  5. Editor kan tilføje extra blocks, sortere, og redigere required blocks' config.
  6. Nulstil til template-knap wiper alle ikke-required blocks og restorer required's seed-config.

Når Editor gemmer

Server validerer at alle required blocks findes i payload. Hvis mangler → 400 Bad Request med JSON { error, missing: ["BlockName1", "BlockName2"] }. UI viser en specifik banner med listen.

Eksempler i creator-portfolio

URL Type Required blocks
/[tenant] CreatorFrontpage CreatorHero, FeaturedWorksRollup
/[tenant]/links LinksPage SocialChannelsList
/[tenant]/collections CollectionsPage CollectionsGrid

Se også