Description
Now that cross-app soft navigation works (openedx/frontend-app-instructor-dashboard#246, openedx/frontend-app-admin-console#233), two gaps remain in the shell, affecting all apps.
First, there is no pending UI during navigation. With route-level lazy(), a soft navigation stays on the current page while the chunk downloads and loaders run, so on a slow connection the triggering click looks inert. A useNavigation()-driven indicator (e.g. a top progress bar) in DefaultLayout would cover every app.
Second, the shell does not render <ScrollRestoration />, and data routers do not reset scroll position without it. Soft-navigating from a scrolled-down page in one app lands mid-page in the next. Rendering it once inside the router tree fixes this globally.
Description
Now that cross-app soft navigation works (openedx/frontend-app-instructor-dashboard#246, openedx/frontend-app-admin-console#233), two gaps remain in the shell, affecting all apps.
First, there is no pending UI during navigation. With route-level
lazy(), a soft navigation stays on the current page while the chunk downloads and loaders run, so on a slow connection the triggering click looks inert. AuseNavigation()-driven indicator (e.g. a top progress bar) inDefaultLayoutwould cover every app.Second, the shell does not render
<ScrollRestoration />, and data routers do not reset scroll position without it. Soft-navigating from a scrolled-down page in one app lands mid-page in the next. Rendering it once inside the router tree fixes this globally.