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

fix role-bindings/__tests__/dialog.test.tsx

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-04-11 11:21:09 -04:00
parent 668cac691e
commit 42f6b2de82
16 changed files with 110 additions and 58 deletions

View File

@ -6,6 +6,7 @@
import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api"; import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
import clusterRoleBindingApiInjectable from "./cluster-role-binding.api.injectable"; import clusterRoleBindingApiInjectable from "./cluster-role-binding.api.injectable";
import clusterRoleApiInjectable from "./cluster-role.api.injectable"; import clusterRoleApiInjectable from "./cluster-role.api.injectable";
import roleApiInjectable from "./role.api.injectable";
import serviceAccountApiInjectable from "./service-account.api.injectable"; import serviceAccountApiInjectable from "./service-account.api.injectable";
/** /**
@ -22,3 +23,8 @@ export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInject
* @deprecated use `di.inject(serviceAccountApiInjectable)` instead * @deprecated use `di.inject(serviceAccountApiInjectable)` instead
*/ */
export const serviceAccountApi = asLegacyGlobalForExtensionApi(serviceAccountApiInjectable); export const serviceAccountApi = asLegacyGlobalForExtensionApi(serviceAccountApiInjectable);
/**
* @deprecated use `di.inject(roleApiInjectable)` instead
*/
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);

View File

@ -3,6 +3,7 @@
* 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 type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
import { KubeApi } from "../kube-api"; import { KubeApi } from "../kube-api";
import type { KubeObjectScope, KubeObjectStatus } from "../kube-object"; import type { KubeObjectScope, KubeObjectStatus } from "../kube-object";
import { KubeObject } from "../kube-object"; import { KubeObject } from "../kube-object";
@ -34,6 +35,12 @@ export class Namespace extends KubeObject<NamespaceStatus, NamespaceSpec, KubeOb
} }
export class NamespaceApi extends KubeApi<Namespace> { export class NamespaceApi extends KubeApi<Namespace> {
constructor(opts: DerivedKubeApiOptions & IgnoredKubeApiOptions = {}) {
super({
...opts,
objectConstructor: Namespace,
});
}
} }
export function getMetricsForNamespace(namespace: string, selector = ""): Promise<PodMetricData> { export function getMetricsForNamespace(namespace: string, selector = ""): Promise<PodMetricData> {
@ -52,14 +59,6 @@ export function getMetricsForNamespace(namespace: string, selector = ""): Promis
}); });
} }
let namespacesApi: NamespaceApi; export const namespaceApi = isClusterPageContext()
? new NamespaceApi()
if (isClusterPageContext()) { : undefined as never;
namespacesApi = new NamespaceApi({
objectConstructor: Namespace,
});
}
export {
namespacesApi,
};

View File

