Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | 493x 493x 8x 59x 493x | /* * Copyright 2022 Harness Inc. All rights reserved. * Use of this source code is governed by the PolyForm Shield 1.0.0 license * that can be found in the licenses directory at the root of this repository, also available at * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt. */ import type React from 'react' import type { IconName } from '@harness/uicore' import type { ResourceType, ResourceCategory } from '@rbac/interfaces/ResourceType' import type { PermissionIdentifier } from '@rbac/interfaces/PermissionIdentifier' import type { ResourceScope } from '@rbac/interfaces/ResourceScope' import type { StringsMap } from 'framework/strings/StringsContext' export interface RbacResourceModalProps { searchTerm: string selectedData: string[] onSelectChange: (items: string[]) => void resourceScope: ResourceScope } export interface RbacResourceRendererProps { identifiers: string[] resourceScope: ResourceScope onResourceSelectionChange: (resourceType: ResourceType, isAdd: boolean, identifiers?: string[] | undefined) => void resourceType: ResourceType } export interface ResourceHandler { icon: IconName label: keyof StringsMap labelOverride?: keyof StringsMap | undefined permissionLabels?: { [key in PermissionIdentifier]?: string | React.ReactElement } addResourceModalBody?: (props: RbacResourceModalProps) => React.ReactElement staticResourceRenderer?: (props: RbacResourceRendererProps) => React.ReactElement category?: ResourceCategory } export interface ResourceCategoryHandler { icon: IconName label: keyof StringsMap resourceTypes?: Set<ResourceType> } class RbacFactory { private map: Map<ResourceType, ResourceHandler> private resourceCategoryMap: Map<ResourceCategory, ResourceCategoryHandler> constructor() { this.map = new Map() this.resourceCategoryMap = new Map() } registerResourceCategory(resourceCategory: ResourceCategory, handler: ResourceCategoryHandler): void { this.resourceCategoryMap.set(resourceCategory, handler) } registerResourceTypeHandler(resourceType: ResourceType, handler: ResourceHandler): void { this.map.set(resourceType, handler) } getResourceCategoryList(resources: ResourceType[]): Map<ResourceCategory | ResourceType, ResourceType[] | undefined> { const categoryMap: Map<ResourceCategory | ResourceType, ResourceType[] | undefined> = new Map() resources.map(resourceType => { const handler = this.map.get(resourceType) if (handler) { if (handler.category) { const resourceTypes = categoryMap.get(handler.category) if (resourceTypes) { categoryMap.set(handler.category, [...resourceTypes, resourceType]) } else categoryMap.set(handler.category, [resourceType]) } else { categoryMap.set(resourceType, undefined) } } }) return categoryMap } getResourceCategoryHandler(resourceCategory: ResourceCategory): ResourceCategoryHandler | undefined { return this.resourceCategoryMap.get(resourceCategory) } getResourceTypeHandler(resourceType: ResourceType): ResourceHandler | undefined { return this.map.get(resourceType) } getResourceTypeLabelKey(resourceType: ResourceType): keyof StringsMap | undefined { return this.map.get(resourceType)?.label } isRegisteredResourceType(resourceType: ResourceType): boolean { return this.map.has(resourceType) } } export default new RbacFactory() |