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.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { sortBy } from "lodash/fp";
|
||||||
|
|
||||||
export interface Orderable {
|
export interface Orderable {
|
||||||
orderNumber: number;
|
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 type { IComputedValue } from "mobx";
|
||||||
import { isBoolean } from "../../type-narrowing";
|
import { isBoolean } from "../../type-narrowing";
|
||||||
|
|
||||||
export interface Showable<
|
export interface Showable {
|
||||||
T extends IComputedValue<boolean> | boolean =
|
isShown: IComputedValue<boolean> | boolean;
|
||||||
| IComputedValue<boolean>
|
|
||||||
| boolean,
|
|
||||||
> {
|
|
||||||
isShown?: T;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const isShown = (showable: Showable | {}) => {
|
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 { RootComposite } from "../../../common/utils/composite/interfaces";
|
||||||
import type { Discriminable } from "../../../common/utils/composable-responsibilities/discriminable/discriminable";
|
import type { Discriminable } from "../../../common/utils/composable-responsibilities/discriminable/discriminable";
|
||||||
import type { Orderable } from "../../../common/utils/composable-responsibilities/orderable/orderable";
|
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 logErrorInjectable from "../../../common/log-error.injectable";
|
||||||
import { sortBy } from "lodash/fp";
|
|
||||||
import { isShown } from "../../../common/utils/composable-responsibilities/showable/showable";
|
import { isShown } from "../../../common/utils/composable-responsibilities/showable/showable";
|
||||||
|
|
||||||
export type MenuItemRoot = Discriminable<"root"> &
|
export type MenuItemRoot = Discriminable<"root"> &
|
||||||
@ -48,8 +48,8 @@ const applicationMenuItemCompositeInjectable = getInjectable({
|
|||||||
transformChildren: (children) =>
|
transformChildren: (children) =>
|
||||||
pipeline(
|
pipeline(
|
||||||
children,
|
children,
|
||||||
sortBy((child) => child.orderNumber),
|
orderByOrderNumber,
|
||||||
(children) => children.filter(child => isShown(child)),
|
(children) => children.filter(isShown),
|
||||||
),
|
),
|
||||||
|
|
||||||
handleMissingParentIds: ({ missingParentIds }) => {
|
handleMissingParentIds: ({ missingParentIds }) => {
|
||||||
|
|||||||
@ -7,12 +7,13 @@ import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-f
|
|||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
import type { PreferenceTypes } from "./preference-item-injection-token";
|
import type { PreferenceTypes } from "./preference-item-injection-token";
|
||||||
import { preferenceItemInjectionToken } 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 { pipeline } from "@ogre-tools/fp";
|
||||||
|
import type { PreferenceTabsRoot } from "./preference-tab-root";
|
||||||
import { preferenceTabsRoot } from "./preference-tab-root";
|
import { preferenceTabsRoot } from "./preference-tab-root";
|
||||||
import logErrorInjectable from "../../../../common/log-error.injectable";
|
import logErrorInjectable from "../../../../common/log-error.injectable";
|
||||||
import { isShown } from "../../../../common/utils/composable-responsibilities/showable/showable";
|
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({
|
const preferencesCompositeInjectable = getInjectable({
|
||||||
id: "preferences-composite",
|
id: "preferences-composite",
|
||||||
@ -22,25 +23,29 @@ const preferencesCompositeInjectable = getInjectable({
|
|||||||
const preferenceItems = computedInjectMany(preferenceItemInjectionToken);
|
const preferenceItems = computedInjectMany(preferenceItemInjectionToken);
|
||||||
const logError = di.inject(logErrorInjectable);
|
const logError = di.inject(logErrorInjectable);
|
||||||
|
|
||||||
return computed(() =>
|
const getComposite = getCompositeFor<PreferenceTypes | PreferenceTabsRoot>({
|
||||||
pipeline(
|
getId: (x) => x.id,
|
||||||
[preferenceTabsRoot, ...preferenceItems.get()],
|
getParentId: (x) => x.parentId,
|
||||||
filter((item: PreferenceTypes) => isShown(item)),
|
|
||||||
|
|
||||||
(items) =>
|
|
||||||
getComposite({
|
|
||||||
source: items,
|
|
||||||
|
|
||||||
handleMissingParentIds: (ids) => {
|
handleMissingParentIds: (ids) => {
|
||||||
logError(
|
logError(
|
||||||
`Tried to create preferences, but encountered references to unknown ids: "${ids.missingParentIds.join(
|
`Tried to create preferences, but encountered references to unknown ids: "${ids.missingParentIds.join(
|
||||||
'", "',
|
'", "',
|
||||||
)}". Available ids are: "${ids.availableParentIds.join(
|
)}". Available ids are: "${ids.availableParentIds.join('", "')}"`,
|
||||||
'", "',
|
|
||||||
)}"`,
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
}),
|
|
||||||
|
transformChildren: (children) =>
|
||||||
|
pipeline(
|
||||||
|
children.filter(isShown),
|
||||||
|
orderByOrderNumber,
|
||||||
|
),
|
||||||
|
});
|
||||||
|
|
||||||
|
return computed(() =>
|
||||||
|
pipeline(
|
||||||
|
[preferenceTabsRoot, ...preferenceItems.get()],
|
||||||
|
getComposite,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user