1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/+preferences/preferences-navigation/preference-navigation-items.injectable.ts
Alex Andreev 0784085bf4
Show extension preferences in separate page (#5284)
Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com>
Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>
2022-06-21 11:11:31 -04:00

45 lines
1.4 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { pipeline } from "@ogre-tools/fp";
import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
import { filter, orderBy } from "lodash/fp";
import type { IComputedValue } from "mobx";
import { computed } from "mobx";
export const preferenceNavigationItemInjectionToken =
getInjectionToken<PreferenceNavigationItem>({
id: "preference-navigation-item-injection-token",
});
export interface PreferenceNavigationItem {
id: string;
label: string;
isActive: IComputedValue<boolean>;
isVisible: IComputedValue<boolean>;
navigate: () => void;
orderNumber: number;
parent: string;
}
const preferenceNavigationItemsInjectable = getInjectable({
id: "preference-navigation-items",
instantiate: (di) => {
const computedInjectMany = di.inject(computedInjectManyInjectable);
const navigationItems = computedInjectMany(preferenceNavigationItemInjectionToken);
return computed((): PreferenceNavigationItem[] =>
pipeline(
navigationItems.get(),
filter((item) => !!item.isVisible.get()),
(items) => orderBy([(item) => item.orderNumber], ["asc"], items),
),
);
},
});
export default preferenceNavigationItemsInjectable;