diff --git a/kolibri/core/assets/src/utils/__test__/generateNavRoutes.spec.js b/kolibri/core/assets/src/composables/__tests__/generateNavRoutes.spec.js
similarity index 100%
rename from kolibri/core/assets/src/utils/__test__/generateNavRoutes.spec.js
rename to kolibri/core/assets/src/composables/__tests__/generateNavRoutes.spec.js
diff --git a/kolibri/core/assets/src/utils/generateNavRoutes.js b/kolibri/core/assets/src/composables/generateNavRoutes.js
similarity index 100%
rename from kolibri/core/assets/src/utils/generateNavRoutes.js
rename to kolibri/core/assets/src/composables/generateNavRoutes.js
diff --git a/kolibri/core/assets/src/composables/useNav.js b/kolibri/core/assets/src/composables/useNav.js
index 26c25722c5..a0f4917e33 100644
--- a/kolibri/core/assets/src/composables/useNav.js
+++ b/kolibri/core/assets/src/composables/useNav.js
@@ -3,7 +3,8 @@ import { KolibriIcons } from 'kolibri-design-system/lib/KIcon/iconDefinitions';
import { get } from '@vueuse/core';
import { UserKinds, NavComponentSections } from 'kolibri.coreVue.vuex.constants';
import logger from 'kolibri.lib.logging';
-import { computed } from 'kolibri.lib.vueCompositionApi';
+import { computed, getCurrentInstance } from 'kolibri.lib.vueCompositionApi';
+import { generateNavRoute } from './generateNavRoutes';
const logging = logger.getLogger(__filename);
@@ -75,13 +76,26 @@ export const registerNavItem = component => {
}
};
-export default function useNav() {
+export default function useNav(store) {
+ store = store || getCurrentInstance().proxy.$store;
+ const route = computed(() => store.state.route);
const { windowIsSmall } = useKResponsiveWindow();
const topBarHeight = computed(() => (get(windowIsSmall) ? 56 : 64));
- const exportedItems = navItems.map(component => ({
- ...component,
- active: window.location.pathname == component.url,
- }));
+ const exportedItems = computed(() =>
+ navItems.map(item => {
+ const output = {
+ ...item,
+ active: window.location.pathname == item.url,
+ };
+ if (item.routes) {
+ output.routes = item.routes.map(routeItem => ({
+ ...routeItem,
+ href: generateNavRoute(item.url, routeItem.route, get(route).params),
+ }));
+ }
+ return output;
+ }),
+ );
return {
navItems: exportedItems,
topBarHeight,
diff --git a/kolibri/core/assets/src/views/AppBar.vue b/kolibri/core/assets/src/views/AppBar.vue
index 3588dca569..7240be71e5 100644
--- a/kolibri/core/assets/src/views/AppBar.vue
+++ b/kolibri/core/assets/src/views/AppBar.vue
@@ -159,7 +159,7 @@
const { isLearner, isUserLoggedIn, username, full_name } = useUser();
const { totalPoints, fetchPoints } = useTotalProgress();
const links = computed(() => {
- const currentItem = navItems.find(nc => nc.url === window.location.pathname);
+ const currentItem = get(navItems).find(nc => nc.url === window.location.pathname);
if (!currentItem || !currentItem.routes) {
return [];
}
diff --git a/kolibri/core/assets/src/views/BottomNavigationBar.vue b/kolibri/core/assets/src/views/BottomNavigationBar.vue
index ee225641fc..cebe134162 100644
--- a/kolibri/core/assets/src/views/BottomNavigationBar.vue
+++ b/kolibri/core/assets/src/views/BottomNavigationBar.vue
@@ -9,7 +9,7 @@
:key="key"
>
@@ -102,7 +102,6 @@