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

Extract responsibility of "separability"

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-20 11:37:12 +03:00 committed by Janne Savolainen
parent f59f771947
commit 18f1e1b6aa
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
9 changed files with 28 additions and 16 deletions

View File

@ -7,11 +7,10 @@ export interface ParentOfChildComposite<Id extends string = string> {
id: Id;
}
export interface ChildOfParentComposite<Id extends string = string> {
parentId: Id;
export interface ChildOfParentComposite<ParentId extends string = string> {
parentId: ParentId;
}
export type RootComposite<Id extends string = string> =
& { parentId: undefined }
& ParentOfChildComposite<Id>;

View File

@ -54,7 +54,7 @@ const registratorForPreferenceItemsInjectable = getInjectable({
</PreferencePageComponent>
),
childSeparator: HorizontalLine,
childSeparator: () => <HorizontalLine />,
}),
injectionToken: preferenceItemInjectionToken,
@ -133,7 +133,7 @@ const registratorForPreferenceItemsInjectable = getInjectable({
<ExtensionPreferenceBlock registration={registration} />
),
childSeparator: HorizontalLine,
childSeparator: () => <HorizontalLine />,
}),
injectionToken: preferenceItemInjectionToken,

View File

@ -23,7 +23,7 @@ const applicationPreferencePageInjectable = getInjectable({
id: "application-page",
parentId: "application-tab",
Component: ApplicationPage,
childSeparator: HorizontalLine,
childSeparator: () => <HorizontalLine />,
}),
injectionToken: preferenceItemInjectionToken,

View File

@ -23,7 +23,7 @@ const kubernetesPreferencePageInjectable = getInjectable({
id: "kubernetes-page",
parentId: "kubernetes-tab",
Component: KubernetesPage,
childSeparator: HorizontalLine,
childSeparator: () => <HorizontalLine />,
}),
injectionToken: preferenceItemInjectionToken,

View File

@ -9,6 +9,14 @@ import type { Discriminable } from "../../../../common/utils/composable-responsi
import type { Labelable } from "../../../../common/utils/composable-responsibilities/labelable/labelable";
import type { Showable } from "../../../../common/utils/composable-responsibilities/showable/showable";
import type { Orderable } from "../../../../common/utils/composable-responsibilities/orderable/orderable";
import type { GetSeparator } from "../../../../common/utils/add-separator/add-separator";
import type { Composite } from "../../../../common/utils/composite/get-composite/get-composite";
export type ChildrenAreSeparated =
& { childSeparator: GetSeparator<Composite<PreferenceTypes>, React.ReactElement> };
export type ChildrenAreMaybeSeparated =
& Partial<ChildrenAreSeparated>;
export type PreferenceItemComponent<T> = React.ComponentType<{
children: React.ReactElement;
@ -33,8 +41,8 @@ export type PreferenceTabGroup =
& Orderable
& { iconName? : string };
interface RenderableWithSiblings<T extends PreferenceTypes> {
childSeparator?: () => React.ReactElement;
interface RenderableWithSiblings<T extends PreferenceTypes>
extends ChildrenAreMaybeSeparated {
Component: PreferenceItemComponent<T>;
}

View File

@ -7,12 +7,13 @@ import { HorizontalLine } from "../../../../renderer/components/horizontal-line/
import type { RootComposite } from "../../../../common/utils/composite/interfaces";
import type { Discriminable } from "../../../../common/utils/composable-responsibilities/discriminable/discriminable";
import type { Showable } from "../../../../common/utils/composable-responsibilities/showable/showable";
import type { ChildrenAreSeparated } from "./preference-item-injection-token";
export type PreferenceTabsRoot =
& Discriminable<"preference-tabs-root">
& RootComposite
& Showable<true>
& { childSeparator: () => React.ReactElement };
& ChildrenAreSeparated
& Showable<true>;
export const preferenceTabsRoot: PreferenceTabsRoot = {
kind: "preference-tabs-root" as const,

View File

@ -82,7 +82,11 @@ const toNavigationHierarchy = (composite: Composite<PreferenceTypes | Preference
case "preference-tabs-root": {
return (
<Map items={composite.children} getSeparator={value.childSeparator}>
<Map
// Note: stricter typing for composite children could maybe remove this curiosity.
items={composite.children as Composite<PreferenceTypes>[]}
getSeparator={value.childSeparator}
>
{toNavigationHierarchy}
</Map>
);

View File

@ -79,7 +79,7 @@ const toPreferenceItemHierarchy = (composite: Composite<PreferenceTypes>) => {
<Component item={value}>
<Map
items={composite.children}
getSeparator={value.childSeparator || DefaultSeparator}
getSeparator={value.childSeparator || defaultSeparator}
>
{toPreferenceItemHierarchy}
</Map>
@ -112,4 +112,4 @@ export const Preferences = withInjectables<Dependencies>(
},
);
const DefaultSeparator = () => <Gutter size="xl" />;
const defaultSeparator = () => <Gutter size="xl" />;

View File

@ -7,10 +7,10 @@ import styles from "./horizontal-line.module.scss";
import { cssNames } from "../../utils";
interface HorizontalLineProps {
size: "sm" | "md" | "xl";
size?: "sm" | "md" | "xl";
}
export const HorizontalLine = ({ size }: HorizontalLineProps = { size: "xl" }) => {
export const HorizontalLine = ({ size = "xl" }: HorizontalLineProps = { size: "xl" }) => {
const classNames = cssNames(styles.HorizontalLine, styles[`size-${size}`]);
return <div className={classNames} />;