37 lines
1.5 KiB
JavaScript
37 lines
1.5 KiB
JavaScript
import { registerPageComposition } from '@/lib/ui/composition';
|
|
|
|
/**
|
|
* Positions, page level only.
|
|
*
|
|
* Positions has three scopes and only one of them is flat. These two slots
|
|
* render **once for the page**, with no position in context, which is what a
|
|
* definition reporting across every role needs — and it is where the Board
|
|
* skill's section lives.
|
|
*
|
|
* The other seven slots are *instanced*: `after-position-card` renders inside
|
|
* each card, and five more render inside the drawer for one open position, each
|
|
* with `context={{ position }}`. A single tree cannot address those, because
|
|
* there is no one node for them — there are as many renderings as there are
|
|
* records. Giving them identity needs a repeating-subtree model and a decision
|
|
* about whether a change to one card means every card; that is deliberately not
|
|
* attempted here, and the page keeps rendering them exactly as it always has.
|
|
*
|
|
* So this composition is honest about being partial: two nodes, drawn where
|
|
* they have always been drawn, addressable like anything else.
|
|
*/
|
|
registerPageComposition('positions', [
|
|
{
|
|
id: 'positions-extensions-summary',
|
|
type: 'skill-surface',
|
|
props: { page: 'positions', placement: 'after-position-list-summary' },
|
|
/* The separation this slot has always had from the grid below it. */
|
|
layout: { spacingAfter: 'md' },
|
|
},
|
|
{
|
|
id: 'positions-extensions-list',
|
|
type: 'skill-surface',
|
|
props: { page: 'positions', placement: 'after-position-list' },
|
|
layout: { spacingBefore: 'lg' },
|
|
},
|
|
]);
|