mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Move selected_namespaces storage to injectable
- And its initialization Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
08c1cd39c9
commit
7f6b946ce3
@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import assert from "assert";
|
||||||
|
import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-cluster.injectable";
|
||||||
|
import createStorageInjectable from "../../../renderer/utils/create-storage/create-storage.injectable";
|
||||||
|
|
||||||
|
const selectedNamespacesStorageInjectable = getInjectable({
|
||||||
|
id: "selected-namespaces-storage",
|
||||||
|
instantiate: (di) => {
|
||||||
|
const createStorage = di.inject(createStorageInjectable);
|
||||||
|
const cluster = di.inject(hostedClusterInjectable);
|
||||||
|
|
||||||
|
assert(cluster, "selectedNamespacesStorage is only available in certain environments");
|
||||||
|
|
||||||
|
const defaultSelectedNamespaces = cluster.allowedNamespaces.includes("default")
|
||||||
|
? ["default"]
|
||||||
|
: cluster.allowedNamespaces.slice(0, 1);
|
||||||
|
|
||||||
|
return createStorage("selected_namespaces", defaultSelectedNamespaces);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default selectedNamespacesStorageInjectable;
|
||||||
@ -5,13 +5,13 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { NamespaceStore } from "./store";
|
import { NamespaceStore } from "./store";
|
||||||
import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token";
|
import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token";
|
||||||
import createStorageInjectable from "../../utils/create-storage/create-storage.injectable";
|
|
||||||
import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable";
|
import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable";
|
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
import clusterConfiguredAccessibleNamespacesInjectable from "../../cluster/accessible-namespaces.injectable";
|
import clusterConfiguredAccessibleNamespacesInjectable from "../../cluster/accessible-namespaces.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
import selectedNamespacesStorageInjectable from "../../../features/namespace-filtering/renderer/storage.injectable";
|
||||||
|
|
||||||
const namespaceStoreInjectable = getInjectable({
|
const namespaceStoreInjectable = getInjectable({
|
||||||
id: "namespace-store",
|
id: "namespace-store",
|
||||||
@ -19,12 +19,11 @@ const namespaceStoreInjectable = getInjectable({
|
|||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
assert(di.inject(storesAndApisCanBeCreatedInjectable), "namespaceStore is only available in certain environments");
|
assert(di.inject(storesAndApisCanBeCreatedInjectable), "namespaceStore is only available in certain environments");
|
||||||
|
|
||||||
const createStorage = di.inject(createStorageInjectable);
|
|
||||||
const api = di.inject(namespaceApiInjectable);
|
const api = di.inject(namespaceApiInjectable);
|
||||||
|
|
||||||
return new NamespaceStore({
|
return new NamespaceStore({
|
||||||
context: di.inject(clusterFrameContextForClusterScopedResourcesInjectable),
|
context: di.inject(clusterFrameContextForClusterScopedResourcesInjectable),
|
||||||
storage: createStorage<string[] | undefined>("selected_namespaces", undefined),
|
storage: di.inject(selectedNamespacesStorageInjectable),
|
||||||
clusterConfiguredAccessibleNamespaces: di.inject(clusterConfiguredAccessibleNamespacesInjectable),
|
clusterConfiguredAccessibleNamespaces: di.inject(clusterConfiguredAccessibleNamespacesInjectable),
|
||||||
logger: di.inject(loggerInjectable),
|
logger: di.inject(loggerInjectable),
|
||||||
}, api);
|
}, api);
|
||||||
|
|||||||
@ -19,7 +19,7 @@ export interface NamespaceTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies extends KubeObjectStoreDependencies {
|
interface Dependencies extends KubeObjectStoreDependencies {
|
||||||
readonly storage: StorageLayer<string[] | undefined>;
|
readonly storage: StorageLayer<string[]>;
|
||||||
readonly clusterConfiguredAccessibleNamespaces: IComputedValue<string[]>;
|
readonly clusterConfiguredAccessibleNamespaces: IComputedValue<string[]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,21 +28,6 @@ export class NamespaceStore extends KubeObjectStore<Namespace, NamespaceApi> {
|
|||||||
super(dependencies, api);
|
super(dependencies, api);
|
||||||
makeObservable(this);
|
makeObservable(this);
|
||||||
autoBind(this);
|
autoBind(this);
|
||||||
|
|
||||||
// initialize allowed namespaces
|
|
||||||
const { allowedNamespaces } = this;
|
|
||||||
const selectedNamespaces = this.dependencies.storage.get(); // raw namespaces, undefined on first load
|
|
||||||
|
|
||||||
// return previously saved namespaces from local-storage (if any)
|
|
||||||
if (Array.isArray(selectedNamespaces)) {
|
|
||||||
this.selectNamespaces(selectedNamespaces.filter(namespace => allowedNamespaces.includes(namespace)));
|
|
||||||
} else if (allowedNamespaces.includes("default")) {
|
|
||||||
this.selectNamespaces(["default"]);
|
|
||||||
} else if (allowedNamespaces.length) {
|
|
||||||
this.selectNamespaces([allowedNamespaces[0]]);
|
|
||||||
} else {
|
|
||||||
this.selectNamespaces([]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public onContextChange(callback: (namespaces: string[]) => void, opts: { fireImmediately?: boolean } = {}): IReactionDisposer {
|
public onContextChange(callback: (namespaces: string[]) => void, opts: { fireImmediately?: boolean } = {}): IReactionDisposer {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user