@ -0,0 +1,19 @@
/**
* 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 { createStoresAndApisInjectionToken } from "../create-stores-apis.token";
import { RoleApi } from "./role.api";
const roleApiInjectable = getInjectable({
id: "role-api",
instantiate: (di) => {
assert(di.inject(createStoresAndApisInjectionToken), "roleApi is only available in certain environments");
return new RoleApi();
},
});
export default roleApiInjectable;

View File

@ -7,7 +7,6 @@ import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object";
import { KubeObject } from "../kube-object"; import { KubeObject } from "../kube-object";
import type { DerivedKubeApiOptions } from "../kube-api"; import type { DerivedKubeApiOptions } from "../kube-api";
import { KubeApi } from "../kube-api"; import { KubeApi } from "../kube-api";
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
import type { KubeJsonApiData } from "../kube-json-api"; import type { KubeJsonApiData } from "../kube-json-api";
import type { PolicyRule } from "./types/policy-rule"; import type { PolicyRule } from "./types/policy-rule";
@ -39,7 +38,3 @@ export class RoleApi extends KubeApi<Role, RoleData> {
}); });
} }
} }
export const roleApi = isClusterPageContext()
? new RoleApi()
: undefined as never;

View File

@ -5,6 +5,7 @@
import clusterRoleBindingApiInjectable from "../../common/k8s-api/endpoints/cluster-role-binding.api.injectable"; import clusterRoleBindingApiInjectable from "../../common/k8s-api/endpoints/cluster-role-binding.api.injectable";
import clusterRoleApiInjectable from "../../common/k8s-api/endpoints/cluster-role.api.injectable"; import clusterRoleApiInjectable from "../../common/k8s-api/endpoints/cluster-role.api.injectable";
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable"; import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable";
import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api"; import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
@ -19,6 +20,7 @@ export function isAllowedResource(...args: any[]) {
export const serviceAccountsApi = asLegacyGlobalForExtensionApi(serviceAccountApiInjectable); export const serviceAccountsApi = asLegacyGlobalForExtensionApi(serviceAccountApiInjectable);
export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable); export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable);
export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable); export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable);
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
export { ResourceStack } from "../../common/k8s/resource-stack"; export { ResourceStack } from "../../common/k8s/resource-stack";
export { apiManager } from "../../common/k8s-api/api-manager"; export { apiManager } from "../../common/k8s-api/api-manager";
@ -46,10 +48,10 @@ export { NetworkPolicy, networkPolicyApi } from "../../common/k8s-api/endpoints/
export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints/persistent-volume.api"; export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints/persistent-volume.api";
export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints/persistent-volume-claims.api"; export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints/persistent-volume-claims.api";
export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints/storage-class.api"; export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints/storage-class.api";
export { Namespace, namespacesApi } from "../../common/k8s-api/endpoints/namespaces.api"; export { Namespace, namespaceApi as namespacesApi } from "../../common/k8s-api/endpoints/namespaces.api";
export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints/events.api"; export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints/events.api";
export { ServiceAccount } from "../../common/k8s-api/endpoints/service-account.api"; export { ServiceAccount } from "../../common/k8s-api/endpoints/service-account.api";
export { Role, roleApi } from "../../common/k8s-api/endpoints/role.api"; export { Role } from "../../common/k8s-api/endpoints/role.api";
export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints/role-binding.api"; export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints/role-binding.api";
export { ClusterRole } from "../../common/k8s-api/endpoints/cluster-role.api"; export { ClusterRole } from "../../common/k8s-api/endpoints/cluster-role.api";
export { ClusterRoleBinding } from "../../common/k8s-api/endpoints/cluster-role-binding.api"; export { ClusterRoleBinding } from "../../common/k8s-api/endpoints/cluster-role-binding.api";

View File

@ -11,6 +11,7 @@ import clusterRoleBindingApiInjectable from "../../common/k8s-api/endpoints/clus
import clusterRoleApiInjectable from "../../common/k8s-api/endpoints/cluster-role.api.injectable"; import clusterRoleApiInjectable from "../../common/k8s-api/endpoints/cluster-role.api.injectable";
import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable"; import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable";
import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api"; import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
export function isAllowedResource(resource: KubeResource | KubeResource[]) { export function isAllowedResource(resource: KubeResource | KubeResource[]) {
const resources = castArray(resource); const resources = castArray(resource);
@ -28,6 +29,7 @@ export function isAllowedResource(resource: KubeResource | KubeResource[]) {
export const serviceAccountsApi = asLegacyGlobalForExtensionApi(serviceAccountApiInjectable); export const serviceAccountsApi = asLegacyGlobalForExtensionApi(serviceAccountApiInjectable);
export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable); export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable);
export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable); export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable);
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
export { export {
BaseKubeJsonApiObjectMetadata, BaseKubeJsonApiObjectMetadata,
@ -58,10 +60,10 @@ export { NetworkPolicy, networkPolicyApi } from "../../common/k8s-api/endpoints"
export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints"; export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints";
export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints"; export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints";
export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints"; export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints";
export { Namespace, namespacesApi } from "../../common/k8s-api/endpoints"; export { Namespace, namespaceApi as namespacesApi } from "../../common/k8s-api/endpoints";
export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints"; export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints";
export { ServiceAccount } from "../../common/k8s-api/endpoints"; export { ServiceAccount } from "../../common/k8s-api/endpoints";
export { Role, roleApi } from "../../common/k8s-api/endpoints"; export { Role } from "../../common/k8s-api/endpoints";
export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints"; export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints";
export { ClusterRole } from "../../common/k8s-api/endpoints"; export { ClusterRole } from "../../common/k8s-api/endpoints";
export { ClusterRoleBinding } from "../../common/k8s-api/endpoints"; export { ClusterRoleBinding } from "../../common/k8s-api/endpoints";
@ -102,7 +104,7 @@ export type { PersistentVolumeClaimStore as VolumeClaimStore } from "../../rende
export type { StorageClassStore } from "../../renderer/components/+storage-classes/storage-class.store"; export type { StorageClassStore } from "../../renderer/components/+storage-classes/storage-class.store";
export type { NamespaceStore } from "../../renderer/components/+namespaces/namespace-store/namespace.store"; export type { NamespaceStore } from "../../renderer/components/+namespaces/namespace-store/namespace.store";
export type { ServiceAccountStore as ServiceAccountsStore } from "../../renderer/components/+user-management/+service-accounts/store"; export type { ServiceAccountStore as ServiceAccountsStore } from "../../renderer/components/+user-management/+service-accounts/store";
export type { RolesStore } from "../../renderer/components/+user-management/+roles/store"; export type { RoleStore as RolesStore } from "../../renderer/components/+user-management/+roles/store";
export type { RoleBindingStore as RoleBindingsStore } from "../../renderer/components/+user-management/+role-bindings/store"; export type { RoleBindingStore as RoleBindingsStore } from "../../renderer/components/+user-management/+role-bindings/store";
export type { CRDStore } from "../../renderer/components/+custom-resources/crd.store"; export type { CRDStore } from "../../renderer/components/+custom-resources/crd.store";
export type { CRDResourceStore } from "../../renderer/components/+custom-resources/crd-resource.store"; export type { CRDResourceStore } from "../../renderer/components/+custom-resources/crd-resource.store";

View File

@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
import { NamespaceStore } from "./namespace.store"; import { NamespaceStore } from "./namespace.store";
import apiManagerInjectable from "../../kube-object-menu/dependencies/api-manager.injectable"; import apiManagerInjectable from "../../kube-object-menu/dependencies/api-manager.injectable";
import createStorageInjectable from "../../../utils/create-storage/create-storage.injectable"; import createStorageInjectable from "../../../utils/create-storage/create-storage.injectable";
import { namespacesApi } from "../../../../common/k8s-api/endpoints"; import { namespaceApi } from "../../../../common/k8s-api/endpoints";
const namespaceStoreInjectable = getInjectable({ const namespaceStoreInjectable = getInjectable({
id: "namespace-store", id: "namespace-store",
@ -21,7 +21,7 @@ const namespaceStoreInjectable = getInjectable({
const namespaceStore = new NamespaceStore({ const namespaceStore = new NamespaceStore({
storage, storage,
}, namespacesApi); }, namespaceApi);
const apiManager = di.inject(apiManagerInjectable); const apiManager = di.inject(apiManagerInjectable);

View File

@ -21,7 +21,7 @@ import { Notifications } from "../../notifications";
import { Select } from "../../select"; import { Select } from "../../select";
import { Wizard, WizardStep } from "../../wizard"; import { Wizard, WizardStep } from "../../wizard";
import { clusterRoleBindingStore } from "./legacy-store"; import { clusterRoleBindingStore } from "./legacy-store";
import { clusterRolesStore } from "../+cluster-roles/legacy-store"; import { clusterRoleStore } from "../+cluster-roles/legacy-store";
import { ObservableHashSet, nFircate } from "../../../utils"; import { ObservableHashSet, nFircate } from "../../../utils";
import { Input } from "../../input"; import { Input } from "../../input";
import { TooltipPosition } from "../../tooltip"; import { TooltipPosition } from "../../tooltip";
@ -106,7 +106,7 @@ export class ClusterRoleBindingDialog extends React.Component<ClusterRoleBinding
return this.reset(); return this.reset();
} }
this.selectedRoleRef = clusterRolesStore this.selectedRoleRef = clusterRoleStore
.items .items
.find(item => item.getName() === binding.roleRef.name); .find(item => item.getName() === binding.roleRef.name);
this.bindingName = binding.getName(); this.bindingName = binding.getName();
@ -164,7 +164,7 @@ export class ClusterRoleBindingDialog extends React.Component<ClusterRoleBinding
themeName="light" themeName="light"
placeholder="Select cluster role ..." placeholder="Select cluster role ..."
isDisabled={this.isEditing} isDisabled={this.isEditing}
options={clusterRolesStore.items.slice()} options={clusterRoleStore.items.slice()}
value={this.selectedRoleRef} value={this.selectedRoleRef}
autoFocus={!this.isEditing} autoFocus={!this.isEditing}
formatOptionLabel={value => ( formatOptionLabel={value => (

View File

@ -15,7 +15,7 @@ import { showDetails } from "../../kube-detail-params";
import { SubTitle } from "../../layout/sub-title"; import { SubTitle } from "../../layout/sub-title";
import { Notifications } from "../../notifications"; import { Notifications } from "../../notifications";
import { Wizard, WizardStep } from "../../wizard"; import { Wizard, WizardStep } from "../../wizard";
import { clusterRolesStore } from "./legacy-store"; import { clusterRoleStore } from "./legacy-store";
export interface AddClusterRoleDialogProps extends Partial<DialogProps> { export interface AddClusterRoleDialogProps extends Partial<DialogProps> {
} }
@ -45,7 +45,7 @@ export class AddClusterRoleDialog extends React.Component<AddClusterRoleDialogPr
createRole = async () => { createRole = async () => {
try { try {
const role = await clusterRolesStore.create({ name: this.clusterRoleName }); const role = await clusterRoleStore.create({ name: this.clusterRoleName });
showDetails(role.selfLink); showDetails(role.selfLink);
this.reset(); this.reset();

View File

@ -9,4 +9,4 @@ import clusterRoleStoreInjectable from "./store.injectable";
/** /**
* @deprecated use `di.inject(clusterRoleStoreInjectable)` instead * @deprecated use `di.inject(clusterRoleStoreInjectable)` instead
*/ */
export const clusterRolesStore = asLegacyGlobalForExtensionApi(clusterRoleStoreInjectable); export const clusterRoleStore = asLegacyGlobalForExtensionApi(clusterRoleStoreInjectable);

