From 7d76753175751bf3d9d42af24a729f985231e857 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Thu, 3 Feb 2022 10:19:08 +0200 Subject: [PATCH] Simplify function signature to not solve quirks of caller Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen --- .../utils/is-allowed-resource.injectable.ts | 32 +++++-------------- src/extensions/renderer-api/k8s-api.ts | 5 ++- .../+workloads-overview/workloads.ts | 3 +- .../frames/cluster-frame/cluster-frame.tsx | 5 ++- 4 files changed, 18 insertions(+), 27 deletions(-) diff --git a/src/common/utils/is-allowed-resource.injectable.ts b/src/common/utils/is-allowed-resource.injectable.ts index a32360db3c..0b9d07d5bb 100644 --- a/src/common/utils/is-allowed-resource.injectable.ts +++ b/src/common/utils/is-allowed-resource.injectable.ts @@ -3,35 +3,19 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; -import type { IComputedValue } from "mobx"; import allowedResourcesInjectable from "../cluster-store/allowed-resources.injectable"; import type { KubeResource } from "../rbac"; -export type IsAllowedResource = (...resources: KubeResource[]) => boolean; - -interface Dependencies { - allowedResources: IComputedValue>; -} - -const isAllowedResource = ({ allowedResources }: Dependencies) => ( - (...resource) => { - const resources = resource.flat(2); - - if (resources.length === 0) { - // Fix for the fact that JS's Array.every method is not the same as ∀ - return true; - } - - const allowed = allowedResources.get(); - - return resources.every(resource => allowed.has(resource)); - } -) as IsAllowedResource; +export type IsAllowedResource = (resource: KubeResource) => boolean; +// TODO: This injectable obscures MobX de-referencing. Make it more apparent in usage. const isAllowedResourceInjectable = getInjectable({ - instantiate: (di) => isAllowedResource({ - allowedResources: di.inject(allowedResourcesInjectable), - }), + instantiate: (di) => { + const allowedResources = di.inject(allowedResourcesInjectable); + + return (resource: KubeResource) => allowedResources.get().has(resource); + }, + lifecycle: lifecycleEnum.singleton, }); diff --git a/src/extensions/renderer-api/k8s-api.ts b/src/extensions/renderer-api/k8s-api.ts index c2d5735e83..1f3829f0cc 100644 --- a/src/extensions/renderer-api/k8s-api.ts +++ b/src/extensions/renderer-api/k8s-api.ts @@ -5,11 +5,14 @@ import type { KubeResource } from "../../common/rbac"; import isAllowedResourceInjectable from "../../common/utils/is-allowed-resource.injectable"; import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; +import { castArray } from "lodash/fp"; export function isAllowedResource(resource: KubeResource | KubeResource[]) { const _isAllowedResource = asLegacyGlobalFunctionForExtensionApi(isAllowedResourceInjectable); - return _isAllowedResource(...[resource].flat()); + const resources = castArray(resource); + + return resources.every(x => _isAllowedResource(x)); } export { ResourceStack } from "../../common/k8s/resource-stack"; diff --git a/src/renderer/components/+workloads-overview/workloads.ts b/src/renderer/components/+workloads-overview/workloads.ts index da99834a86..f3db713e63 100644 --- a/src/renderer/components/+workloads-overview/workloads.ts +++ b/src/renderer/components/+workloads-overview/workloads.ts @@ -9,10 +9,11 @@ import type { KubeObject } from "../../../common/k8s-api/kube-object"; import { workloadURL } from "../../../common/routes"; import { ResourceNames } from "../../utils/rbac"; import type { NamespaceStore } from "../+namespaces/namespace-store/namespace.store"; +import type { IsAllowedResource } from "../../../common/utils/is-allowed-resource.injectable"; interface Dependencies { workloadStores: Map>; - isAllowedResource: (resource: KubeResource) => boolean; + isAllowedResource: IsAllowedResource; namespaceStore: NamespaceStore; } diff --git a/src/renderer/frames/cluster-frame/cluster-frame.tsx b/src/renderer/frames/cluster-frame/cluster-frame.tsx index 51ca40b908..9392b9f4c8 100755 --- a/src/renderer/frames/cluster-frame/cluster-frame.tsx +++ b/src/renderer/frames/cluster-frame/cluster-frame.tsx @@ -50,6 +50,7 @@ import type { History } from "history"; import type { IsAllowedResource } from "../../../common/utils/is-allowed-resource.injectable"; import isAllowedResourceInjectable from "../../../common/utils/is-allowed-resource.injectable"; import { HelmRoute } from "../../components/+helm/route"; +import type { KubeResource } from "../../../common/rbac"; interface Dependencies { history: History; @@ -78,7 +79,9 @@ class NonInjectedClusterFrame extends React.Component { } @computed get startUrl() { - return this.props.isAllowedResource("events", "nodes", "pods") + const resources : KubeResource[] = ["events", "nodes", "pods"]; + + return resources.every(x => this.props.isAllowedResource(x)) ? routes.clusterURL() : routes.workloadsURL(); }