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
+
+
+
+
+
+
+ Extension Install Registry
+
+
+
+
+ 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.
+
+
+
+
+
+
+
+
+
+
+ Update Channel
+
+
+
+
+
+
+
+
+
+ Locale Timezone
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ arrow_left
+
+
+
+
+
+ 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,
);
},