View File

@ -10,7 +10,7 @@ import React from "react";
import { KubeObjectListLayout } from "../../kube-object-list-layout"; import { KubeObjectListLayout } from "../../kube-object-list-layout";
import { KubeObjectStatusIcon } from "../../kube-object-status-icon"; import { KubeObjectStatusIcon } from "../../kube-object-status-icon";
import { AddClusterRoleDialog } from "./add-dialog"; import { AddClusterRoleDialog } from "./add-dialog";
import { clusterRolesStore } from "./legacy-store"; import { clusterRoleStore } from "./legacy-store";
import { SiblingsInTabLayout } from "../../layout/siblings-in-tab-layout"; import { SiblingsInTabLayout } from "../../layout/siblings-in-tab-layout";
import { KubeObjectAge } from "../../kube-object/age"; import { KubeObjectAge } from "../../kube-object/age";
@ -29,7 +29,7 @@ export class ClusterRoles extends React.Component {
isConfigurable isConfigurable
tableId="access_cluster_roles" tableId="access_cluster_roles"
className="ClusterRoles" className="ClusterRoles"
store={clusterRolesStore} store={clusterRoleStore}
sortingCallbacks={{ sortingCallbacks={{
[columnId.name]: clusterRole => clusterRole.getName(), [columnId.name]: clusterRole => clusterRole.getName(),
[columnId.age]: clusterRole => -clusterRole.getCreationTimestamp(), [columnId.age]: clusterRole => -clusterRole.getCreationTimestamp(),

View File

@ -5,16 +5,14 @@
import userEvent from "@testing-library/user-event"; import userEvent from "@testing-library/user-event";
import React from "react"; import React from "react";
import { clusterRolesStore } from "../../+cluster-roles/store";
import { ClusterRole } from "../../../../../common/k8s-api/endpoints"; import { ClusterRole } from "../../../../../common/k8s-api/endpoints";
import { RoleBindingDialog } from "../dialog"; import { RoleBindingDialog } from "../dialog";
import { getDiForUnitTesting } from "../../../../getDiForUnitTesting"; import { getDiForUnitTesting } from "../../../../getDiForUnitTesting";
import type { DiRender } from "../../../test-utils/renderFor"; import type { DiRender } from "../../../test-utils/renderFor";
import { renderFor } from "../../../test-utils/renderFor"; import { renderFor } from "../../../test-utils/renderFor";
import directoryForUserDataInjectable import directoryForUserDataInjectable from "../../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
from "../../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import clusterRoleStoreInjectable from "../../+cluster-roles/store.injectable";
import createStoresAndApisInjectable from "../../../../create-stores-apis.injectable";
jest.mock("../../+cluster-roles/store");
describe("RoleBindingDialog tests", () => { describe("RoleBindingDialog tests", () => {
let render: DiRender; let render: DiRender;
@ -22,13 +20,16 @@ describe("RoleBindingDialog tests", () => {
beforeEach(async () => { beforeEach(async () => {
const di = getDiForUnitTesting({ doGeneralOverrides: true }); const di = getDiForUnitTesting({ doGeneralOverrides: true });
di.override(createStoresAndApisInjectable, () => true);
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
await di.runSetups(); await di.runSetups();
render = renderFor(di); render = renderFor(di);
clusterRolesStore.items.replace([ const store = di.inject(clusterRoleStoreInjectable);
store.items.replace([
new ClusterRole({ new ClusterRole({
apiVersion: "rbac.authorization.k8s.io/v1", apiVersion: "rbac.authorization.k8s.io/v1",
kind: "ClusterRole", kind: "ClusterRole",

View File

@ -9,8 +9,8 @@ import { computed, observable, makeObservable, action } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import React from "react"; import React from "react";
import { rolesStore } from "../+roles/store"; import { roleStore } from "../+roles/legacy-store";
import { serviceAccountsStore } from "../+service-accounts/store"; import { serviceAccountStore } from "../+service-accounts/legacy-store";
import { NamespaceSelect } from "../../+namespaces/namespace-select"; import { NamespaceSelect } from "../../+namespaces/namespace-select";
import type { ClusterRole, Role, RoleBinding, ServiceAccount } from "../../../../common/k8s-api/endpoints"; import type { ClusterRole, Role, RoleBinding, ServiceAccount } from "../../../../common/k8s-api/endpoints";
import { roleApi } from "../../../../common/k8s-api/endpoints"; import { roleApi } from "../../../../common/k8s-api/endpoints";
@ -24,7 +24,7 @@ import { Notifications } from "../../notifications";
import { Select } from "../../select"; import { Select } from "../../select";
import { Wizard, WizardStep } from "../../wizard"; import { Wizard, WizardStep } from "../../wizard";
import { roleBindingStore } from "./store"; import { roleBindingStore } from "./store";
import { clusterRolesStore } from "../+cluster-roles/store"; import { clusterRoleStore } from "../+cluster-roles/legacy-store";
import { Input } from "../../input"; import { Input } from "../../input";
import { ObservableHashSet, nFircate } from "../../../utils"; import { ObservableHashSet, nFircate } from "../../../utils";
import type { Subject } from "../../../../common/k8s-api/endpoints/types/subject"; import type { Subject } from "../../../../common/k8s-api/endpoints/types/subject";
@ -96,9 +96,9 @@ export class RoleBindingDialog extends React.Component<RoleBindingDialogProps> {
} }
@computed get roleRefOptions(): (Role | ClusterRole)[] { @computed get roleRefOptions(): (Role | ClusterRole)[] {
const roles = rolesStore.items const roles = roleStore.items
.filter(role => role.getNs() === this.bindingNamespace); .filter(role => role.getNs() === this.bindingNamespace);
const clusterRoles = clusterRolesStore.items; const clusterRoles = clusterRoleStore.items;
return [ return [
...roles, ...roles,
@ -117,8 +117,8 @@ export class RoleBindingDialog extends React.Component<RoleBindingDialogProps> {
this.selectedRoleRef = ( this.selectedRoleRef = (
binding.roleRef.kind === roleApi.kind binding.roleRef.kind === roleApi.kind
? rolesStore.items.find(findByRoleRefName) ? roleStore.items.find(findByRoleRefName)
: clusterRolesStore.items.find(findByRoleRefName) : clusterRoleStore.items.find(findByRoleRefName)
); );
this.bindingName = binding.getName(); this.bindingName = binding.getName();
@ -128,7 +128,7 @@ export class RoleBindingDialog extends React.Component<RoleBindingDialogProps> {
const accountNames = new Set(saSubjects.map(acc => acc.name)); const accountNames = new Set(saSubjects.map(acc => acc.name));
this.selectedAccounts.replace( this.selectedAccounts.replace(
serviceAccountsStore.items serviceAccountStore.items
.filter(sa => accountNames.has(sa.getName())), .filter(sa => accountNames.has(sa.getName())),
); );
this.selectedUsers.replace(uSubjects.map(user => user.name)); this.selectedUsers.replace(uSubjects.map(user => user.name));
@ -234,7 +234,7 @@ export class RoleBindingDialog extends React.Component<RoleBindingDialogProps> {
isMulti isMulti
themeName="light" themeName="light"
placeholder="Select service accounts ..." placeholder="Select service accounts ..."
options={serviceAccountsStore.items} options={serviceAccountStore.items}
isOptionSelected={account => this.selectedAccounts.has(account)} isOptionSelected={account => this.selectedAccounts.has(account)}
formatOptionLabel={account => ( formatOptionLabel={account => (
<> <>

View File

@ -0,0 +1,12 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { asLegacyGlobalForExtensionApi } from "../../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
import roleStoreInjectable from "./store.injectable";
/**
* @deprecated use `di.inject(roleStoreInjectable)` instead
*/
export const roleStore = asLegacyGlobalForExtensionApi(roleStoreInjectable);

View File

@ -0,0 +1,27 @@
/**
* 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 roleApiInjectable from "../../../../common/k8s-api/endpoints/role.api.injectable";
import createStoresAndApisInjectable from "../../../create-stores-apis.injectable";
import apiManagerInjectable from "../../kube-object-menu/dependencies/api-manager.injectable";
import { RoleStore } from "./store";
const roleStoreInjectable = getInjectable({
id: "role-store",
instantiate: (di) => {
assert(di.inject(createStoresAndApisInjectable), "roleStore is only available in certain environments");
const api = di.inject(roleApiInjectable);
const apiManager = di.inject(apiManagerInjectable);
const store = new RoleStore(api);
apiManager.registerStore(store);
return store;
},
});
export default roleStoreInjectable;

View File

@ -2,13 +2,10 @@
* Copyright (c) OpenLens Authors. All rights reserved. * Copyright (c) OpenLens Authors. All rights reserved.
* 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 { apiManager } from "../../../../common/k8s-api/api-manager";
import type { Role, RoleApi, RoleData } from "../../../../common/k8s-api/endpoints"; import type { Role, RoleApi, RoleData } from "../../../../common/k8s-api/endpoints";
import { roleApi } from "../../../../common/k8s-api/endpoints";
import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store";
import { isClusterPageContext } from "../../../utils";
export class RolesStore extends KubeObjectStore<Role, RoleApi, RoleData> { export class RoleStore extends KubeObjectStore<Role, RoleApi, RoleData> {
protected sortItems(items: Role[]) { protected sortItems(items: Role[]) {
return super.sortItems(items, [ return super.sortItems(items, [
role => role.kind, role => role.kind,
@ -16,11 +13,3 @@ export class RolesStore extends KubeObjectStore<Role, RoleApi, RoleData> {
]); ]);
} }
} }
export const rolesStore = isClusterPageContext()
? new RolesStore(roleApi)
: undefined as never;
if (isClusterPageContext()) {
apiManager.registerStore(rolesStore);
}