mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
49 lines
2.1 KiB
TypeScript
49 lines
2.1 KiB
TypeScript
/**
|
|
* 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 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 { findExactlyOne } from "../../../../common/utils/find-exactly-one/find-exactly-one";
|
|
import preferencesCompositeInjectable from "./preferences-composite.injectable";
|
|
import type { PreferenceTabsRoot } from "./preference-tab-root";
|
|
|
|
const currentPreferenceTabCompositeInjectable = getInjectable({
|
|
id: "current-preference-page-composite",
|
|
|
|
instantiate: (di) => {
|
|
const preferencesRoute = di.inject(preferencesRouteInjectable);
|
|
const routePathParameters = di.inject(routePathParametersInjectable, preferencesRoute);
|
|
const preferencesComposite = di.inject(preferencesCompositeInjectable);
|
|
|
|
return computed(() => {
|
|
const { preferenceTabId } = routePathParameters.get();
|
|
|
|
return pipeline(
|
|
normalizeComposite(preferencesComposite.get()),
|
|
map(([, composite]) => composite),
|
|
filter(isPreferenceTab),
|
|
findExactlyOne(hasMatchingPathId(preferenceTabId)),
|
|
);
|
|
});
|
|
},
|
|
});
|
|
|
|
const isPreferenceTab = (
|
|
composite: Composite<PreferenceTypes | PreferenceTabsRoot>,
|
|
): composite is Composite<PreferenceTab> => composite.value.kind === "tab";
|
|
|
|
const hasMatchingPathId =
|
|
(preferenceTabId: string) =>
|
|
({ value: { pathId }}: Composite<PreferenceTab>) =>
|
|
pathId === preferenceTabId;
|
|
|
|
export default currentPreferenceTabCompositeInjectable;
|