1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Fixing navigation to extension specific tabs

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2022-05-05 10:47:32 +03:00
parent 4c8aaa8bbb
commit 4b074d981b

View File

@ -6,32 +6,34 @@ import { getInjectable } from "@ogre-tools/injectable";
import { computed } from "mobx"; import { computed } from "mobx";
import { map } from "lodash/fp"; import { map } from "lodash/fp";
import navigateToRouteInjectable from "../../../../main/navigate-to-route/navigate-to-route.injectable";
import routeIsActiveInjectable from "../../../routes/route-is-active.injectable"; import routeIsActiveInjectable from "../../../routes/route-is-active.injectable";
import { preferenceNavigationItemInjectionToken } from "./preference-navigation-items.injectable"; import { preferenceNavigationItemInjectionToken } from "./preference-navigation-items.injectable";
import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension"; import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension";
import { extensionRegistratorInjectionToken } from "../../../../extensions/extension-loader/extension-registrator-injection-token"; import { extensionRegistratorInjectionToken } from "../../../../extensions/extension-loader/extension-registrator-injection-token";
import { pipeline } from "@ogre-tools/fp"; import { pipeline } from "@ogre-tools/fp";
import extensionPreferencesRouteInjectable from "../../../../common/front-end-routing/routes/preferences/extension/extension-preferences-route.injectable";
import currentPathParametersInjectable from "../../../routes/current-path-parameters.injectable";
import navigateToExtensionPreferencesInjectable from "../../../../common/front-end-routing/routes/preferences/extension/navigate-to-extension-preferences.injectable";
const extensionSpecificTabNavigationItemRegistratorInjectable = getInjectable({ const extensionSpecificTabNavigationItemRegistratorInjectable = getInjectable({
id: "extension-specific-tab-preferences-navigation-items", id: "extension-specific-tab-preferences-navigation-items",
instantiate: (di) => { instantiate: (di) => {
return (extension: LensRendererExtension) => { return (extension: LensRendererExtension) => {
const navigateToRoute = di.inject(navigateToRouteInjectable); const navigateToExtensionPreferences = di.inject(
navigateToExtensionPreferencesInjectable,
);
const route = di.inject(extensionPreferencesRouteInjectable);
const routeIsActive = di.inject(routeIsActiveInjectable, route);
const pathParameters = di.inject(currentPathParametersInjectable);
const injectables = pipeline( const injectables = pipeline(
extension.appPreferenceTabs, extension.appPreferenceTabs,
map((tab) => { map((tab) => {
const id = `extension-specific-tab-navigation-item-${tab.id}`; const id = `extension-specific-tab-navigation-item-${tab.id}`;
const route = { const isActive = computed(() => routeIsActive.get() && pathParameters.get().tabId === tab.id);
path: `/preferences/${tab.id}`,
clusterFrame: false,
isEnabled: computed(() => true),
};
const routeIsActive = di.inject(routeIsActiveInjectable, route);
return getInjectable({ return getInjectable({
id, id,
@ -40,9 +42,9 @@ const extensionSpecificTabNavigationItemRegistratorInjectable = getInjectable({
id, id,
label: tab.title, label: tab.title,
orderNumber: tab.orderNumber, orderNumber: tab.orderNumber,
navigate: () => navigateToRoute(route, {}), navigate: () => navigateToExtensionPreferences(extension.sanitizedExtensionId, tab.id),
isVisible: computed(() => true), isVisible: computed(() => true),
isActive: computed(() => routeIsActive.get()), isActive,
}), }),
}); });
}), }),