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

Simplify usages of Orderable and Showable

Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>

Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>
This commit is contained in:
Iku-turso 2022-10-24 14:11:58 +03:00
parent b4f48a30cc
commit fc2cf4f457
4 changed files with 39 additions and 27 deletions

View File

@ -3,6 +3,17 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { sortBy } from "lodash/fp";
export interface Orderable {
orderNumber: number;
}
export const orderByOrderNumber = <T extends Orderable | {}>(maybeOrderables: T[]) =>
sortBy(
(orderable) =>
"orderNumber" in orderable
? orderable.orderNumber
: Number.MAX_SAFE_INTEGER,
maybeOrderables,
);

View File

@ -6,12 +6,8 @@
import type { IComputedValue } from "mobx";
import { isBoolean } from "../../type-narrowing";
export interface Showable<
T extends IComputedValue<boolean> | boolean =
| IComputedValue<boolean>
| boolean,
> {
isShown?: T;
export interface Showable {
isShown: IComputedValue<boolean> | boolean;
}
export const isShown = (showable: Showable | {}) => {

View File

@ -12,8 +12,8 @@ import type { ApplicationMenuItemTypes } from "./menu-items/application-menu-ite
import type { RootComposite } from "../../../common/utils/composite/interfaces";
import type { Discriminable } from "../../../common/utils/composable-responsibilities/discriminable/discriminable";
import type { Orderable } from "../../../common/utils/composable-responsibilities/orderable/orderable";
import { orderByOrderNumber } from "../../../common/utils/composable-responsibilities/orderable/orderable";
import logErrorInjectable from "../../../common/log-error.injectable";
import { sortBy } from "lodash/fp";
import { isShown } from "../../../common/utils/composable-responsibilities/showable/showable";
export type MenuItemRoot = Discriminable<"root"> &
@ -48,8 +48,8 @@ const applicationMenuItemCompositeInjectable = getInjectable({
transformChildren: (children) =>
pipeline(
children,
sortBy((child) => child.orderNumber),
(children) => children.filter(child => isShown(child)),
orderByOrderNumber,
(children) => children.filter(isShown),
),
handleMissingParentIds: ({ missingParentIds }) => {

View File

@ -7,12 +7,13 @@ import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-f
import { computed } from "mobx";
import type { PreferenceTypes } from "./preference-item-injection-token";
import { preferenceItemInjectionToken } from "./preference-item-injection-token";
import getComposite from "../../../../common/utils/composite/get-composite/get-composite";
import { filter } from "lodash/fp";
import { pipeline } from "@ogre-tools/fp";
import type { PreferenceTabsRoot } from "./preference-tab-root";
import { preferenceTabsRoot } from "./preference-tab-root";
import logErrorInjectable from "../../../../common/log-error.injectable";
import { isShown } from "../../../../common/utils/composable-responsibilities/showable/showable";
import getCompositeFor from "../../../../common/utils/composite/get-composite/get-composite";
import { orderByOrderNumber } from "../../../../common/utils/composable-responsibilities/orderable/orderable";
const preferencesCompositeInjectable = getInjectable({
id: "preferences-composite",
@ -22,25 +23,29 @@ const preferencesCompositeInjectable = getInjectable({
const preferenceItems = computedInjectMany(preferenceItemInjectionToken);
const logError = di.inject(logErrorInjectable);
const getComposite = getCompositeFor<PreferenceTypes | PreferenceTabsRoot>({
getId: (x) => x.id,
getParentId: (x) => x.parentId,
handleMissingParentIds: (ids) => {
logError(
`Tried to create preferences, but encountered references to unknown ids: "${ids.missingParentIds.join(
'", "',
)}". Available ids are: "${ids.availableParentIds.join('", "')}"`,
);
},
transformChildren: (children) =>
pipeline(
children.filter(isShown),
orderByOrderNumber,
),
});
return computed(() =>
pipeline(
[preferenceTabsRoot, ...preferenceItems.get()],
filter((item: PreferenceTypes) => isShown(item)),
(items) =>
getComposite({
source: items,
handleMissingParentIds: (ids) => {
logError(
`Tried to create preferences, but encountered references to unknown ids: "${ids.missingParentIds.join(
'", "',
)}". Available ids are: "${ids.availableParentIds.join(
'", "',
)}"`,
);
},
}),
getComposite,
),
);
},