Skip to content

T-E078-layout-host-pane-shell

Status: closed/done · Impact: high · Complexity: large

Make the determined content area a layout-hosted pane group so panes persist across route changes and pages fill secondary/aux through the registry. Today each experience hand-rolls its own split inside its page (e.g. backup), so pane state resets on navigation and the registry has no host.

LocationRole today
packages/ts/shell/app/layouts/default.vueRenders DAppShell (sidebar/navbar/statusbar) with the routed page in the single main slot. No pane group.
apps/determined/experiences/backup/app/pages/apps/backup/index.vueHosts its own PaneGroup (secondary/main) inside the page — page-scoped, so it resets on navigation.

DAppShell’s main slot hosts a persistent PaneGroup (secondary/main/aux) from @sksizer/panes, provided once by the layout so it survives navigation. DAppShell’s sidebar stays the app rail. main holds the routed page; secondary/aux are PaneOutlets fed by the registry (T-601N-pane-content-registry). Side panes render only when a page has registered content, so single-column experiences show just main. --pane-* maps onto --d-*. Backup drops its page-local PaneGroup and fills the regions via PaneContent.

  1. In default.vue, wrap the routed page in a PaneGroup configured with secondary/main/aux; call providePaneRegistry(); map --pane-* onto --d-* on the container.
  2. Render secondary/aux only when the registry holds content for that region, so unfilled experiences get no empty rails.
  3. Migrate backup: remove its in-page PaneGroup; register the snapshot list as secondary and keep the detail in main, preserving selection and ?snap= deep-linking.
  4. Confirm a single-column experience (e.g. search) still renders as one column with no empty panes.
LocationKindChange
packages/ts/shell/app/layouts/default.vuemodifyhost PaneGroup + registry in the main slot
apps/determined/experiences/backup/app/pages/apps/backup/index.vuemodifyfill regions via the registry instead of a page-local PaneGroup
  • AC-1: Backup’s snapshot-list/detail split renders via the layout-hosted pane group; snapshot selection and ?snap= deep-linking still work.
  • AC-2: Pane widths and collapsed state survive navigation within an experience (single layout-hosted instance).
  • AC-3: A single-column experience renders as one column, with no empty secondary/aux rails.
  • AC-4: secondary/aux inherit determined’s palette and dark mode via --pane-* to --d-*.

T-601N-pane-content-registry


← Back to Tasks