Skip to content

fix(admin-ui): restore FE list→object navigation in headless shell (unblocks Channels Edit) - #2164

Merged
jung-thomas merged 1 commit into
DEVfrom
fix/admin-shell-fe-inner-appstate
Sep 5, 2026
Merged

fix(admin-ui): restore FE list→object navigation in headless shell (unblocks Channels Edit)#2164
jung-thomas merged 1 commit into
DEVfrom
fix/admin-shell-fe-inner-appstate

Conversation

@jung-thomas

Copy link
Copy Markdown
Contributor

Problem

Row-click in the Channels Admin app (and every other headless Fiori Elements app) does not open the ObjectPage, so Edit is unreachable. #2163 added the missing per-app navigation block (ObjectPage route), which cleared the first error — but a second, deeper, shell-wide error remained:

TypeError: i.storeInnerAppStateAsync is not a function

Root cause (grounded live on DEV, not guessed)

The admin shell installs a minimal fake sap.ushell.Container so the 14 FE apps render no standalone shell chrome. FE detects the (fake) launchpad and builds its NavigationService without storeInnerAppStateAsync, expecting the real FLP to persist inner-app state. Our fake container doesn't, so the first list-row click throws and navigation silently fails.

Verified via runtime probes in an authenticated DEV session:

  • FE nav service on a loaded component: storeInnerAppStateAsync === undefined.
  • Enhancing the fake CrossApplicationNavigation with app-state factory methods does NOT help — a freshly-loaded component still had undefined. FE fixes the service shape purely on ushell.Container presence, before those methods are consulted.
  • Directly adding storeInnerAppStateAsync to the returned nav service → channel row click navigates to the ObjectPage, which renders with an active Edit button.

Fix

After each route match, wrap getNavigationService() on every headless sap.tutorials.admin.* FE component so the returned service always carries a working in-memory storeInnerAppStateAsync (and, defensively, replaceInnerAppStateKey) — mirroring FE's standalone mode. Idempotent per component; no change to the shell chrome / back-button / title integration.

Scope / risk

  • Shell-wide: benefits all FE admin apps that have an ObjectPage (Channels, Channel Collections, Channel Topic Map today; others as they gain object pages).
  • Purely additive; only fills a missing method, never overrides an existing one.
  • Admin-UI change → needs a FULL deploy (no --skip-build, no -m); Step 3.5 bundle gate applies.

Verification plan post-merge

Full deploy to DEV, then in Tom's session: Channels → click a row → ObjectPage opens → Edit button works.

The admin shell installs a minimal fake sap.ushell.Container so the 14
headless Fiori Elements apps render no standalone shell chrome. A side
effect is that FE, detecting a launchpad, builds a NavigationService
WITHOUT storeInnerAppStateAsync (it expects the real FLP to persist inner
app-state). The fake container does not, so the first list-row click threw
'storeInnerAppStateAsync is not a function' and the ObjectPage never
opened -- blocking Edit on Channels (and every other FE app).

Enhancing the fake CrossApplicationNavigation with app-state factory
methods does not help: FE fixes the service shape purely on
ushell.Container presence. Instead, after each route match, wrap
getNavigationService() on each admin FE component so the returned service
always carries a working in-memory storeInnerAppStateAsync (and,
defensively, replaceInnerAppStateKey), mirroring FE's standalone mode.

Verified live on DEV via runtime patch: channel row -> ObjectPage with an
active Edit button; nav service goes undefined -> function on a fresh
component load.

Refs #2163
@jung-thomas
jung-thomas merged commit 45bc052 into DEV Sep 5, 2026
4 checks passed
@jung-thomas
jung-thomas deleted the fix/admin-shell-fe-inner-appstate branch September 5, 2026 18:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant