import {Card, Flex, Label, Switch, Text} from '@gravity-ui/uikit';
import type {AvailablePermissionsConfig} from '../../../../types/api/acl';
import i18n from '../i18n';
import type {CommonRightsProps, RightsView} from '../shared';
import {RightsDescription, block, isLegacyRight} from '../shared';
interface RightsProps extends CommonRightsProps {
availablePermissions?: AvailablePermissionsConfig;
view: RightsView;
}
export function Rights({
rights,
availablePermissions,
handleChangeRightGetter,
inheritedRights,
view,
}: RightsProps) {
if (view === 'Groups') {
return (
);
}
return (
);
}
interface GroupRightsProps extends CommonRightsProps {
availablePermissions: AvailablePermissionsConfig['AccessRules'];
}
function GroupRights({
rights,
availablePermissions,
handleChangeRightGetter,
inheritedRights,
}: GroupRightsProps) {
if (!availablePermissions?.length) {
return i18n('description_no-group-permissions');
}
return (
{availablePermissions.map(({Name, Mask, AccessRights = [], AccessRules = []}) => {
const includedRights = AccessRights.concat(AccessRules);
const isLegacy = isLegacyRight(Mask);
const isActive = rights.get(Name);
const isInherited = inheritedRights.has(Name);
if (isLegacy && !isActive && !isInherited) {
return null;
}
return (
);
})}
);
}
interface GranularRightsProps extends CommonRightsProps {
availablePermissions: AvailablePermissionsConfig['AccessRights'];
}
function GranularRights({
rights,
availablePermissions,
handleChangeRightGetter,
inheritedRights,
}: GranularRightsProps) {
if (!availablePermissions?.length) {
return i18n('description_no-granular-permissions');
}
return (
{availablePermissions.map(({Name, Mask}) => (
))}
);
}
interface SingleRightProps {
right: string;
onUpdate: (value: boolean) => void;
active?: boolean;
includedRights?: string[];
description?: string;
inherited?: boolean;
}
function SingleRight({
right,
onUpdate,
active,
includedRights,
description,
inherited,
}: SingleRightProps) {
const onlyInherited = inherited && !active;
return (
{right}
{description && {description}}
{includedRights?.length ? (
{includedRights.map((right) => (
))}
) : null}
{inherited && }
{!onlyInherited && }
);
}