This commit is contained in:
36
src/pages/admin/positions/nodes.js
Normal file
36
src/pages/admin/positions/nodes.js
Normal file
@@ -0,0 +1,36 @@
|
||||
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' },
|
||||
},
|
||||
]);
|
||||
Reference in New Issue
Block a user