blob: 40a1e0aefff326e9cf9a033ccc4bafe68405ce21 [file] [log] [blame]
/**
* @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;
};