diff --git a/src/common/front-end-routing/routes/preferences/navigate-to-preferences.injectable.ts b/src/common/front-end-routing/routes/preferences/navigate-to-preferences.injectable.ts index 249fe52458..7dfb7f3d5c 100644 --- a/src/common/front-end-routing/routes/preferences/navigate-to-preferences.injectable.ts +++ b/src/common/front-end-routing/routes/preferences/navigate-to-preferences.injectable.ts @@ -3,12 +3,18 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import navigateToApplicationPreferencesInjectable from "../../../../features/preferences/common/navigate-to-application-preferences.injectable"; +import { navigateToRouteInjectionToken } from "../../navigate-to-route-injection-token"; +import preferencesRouteInjectable from "../../../../features/preferences/common/preferences-route.injectable"; const navigateToPreferencesInjectable = getInjectable({ id: "navigate-to-preferences", - instantiate: (di) => di.inject(navigateToApplicationPreferencesInjectable), + instantiate: (di) => { + const navigateToRoute = di.inject(navigateToRouteInjectionToken); + const preferencesRoute = di.inject(preferencesRouteInjectable); + + return () => navigateToRoute(preferencesRoute); + }, }); export default navigateToPreferencesInjectable; diff --git a/src/features/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap b/src/features/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap index 07ecf1f581..e80965198d 100644 --- a/src/features/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap +++ b/src/features/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap @@ -1035,3 +1035,696 @@ exports[`preferences - navigation to application preferences given in some child /> `; + +exports[`preferences - navigation to application preferences given in some child page of preferences, when rendered when navigating to preferences without specifying the tab renders 1`] = ` + +
+
+
+
+
+ + + home + + +
+
+
+ + + arrow_back + + +
+
+
+ + + arrow_forward + + +
+
+
+
+
+
+
+ +
+
+
+

+ Application +

+
+
+
+ Theme + +
+
+ + +
+
+
+ Select... +
+
+ +
+
+
+ + +
+
+
+
+
+
+
+
+
+ Extension Install Registry + +
+
+ + +
+
+
+ Select... +
+
+ +
+
+
+ + +
+
+
+

+ This setting is to change the registry URL for installing extensions by name. + If you are unable to access the default registry (https://registry.npmjs.org) you can change it in your + + .npmrc + + file or in the input below. +

+
+ +
+
+
+
+
+
+
+
+ Start-up + +
+ +
+
+
+
+
+
+ Update Channel + +
+
+ + +
+
+
+ Stable +
+
+ +
+
+
+ + +
+
+
+
+
+
+
+
+
+ Locale Timezone + +
+
+ + +
+
+
+ Select... +
+
+ +
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+ + + close + + +
+ +
+
+
+
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+
+
+
+
+
+
+
+
+ +`; diff --git a/src/features/preferences/navigation-to-application-preferences.test.ts b/src/features/preferences/navigation-to-application-preferences.test.ts index 70481bfea2..ab72b15750 100644 --- a/src/features/preferences/navigation-to-application-preferences.test.ts +++ b/src/features/preferences/navigation-to-application-preferences.test.ts @@ -59,6 +59,25 @@ describe("preferences - navigation to application preferences", () => { expect(page).not.toBeNull(); }); }); + + describe("when navigating to preferences without specifying the tab", () => { + beforeEach(() => { + builder.preferences.navigate(); + }); + + it("renders", () => { + expect(rendered.baseElement).toMatchSnapshot(); + }); + + it("shows tab for application preferences for it being the default", () => { + const page = getSingleElement( + "preference-page", + "application-page", + )(rendered); + + expect(page).not.toBeNull(); + }); + }); }); }); diff --git a/src/features/preferences/renderer/preference-items/current-preference-tab-composite.injectable.ts b/src/features/preferences/renderer/preference-items/current-preference-tab-composite.injectable.ts index d45344be31..3464bff636 100644 --- a/src/features/preferences/renderer/preference-items/current-preference-tab-composite.injectable.ts +++ b/src/features/preferences/renderer/preference-items/current-preference-tab-composite.injectable.ts @@ -6,30 +6,28 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; import type { PreferenceTab, PreferenceTypes } from "./preference-item-injection-token"; import type { Composite } from "../../../application-menu/main/menu-items/get-composite/get-composite"; -import routePathParametersInjectable from "../../../../renderer/routes/route-path-parameters.injectable"; -import preferencesRouteInjectable from "../../common/preferences-route.injectable"; import { filter, map } from "lodash/fp"; import { pipeline } from "@ogre-tools/fp"; import { normalizeComposite } from "../../../application-menu/main/menu-items/get-composite/normalize-composite/normalize-composite"; import preferencesCompositeInjectable from "./preferences-composite.injectable"; import type { PreferenceTabsRoot } from "./preference-tab-root"; +import currentPreferenceTabIdInjectable from "./current-preference-tab-id.injectable"; const currentPreferenceTabCompositeInjectable = getInjectable({ id: "current-preference-page-composite", instantiate: (di) => { - const preferencesRoute = di.inject(preferencesRouteInjectable); - const routePathParameters = di.inject(routePathParametersInjectable, preferencesRoute); + const currentTabId = di.inject(currentPreferenceTabIdInjectable); const preferencesComposite = di.inject(preferencesCompositeInjectable); return computed(() => { - const { preferenceTabId } = routePathParameters.get(); + const tabId = currentTabId.get(); const tabComposites = pipeline( normalizeComposite(preferencesComposite.get()), map(([, composite]) => composite), filter(isPreferenceTab), - filter(hasMatchingPathId(preferenceTabId)), + filter(hasMatchingPathId(tabId)), ); if (tabComposites.length === 0) { diff --git a/src/features/preferences/renderer/preference-items/current-preference-tab-id.injectable.ts b/src/features/preferences/renderer/preference-items/current-preference-tab-id.injectable.ts new file mode 100644 index 0000000000..e5c3be9da6 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/current-preference-tab-id.injectable.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { computed } from "mobx"; +import preferencesRouteInjectable from "../../common/preferences-route.injectable"; +import routePathParametersInjectable from "../../../../renderer/routes/route-path-parameters.injectable"; + +const currentPreferenceTabIdInjectable = getInjectable({ + id: "current-preference-tab-id", + + instantiate: (di) => { + const preferencesRoute = di.inject(preferencesRouteInjectable); + + const routePathParameters = di.inject( + routePathParametersInjectable, + preferencesRoute, + ); + + return computed( + () => routePathParameters.get().preferenceTabId || "app", + ); + }, +}); + +export default currentPreferenceTabIdInjectable; diff --git a/src/features/preferences/renderer/preference-navigation/navigate-to-preference-tab/preference-tab-is-active.injectable.ts b/src/features/preferences/renderer/preference-navigation/navigate-to-preference-tab/preference-tab-is-active.injectable.ts index 75a8948a4c..c01ffeb633 100644 --- a/src/features/preferences/renderer/preference-navigation/navigate-to-preference-tab/preference-tab-is-active.injectable.ts +++ b/src/features/preferences/renderer/preference-navigation/navigate-to-preference-tab/preference-tab-is-active.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import { computed } from "mobx"; import routeIsActiveInjectable from "../../../../../renderer/routes/route-is-active.injectable"; import preferencesRouteInjectable from "../../../common/preferences-route.injectable"; -import routePathParametersInjectable from "../../../../../renderer/routes/route-path-parameters.injectable"; +import currentPreferenceTabIdInjectable from "../../preference-items/current-preference-tab-id.injectable"; const preferenceTabIsActiveInjectable = getInjectable({ id: "preference-tab-is-active", @@ -14,11 +14,11 @@ const preferenceTabIsActiveInjectable = getInjectable({ instantiate: (di, tabId: string) => { const route = di.inject(preferencesRouteInjectable); const routeIsActive = di.inject(routeIsActiveInjectable, route); - const pathParameters = di.inject(routePathParametersInjectable, route); + const currentTabId = di.inject(currentPreferenceTabIdInjectable); return computed( () => - routeIsActive.get() && pathParameters.get().preferenceTabId === tabId, + routeIsActive.get() && currentTabId.get() === tabId, ); },