/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import "./preferences.scss"; import React from "react"; import { SettingLayout } from "../../../renderer/components/layout/setting-layout"; import { withInjectables } from "@ogre-tools/injectable-react"; import closePreferencesInjectable from "./close-preferences/close-preferences.injectable"; import currentPreferenceTabCompositeInjectable from "./preference-items/current-preference-tab-composite.injectable"; import type { Composite } from "../../../common/utils/composite/get-composite/get-composite"; import type { PreferenceTypes, PreferenceTab } from "./preference-items/preference-item-injection-token"; import type { IComputedValue } from "mobx"; import { Map } from "../../../renderer/components/map/map"; import { observer } from "mobx-react"; import { PreferencesNavigation } from "./preference-navigation/preferences-navigation"; import Gutter from "../../../renderer/components/gutter/gutter"; import { checkThatAllDiscriminablesAreExhausted } from "../../../common/utils/composable-responsibilities/discriminable/discriminable"; interface Dependencies { closePreferences: () => void; pageComposite: IComputedValue | undefined>; } const NonInjectedPreferences = observer( ({ closePreferences, pageComposite }: Dependencies) => { const composite = pageComposite.get(); return ( } className="Preferences" contentGaps={false} closeButtonProps={{ "data-testid": "close-preferences" }} back={closePreferences} > {composite ? ( toPreferenceItemHierarchy(composite) ) : (
No preferences found
)}
); }, ); const toPreferenceItemHierarchy = (composite: Composite) => { const value = composite.value; switch (value.kind) { case "block": { const Component = value.Component; return (
{toPreferenceItemHierarchy}
); } // eslint-disable-next-line no-fallthrough case "page": { const Component = value.Component; return ( {toPreferenceItemHierarchy} ); } case "tab-group": // eslint-disable-next-line no-fallthrough case "tab": { return {toPreferenceItemHierarchy}; } default: { throw checkThatAllDiscriminablesAreExhausted(value); } } }; export const Preferences = withInjectables( NonInjectedPreferences, { getProps: (di, props) => ({ closePreferences: di.inject(closePreferencesInjectable), pageComposite: di.inject(currentPreferenceTabCompositeInjectable), ...props, }), }, ); const defaultSeparator = () => ;