| /** |
| * @license |
| * Copyright (C) 2020 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * @fileOverview This file contains interfaces shared between gr-repo-access |
| * and nested elements (gr-access-section, gr-permission) |
| */ |
| |
| import { |
| AccessSectionInfo, |
| GroupInfo, |
| PermissionInfo, |
| PermissionRuleInfo, |
| } from '../../../types/common'; |
| import {PermissionArrayItem} from '../../../utils/access-util'; |
| |
| export type PrimitiveValue = string | boolean | number | undefined; |
| |
| export interface PropertyTreeNode { |
| [propName: string]: PropertyTreeNode | PrimitiveValue; |
| deleted?: boolean; |
| modified?: boolean; |
| added?: boolean; |
| updatedId?: string; |
| } |
| |
| /** |
| * EditableLocalAccessSectionInfo is exactly the same as LocalAccessSectionInfo, |
| * but with additional properties: each nested object additionally implements |
| * interface PropertyTreeNode |
| */ |
| |
| export type EditableLocalAccessSectionInfo = { |
| [ref: string]: EditableAccessSectionInfo; |
| }; |
| |
| export interface EditableAccessSectionInfo |
| extends AccessSectionInfo, |
| PropertyTreeNode { |
| permissions: EditableAccessPermissionsMap; |
| } |
| |
| export type EditableAccessPermissionsMap = { |
| [permissionName: string]: EditablePermissionInfo; |
| }; |
| |
| export interface EditablePermissionInfo |
| extends PermissionInfo, |
| PropertyTreeNode { |
| rules: EditablePermissionInfoRules; |
| } |
| |
| export type EditablePermissionInfoRules = { |
| [groupUUID: string]: EditablePermissionRuleInfo; |
| }; |
| |
| export interface EditablePermissionRuleInfo |
| extends PermissionRuleInfo, |
| PropertyTreeNode {} |
| |
| export type PermissionAccessSection = PermissionArrayItem< |
| EditableAccessSectionInfo |
| >; |
| |
| export interface NewlyAddedGroupInfo { |
| name: string; |
| } |
| export type EditableProjectAccessGroups = { |
| [uuid: string]: GroupInfo | NewlyAddedGroupInfo; |
| }; |