mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Switch to using competition for application preferences
Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
parent
cd3210ac59
commit
e8b27ee6a5
@ -1,20 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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 appPreferencesRouteInjectable from "./app-preferences-route.injectable";
|
|
||||||
import { navigateToRouteInjectionToken } from "../../../navigate-to-route-injection-token";
|
|
||||||
|
|
||||||
const navigateToAppPreferencesInjectable = getInjectable({
|
|
||||||
id: "navigate-to-app-preferences",
|
|
||||||
|
|
||||||
instantiate: (di) => {
|
|
||||||
const navigateToRoute = di.inject(navigateToRouteInjectionToken);
|
|
||||||
const route = di.inject(appPreferencesRouteInjectable);
|
|
||||||
|
|
||||||
return () => navigateToRoute(route);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export default navigateToAppPreferencesInjectable;
|
|
||||||
@ -3,12 +3,12 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import navigateToAppPreferencesInjectable from "./app/navigate-to-app-preferences.injectable";
|
import navigateToApplicationPreferencesInjectable from "../../../../features/preferences/common/navigate-to-application-preferences.injectable";
|
||||||
|
|
||||||
const navigateToPreferencesInjectable = getInjectable({
|
const navigateToPreferencesInjectable = getInjectable({
|
||||||
id: "navigate-to-preferences",
|
id: "navigate-to-preferences",
|
||||||
|
|
||||||
instantiate: (di) => di.inject(navigateToAppPreferencesInjectable),
|
instantiate: (di) => di.inject(navigateToApplicationPreferencesInjectable),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default navigateToPreferencesInjectable;
|
export default navigateToPreferencesInjectable;
|
||||||
|
|||||||
@ -743,6 +743,7 @@ exports[`preferences - closing-preferences given accessing preferences directly
|
|||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="SettingLayout showNavigation Preferences"
|
class="SettingLayout showNavigation Preferences"
|
||||||
|
data-testid="some-test-id-for-test-tab"
|
||||||
>
|
>
|
||||||
<nav
|
<nav
|
||||||
class="sidebarRegion"
|
class="sidebarRegion"
|
||||||
@ -839,9 +840,7 @@ exports[`preferences - closing-preferences given accessing preferences directly
|
|||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="content"
|
class="content"
|
||||||
>
|
/>
|
||||||
Some test page
|
|
||||||
</div>
|
|
||||||
<div
|
<div
|
||||||
class="toolsRegion"
|
class="toolsRegion"
|
||||||
>
|
>
|
||||||
@ -1014,7 +1013,9 @@ exports[`preferences - closing-preferences given accessing preferences directly
|
|||||||
<div
|
<div
|
||||||
id="lens-views"
|
id="lens-views"
|
||||||
/>
|
/>
|
||||||
<div>
|
<div
|
||||||
|
data-testid="some-front-page"
|
||||||
|
>
|
||||||
Some front page
|
Some front page
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
@ -1153,7 +1154,9 @@ exports[`preferences - closing-preferences given accessing preferences directly
|
|||||||
<div
|
<div
|
||||||
id="lens-views"
|
id="lens-views"
|
||||||
/>
|
/>
|
||||||
<div>
|
<div
|
||||||
|
data-testid="some-front-page"
|
||||||
|
>
|
||||||
Some front page
|
Some front page
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
@ -1963,6 +1966,7 @@ exports[`preferences - closing-preferences given already in a page and then navi
|
|||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="SettingLayout showNavigation Preferences"
|
class="SettingLayout showNavigation Preferences"
|
||||||
|
data-testid="some-test-id-for-test-tab"
|
||||||
>
|
>
|
||||||
<nav
|
<nav
|
||||||
class="sidebarRegion"
|
class="sidebarRegion"
|
||||||
@ -2059,9 +2063,7 @@ exports[`preferences - closing-preferences given already in a page and then navi
|
|||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="content"
|
class="content"
|
||||||
>
|
/>
|
||||||
Some test page
|
|
||||||
</div>
|
|
||||||
<div
|
<div
|
||||||
class="toolsRegion"
|
class="toolsRegion"
|
||||||
>
|
>
|
||||||
@ -2235,141 +2237,9 @@ exports[`preferences - closing-preferences given already in a page and then navi
|
|||||||
id="lens-views"
|
id="lens-views"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="SettingLayout showNavigation Preferences"
|
data-testid="some-page"
|
||||||
>
|
>
|
||||||
<nav
|
Some content
|
||||||
class="sidebarRegion"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="sidebar"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="Tabs flex column"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="header"
|
|
||||||
>
|
|
||||||
Preferences
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-application"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
App
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-proxy"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Proxy
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-kubernetes"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Kubernetes
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-editor"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Editor
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-terminal"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Terminal
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center active"
|
|
||||||
data-testid="tab-link-for-some-test-preference-navigation-item-id"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Some preference navigation item
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
<div
|
|
||||||
class="contentRegion"
|
|
||||||
id="ScrollSpyRoot"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="content"
|
|
||||||
>
|
|
||||||
Some test page
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="toolsRegion"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="fixed top-[60px]"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
data-testid="close-preferences"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
aria-label="Close"
|
|
||||||
class="closeButton"
|
|
||||||
role="button"
|
|
||||||
>
|
|
||||||
<i
|
|
||||||
class="Icon icon material focusable"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="icon"
|
|
||||||
data-icon-name="close"
|
|
||||||
>
|
|
||||||
close
|
|
||||||
</span>
|
|
||||||
</i>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
aria-hidden="true"
|
|
||||||
class="esc"
|
|
||||||
>
|
|
||||||
ESC
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<div
|
<div
|
||||||
@ -2508,141 +2378,9 @@ exports[`preferences - closing-preferences given already in a page and then navi
|
|||||||
id="lens-views"
|
id="lens-views"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="SettingLayout showNavigation Preferences"
|
data-testid="some-page"
|
||||||
>
|
>
|
||||||
<nav
|
Some content
|
||||||
class="sidebarRegion"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="sidebar"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="Tabs flex column"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="header"
|
|
||||||
>
|
|
||||||
Preferences
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-application"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
App
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-proxy"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Proxy
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-kubernetes"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Kubernetes
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-editor"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Editor
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center"
|
|
||||||
data-testid="tab-link-for-terminal"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Terminal
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="Tab flex gaps align-center active"
|
|
||||||
data-testid="tab-link-for-some-test-preference-navigation-item-id"
|
|
||||||
role="tab"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="label"
|
|
||||||
>
|
|
||||||
Some preference navigation item
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
<div
|
|
||||||
class="contentRegion"
|
|
||||||
id="ScrollSpyRoot"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="content"
|
|
||||||
>
|
|
||||||
Some test page
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="toolsRegion"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="fixed top-[60px]"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
data-testid="close-preferences"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
aria-label="Close"
|
|
||||||
class="closeButton"
|
|
||||||
role="button"
|
|
||||||
>
|
|
||||||
<i
|
|
||||||
class="Icon icon material focusable"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="icon"
|
|
||||||
data-icon-name="close"
|
|
||||||
>
|
|
||||||
close
|
|
||||||
</span>
|
|
||||||
</i>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
aria-hidden="true"
|
|
||||||
class="esc"
|
|
||||||
>
|
|
||||||
ESC
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<div
|
<div
|
||||||
|
|||||||
@ -11,17 +11,17 @@ import currentPathInjectable from "../../renderer/routes/current-path.injectable
|
|||||||
import { frontEndRouteInjectionToken } from "../../common/front-end-routing/front-end-route-injection-token";
|
import { frontEndRouteInjectionToken } from "../../common/front-end-routing/front-end-route-injection-token";
|
||||||
import { computed, runInAction } from "mobx";
|
import { computed, runInAction } from "mobx";
|
||||||
import { preferenceNavigationItemInjectionToken } from "../../renderer/components/+preferences/preferences-navigation/preference-navigation-items.injectable";
|
import { preferenceNavigationItemInjectionToken } from "../../renderer/components/+preferences/preferences-navigation/preference-navigation-items.injectable";
|
||||||
import routeIsActiveInjectable from "../../renderer/routes/route-is-active.injectable";
|
|
||||||
import { Preferences } from "../../renderer/components/+preferences";
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { routeSpecificComponentInjectionToken } from "../../renderer/routes/route-specific-component-injection-token";
|
import { routeSpecificComponentInjectionToken } from "../../renderer/routes/route-specific-component-injection-token";
|
||||||
import observableHistoryInjectable from "../../renderer/navigation/observable-history.injectable";
|
import observableHistoryInjectable from "../../renderer/navigation/observable-history.injectable";
|
||||||
import { searchParamsOptions } from "../../renderer/navigation";
|
import { searchParamsOptions } from "../../renderer/navigation";
|
||||||
import { createMemoryHistory } from "history";
|
import { createMemoryHistory } from "history";
|
||||||
import { createObservableHistory } from "mobx-observable-history";
|
import { createObservableHistory } from "mobx-observable-history";
|
||||||
import navigateToPreferenceTabInjectable from "../../renderer/components/+preferences/preferences-navigation/navigate-to-preference-tab.injectable";
|
|
||||||
import navigateToFrontPageInjectable from "../../common/front-end-routing/navigate-to-front-page.injectable";
|
import navigateToFrontPageInjectable from "../../common/front-end-routing/navigate-to-front-page.injectable";
|
||||||
import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token";
|
import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token";
|
||||||
|
import navigateToPreferenceTabInjectable from "../../renderer/components/+preferences/preferences-navigation/navigate-to-preference-tab/navigate-to-preference-tab.injectable";
|
||||||
|
import preferenceTabIsActiveInjectable from "../../renderer/components/+preferences/preferences-navigation/navigate-to-preference-tab/preference-tab-is-active.injectable";
|
||||||
|
import { preferenceItemInjectionToken } from "./renderer/preference-items/preference-item-injection-token";
|
||||||
|
|
||||||
describe("preferences - closing-preferences", () => {
|
describe("preferences - closing-preferences", () => {
|
||||||
let builder: ApplicationBuilder;
|
let builder: ApplicationBuilder;
|
||||||
@ -31,8 +31,9 @@ describe("preferences - closing-preferences", () => {
|
|||||||
|
|
||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
windowDi.register(testPreferencesRouteInjectable);
|
windowDi.register(testPreferenceTabInjectable);
|
||||||
windowDi.register(testPreferencesRouteComponentInjectable);
|
windowDi.register(testRouteInjectable);
|
||||||
|
windowDi.register(testRouteComponentInjectable);
|
||||||
windowDi.register(testFrontPageRouteInjectable);
|
windowDi.register(testFrontPageRouteInjectable);
|
||||||
windowDi.register(testFrontPageRouteComponentInjectable);
|
windowDi.register(testFrontPageRouteComponentInjectable);
|
||||||
windowDi.register(testNavigationItemInjectable);
|
windowDi.register(testNavigationItemInjectable);
|
||||||
@ -57,7 +58,7 @@ describe("preferences - closing-preferences", () => {
|
|||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(observableHistoryInjectable, () => {
|
windowDi.override(observableHistoryInjectable, () => {
|
||||||
const historyFake = createMemoryHistory({
|
const historyFake = createMemoryHistory({
|
||||||
initialEntries: ["/some-test-path"],
|
initialEntries: ["/some-page"],
|
||||||
initialIndex: 0,
|
initialIndex: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -89,7 +90,11 @@ describe("preferences - closing-preferences", () => {
|
|||||||
it("navigates back to the original page", () => {
|
it("navigates back to the original page", () => {
|
||||||
const currentPath = windowDi.inject(currentPathInjectable).get();
|
const currentPath = windowDi.inject(currentPathInjectable).get();
|
||||||
|
|
||||||
expect(currentPath).toBe("/some-test-path");
|
expect(currentPath).toBe("/some-page");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shows the original page", () => {
|
||||||
|
expect(rendered.getByTestId("some-page")).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -116,7 +121,11 @@ describe("preferences - closing-preferences", () => {
|
|||||||
it("navigates back to the original page", () => {
|
it("navigates back to the original page", () => {
|
||||||
const currentPath = windowDi.inject(currentPathInjectable).get();
|
const currentPath = windowDi.inject(currentPathInjectable).get();
|
||||||
|
|
||||||
expect(currentPath).toBe("/some-test-path");
|
expect(currentPath).toBe("/some-page");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shows the original page", () => {
|
||||||
|
expect(rendered.getByTestId("some-page")).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -130,7 +139,7 @@ describe("preferences - closing-preferences", () => {
|
|||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(observableHistoryInjectable, () => {
|
windowDi.override(observableHistoryInjectable, () => {
|
||||||
const historyFake = createMemoryHistory({
|
const historyFake = createMemoryHistory({
|
||||||
initialEntries: ["/preferences/app"],
|
initialEntries: ["/preferences2/app"],
|
||||||
initialIndex: 0,
|
initialIndex: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -163,6 +172,10 @@ describe("preferences - closing-preferences", () => {
|
|||||||
|
|
||||||
expect(currentPath).toBe("/some-front-page");
|
expect(currentPath).toBe("/some-front-page");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("shows front page", () => {
|
||||||
|
expect(rendered.getByTestId("some-front-page")).toBeInTheDocument();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when navigating to a tab in preferences", () => {
|
describe("when navigating to a tab in preferences", () => {
|
||||||
@ -190,36 +203,34 @@ describe("preferences - closing-preferences", () => {
|
|||||||
|
|
||||||
expect(currentPath).toBe("/some-front-page");
|
expect(currentPath).toBe("/some-front-page");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("shows front page", () => {
|
||||||
|
expect(rendered.getByTestId("some-front-page")).toBeInTheDocument();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const testPreferencesRouteInjectable = getInjectable({
|
const testPreferenceTabInjectable = getInjectable({
|
||||||
id: "test-preferences-route",
|
id: "test-preference-tab",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: () => ({
|
||||||
path: "/some-test-path",
|
kind: "tab" as const,
|
||||||
clusterFrame: false,
|
id: "test-tab",
|
||||||
isEnabled: computed(() => true),
|
pathId: "test-tab",
|
||||||
|
parentId: "preference-tabs" as const,
|
||||||
|
testId: "some-test-id-for-test-tab",
|
||||||
|
label: "Test",
|
||||||
|
orderNumber: 90,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
injectionToken: frontEndRouteInjectionToken,
|
injectionToken: preferenceItemInjectionToken,
|
||||||
});
|
});
|
||||||
|
|
||||||
const testPreferencesRouteComponentInjectable = getInjectable({
|
|
||||||
id: "test-route-component",
|
|
||||||
|
|
||||||
instantiate: (di) => ({
|
|
||||||
route: di.inject(testPreferencesRouteInjectable),
|
|
||||||
Component: () => <Preferences>Some test page</Preferences>,
|
|
||||||
}),
|
|
||||||
|
|
||||||
injectionToken: routeSpecificComponentInjectionToken,
|
|
||||||
});
|
|
||||||
|
|
||||||
const testFrontPageRouteInjectable = getInjectable({
|
const testFrontPageRouteInjectable = getInjectable({
|
||||||
id: "test-front-page-route",
|
id: "some-front-page",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: () => ({
|
||||||
path: "/some-front-page",
|
path: "/some-front-page",
|
||||||
@ -231,11 +242,34 @@ const testFrontPageRouteInjectable = getInjectable({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const testFrontPageRouteComponentInjectable = getInjectable({
|
const testFrontPageRouteComponentInjectable = getInjectable({
|
||||||
id: "test-front-page-route-component",
|
id: "some-front-page-component",
|
||||||
|
|
||||||
instantiate: (di) => ({
|
instantiate: (di) => ({
|
||||||
route: di.inject(testFrontPageRouteInjectable),
|
route: di.inject(testFrontPageRouteInjectable),
|
||||||
Component: () => <div>Some front page</div>,
|
Component: () => <div data-testid="some-front-page">Some front page</div>,
|
||||||
|
}),
|
||||||
|
|
||||||
|
injectionToken: routeSpecificComponentInjectionToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
const testRouteInjectable = getInjectable({
|
||||||
|
id: "some-page",
|
||||||
|
|
||||||
|
instantiate: () => ({
|
||||||
|
path: "/some-page",
|
||||||
|
clusterFrame: false,
|
||||||
|
isEnabled: computed(() => true),
|
||||||
|
}),
|
||||||
|
|
||||||
|
injectionToken: frontEndRouteInjectionToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
const testRouteComponentInjectable = getInjectable({
|
||||||
|
id: "some-page-component",
|
||||||
|
|
||||||
|
instantiate: (di) => ({
|
||||||
|
route: di.inject(testRouteInjectable),
|
||||||
|
Component: () => <div data-testid="some-page">Some content</div>,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
injectionToken: routeSpecificComponentInjectionToken,
|
injectionToken: routeSpecificComponentInjectionToken,
|
||||||
@ -245,17 +279,16 @@ const testNavigationItemInjectable = getInjectable({
|
|||||||
id: "some-test-preference-navigation-item-id",
|
id: "some-test-preference-navigation-item-id",
|
||||||
|
|
||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const testRoute = di.inject(testPreferencesRouteInjectable);
|
|
||||||
const navigateToPreferenceTab = di.inject(navigateToPreferenceTabInjectable);
|
const navigateToPreferenceTab = di.inject(navigateToPreferenceTabInjectable);
|
||||||
const routeIsActive = di.inject(routeIsActiveInjectable, testRoute);
|
const preferenceTabIsActive = di.inject(preferenceTabIsActiveInjectable, "test-tab");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: "some-test-preference-navigation-item-id",
|
id: "some-test-preference-navigation-item-id",
|
||||||
label: "Some preference navigation item",
|
label: "Some preference navigation item",
|
||||||
parent: "general",
|
parent: "general",
|
||||||
isActive: routeIsActive,
|
isActive: preferenceTabIsActive,
|
||||||
isVisible: testRoute.isEnabled,
|
isVisible: computed(() => true),
|
||||||
navigate: navigateToPreferenceTab(testRoute),
|
navigate: () => navigateToPreferenceTab("test-tab"),
|
||||||
orderNumber: 100,
|
orderNumber: 100,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* 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 preferencesRouteInjectable from "./preferences-route.injectable";
|
||||||
|
import { navigateToRouteInjectionToken } from "../../../common/front-end-routing/navigate-to-route-injection-token";
|
||||||
|
|
||||||
|
const navigateToApplicationPreferencesInjectable = getInjectable({
|
||||||
|
id: "navigate-to-application-preferences",
|
||||||
|
|
||||||
|
instantiate: (di) => {
|
||||||
|
const navigateToRoute = di.inject(navigateToRouteInjectionToken);
|
||||||
|
const route = di.inject(preferencesRouteInjectable);
|
||||||
|
|
||||||
|
return () => navigateToRoute(route, { parameters: { preferenceTabId: "app" }});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default navigateToApplicationPreferencesInjectable;
|
||||||
@ -3,16 +3,16 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { generalCatalogEntityInjectionToken } from "../general-catalog-entity-injection-token";
|
import { generalCatalogEntityInjectionToken } from "../../../common/catalog-entities/general-catalog-entities/general-catalog-entity-injection-token";
|
||||||
import { GeneralEntity } from "../../index";
|
import { GeneralEntity } from "../../../common/catalog-entities";
|
||||||
import { buildURL } from "../../../utils/buildUrl";
|
import { buildURL } from "../../../common/utils/buildUrl";
|
||||||
import appPreferencesRouteInjectable from "../../../front-end-routing/routes/preferences/app/app-preferences-route.injectable";
|
import preferencesRouteInjectable from "./preferences-route.injectable";
|
||||||
|
|
||||||
const preferencesCatalogEntityInjectable = getInjectable({
|
const preferencesCatalogEntityInjectable = getInjectable({
|
||||||
id: "general-catalog-entity-for-preferences",
|
id: "general-catalog-entity-for-preferences",
|
||||||
|
|
||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const route = di.inject(appPreferencesRouteInjectable);
|
const route = di.inject(preferencesRouteInjectable);
|
||||||
const url = buildURL(route.path);
|
const url = buildURL(route.path);
|
||||||
|
|
||||||
return new GeneralEntity({
|
return new GeneralEntity({
|
||||||
@ -10,7 +10,7 @@ const preferencesRouteInjectable = getInjectable({
|
|||||||
id: "preferences-route",
|
id: "preferences-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: () => ({
|
||||||
path: "/preferences2/:preferenceTabId",
|
path: "/preferences2/:preferenceTabId?",
|
||||||
clusterFrame: false,
|
clusterFrame: false,
|
||||||
isEnabled: computed(() => true),
|
isEnabled: computed(() => true),
|
||||||
}),
|
}),
|
||||||
@ -10,7 +10,7 @@ import { preferenceItemInjectionToken } from "./preference-item-injection-token"
|
|||||||
import type { Composite } from "../../../application-menu/main/menu-items/get-composite/get-composite";
|
import type { Composite } from "../../../application-menu/main/menu-items/get-composite/get-composite";
|
||||||
import getComposite from "../../../application-menu/main/menu-items/get-composite/get-composite";
|
import getComposite from "../../../application-menu/main/menu-items/get-composite/get-composite";
|
||||||
import routePathParametersInjectable from "../../../../renderer/routes/route-path-parameters.injectable";
|
import routePathParametersInjectable from "../../../../renderer/routes/route-path-parameters.injectable";
|
||||||
import preferencesRouteInjectable from "../preferences-route.injectable";
|
import preferencesRouteInjectable from "../../common/preferences-route.injectable";
|
||||||
import { filter, find } from "lodash/fp";
|
import { filter, find } from "lodash/fp";
|
||||||
import { pipeline } from "@ogre-tools/fp";
|
import { pipeline } from "@ogre-tools/fp";
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeSpecificComponentInjectionToken } from "../../../renderer/routes/route-specific-component-injection-token";
|
import { routeSpecificComponentInjectionToken } from "../../../renderer/routes/route-specific-component-injection-token";
|
||||||
import { Preferences } from "./preferences";
|
import { Preferences } from "./preferences";
|
||||||
import preferencesRouteInjectable from "./preferences-route.injectable";
|
import preferencesRouteInjectable from "../common/preferences-route.injectable";
|
||||||
|
|
||||||
const preferencesRouteComponentInjectable = getInjectable({
|
const preferencesRouteComponentInjectable = getInjectable({
|
||||||
id: "preferences-route-component",
|
id: "preferences-route-component",
|
||||||
|
|||||||
@ -4,29 +4,23 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { preferenceNavigationItemInjectionToken } from "./preference-navigation-items.injectable";
|
import { preferenceNavigationItemInjectionToken } from "./preference-navigation-items.injectable";
|
||||||
import appPreferencesRouteInjectable from "../../../../common/front-end-routing/routes/preferences/app/app-preferences-route.injectable";
|
|
||||||
import routeIsActiveInjectable from "../../../routes/route-is-active.injectable";
|
|
||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
import navigateToPreferenceTabInjectable from "./navigate-to-preference-tab.injectable";
|
import navigateToPreferenceTabInjectable from "./navigate-to-preference-tab/navigate-to-preference-tab.injectable";
|
||||||
|
import preferenceTabIsActiveInjectable from "./navigate-to-preference-tab/preference-tab-is-active.injectable";
|
||||||
|
|
||||||
const applicationPreferencesNavigationItemInjectable = getInjectable({
|
const applicationPreferencesNavigationItemInjectable = getInjectable({
|
||||||
id: "application-preferences-navigation-item",
|
id: "application-preferences-navigation-item",
|
||||||
|
|
||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const route = di.inject(appPreferencesRouteInjectable);
|
|
||||||
const navigateToPreferenceTab = di.inject(navigateToPreferenceTabInjectable);
|
const navigateToPreferenceTab = di.inject(navigateToPreferenceTabInjectable);
|
||||||
|
const preferenceTabIsActive = di.inject(preferenceTabIsActiveInjectable, "app");
|
||||||
const routeIsActive = di.inject(
|
|
||||||
routeIsActiveInjectable,
|
|
||||||
route,
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: "application",
|
id: "application",
|
||||||
label: "App",
|
label: "App",
|
||||||
parent: "general",
|
parent: "general",
|
||||||
navigate: navigateToPreferenceTab(route),
|
navigate: () => navigateToPreferenceTab("app"),
|
||||||
isActive: routeIsActive,
|
isActive: preferenceTabIsActive,
|
||||||
isVisible: computed(() => true),
|
isVisible: computed(() => true),
|
||||||
orderNumber: 10,
|
orderNumber: 10,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -0,0 +1,25 @@
|
|||||||
|
/**
|
||||||
|
* 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 { navigateToRouteInjectionToken } from "../../../../../common/front-end-routing/navigate-to-route-injection-token";
|
||||||
|
import preferencesRouteInjectable from "../../../../../features/preferences/common/preferences-route.injectable";
|
||||||
|
|
||||||
|
const navigateToPreferenceTabInjectable = getInjectable({
|
||||||
|
id: "navigate-to-preference-tab-2",
|
||||||
|
|
||||||
|
instantiate: (di) => {
|
||||||
|
const navigateToRoute = di.inject(navigateToRouteInjectionToken);
|
||||||
|
const route = di.inject(preferencesRouteInjectable);
|
||||||
|
|
||||||
|
return (preferenceTabId: string) => {
|
||||||
|
navigateToRoute(route, {
|
||||||
|
withoutAffectingBackButton: true,
|
||||||
|
parameters: { preferenceTabId },
|
||||||
|
});
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default navigateToPreferenceTabInjectable;
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
|
||||||
|
import { computed } from "mobx";
|
||||||
|
import routeIsActiveInjectable from "../../../../routes/route-is-active.injectable";
|
||||||
|
import preferencesRouteInjectable from "../../../../../features/preferences/common/preferences-route.injectable";
|
||||||
|
import routePathParametersInjectable from "../../../../routes/route-path-parameters.injectable";
|
||||||
|
|
||||||
|
const preferenceTabIsActiveInjectable = getInjectable({
|
||||||
|
id: "preference-tab-is-active",
|
||||||
|
|
||||||
|
instantiate: (di, tabId: string) => {
|
||||||
|
const route = di.inject(preferencesRouteInjectable);
|
||||||
|
const routeIsActive = di.inject(routeIsActiveInjectable, route);
|
||||||
|
const pathParameters = di.inject(routePathParametersInjectable, route);
|
||||||
|
|
||||||
|
return computed(
|
||||||
|
() =>
|
||||||
|
routeIsActive.get() && pathParameters.get().preferenceTabId === tabId,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
lifecycle: lifecycleEnum.keyedSingleton({
|
||||||
|
getInstanceKey: (di, tabId: string) => tabId,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
export default preferenceTabIsActiveInjectable;
|
||||||
Loading…
Reference in New Issue
Block a user