feat(static-pages): navigation integration (insert page link)
Milestone 6 of the Static Pages Module sprint.
- ProjectEditorFacade.addStaticPageNavLink(target, pageId): creates a
NavigationItemConfig { type: 'staticPage', key: pageId }. This shape was
already understood end-to-end by the resolvers (StaticPageResolverService/
FooterResolverService derive label+route from the linked page - see
footer-resolver.service.ts resolveGroupItem/resolveLegacyItem) - the only
gap was that the editor UI never exposed a way to create it.
- navigation-section: "Insert page link" control (page picker + button) next
to both header and footer "Add link". Rows for a static-page link show a
"Linked to page" indicator instead of the raw label/URL inputs (those
fields don't apply - the resolver derives them dynamically). labelOf()
falls back to the page id for the row heading since a static-page link has
no label of its own.
- i18n: builder.insertPageLink, builder.linkedToPage in interface + en/ru/hy.
Verified (no rebuild needed) that pages already participate in preview(),
exportBootstrap()/importBootstrap(), and draft/publish gating - all flow
through bootstrap.staticPages and the M1-M2 additive fields untouched here.
Gate: tsc --noEmit, npm test (57/57), arch:check, build all green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -386,6 +386,31 @@ export class ProjectEditorFacade {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a nav link that points at a static page by id rather than a raw
|
||||
* route. `type: 'staticPage'` is already understood by the resolvers
|
||||
* (StaticPageResolverService / FooterResolverService derive the label and
|
||||
* route from the page itself) - this only closes the editor-side gap of
|
||||
* never being able to create that item shape.
|
||||
*/
|
||||
addStaticPageNavLink(target: 'header' | 'footer', pageId: string): void {
|
||||
this.updateBootstrap(current => {
|
||||
const list = current.navigation[target];
|
||||
if (!this.isFlatNavList(list) || !pageId) {
|
||||
return current;
|
||||
}
|
||||
const items = list as NavigationItemConfig[];
|
||||
const newItem: NavigationItemConfig = {
|
||||
id: `nav-page-${Date.now()}`,
|
||||
type: 'staticPage',
|
||||
key: pageId,
|
||||
order: items.length + 1,
|
||||
visible: true,
|
||||
};
|
||||
return { ...current, navigation: { ...current.navigation, [target]: [...items, newItem] } };
|
||||
});
|
||||
}
|
||||
|
||||
addNavLink(target: 'header' | 'footer'): void {
|
||||
this.updateBootstrap(current => {
|
||||
const list = current.navigation[target];
|
||||
|
||||
Reference in New Issue
Block a user