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:
parent
b4f48a30cc
commit
fc2cf4f457
@ -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,
|
||||
);
|
||||
|
||||
@ -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 | {}) => {
|
||||
|
||||
@ -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 }) => {
|
||||
|
||||
@ -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,
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user