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
- Application-page vises i
/admin/pagesmed 🔒 application-badge + er sorteret øverst i træet. - Delete-knappen er erstattet med en disabled-tekst.
- På rediger-siden får editor en amber-banner: "🔒 Det er en application-side..."
- Kind-felt (på MenuItems og lignende) er read-only.
- Editor kan tilføje extra blocks, sortere, og redigere required blocks' config.
- 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 |