import { useEffect, useMemo, useState } from 'react'; import { Trans, t } from '@grafana/i18n'; import { Button, Select, Stack } from '@grafana/ui'; import { CloseButton } from 'app/core/components/CloseButton/CloseButton'; import { ServiceAccountPicker } from 'app/core/components/Select/ServiceAccountPicker'; import { TeamPicker } from 'app/core/components/Select/TeamPicker'; import { UserPicker } from 'app/core/components/Select/UserPicker'; import { OrgRole } from 'app/types/acl'; import { Assignments, PermissionTarget, SetPermission } from './types'; export interface Props { title?: string; permissions: string[]; assignments: Assignments; onCancel: () => void; onAdd: (state: SetPermission) => void; } export const AddPermission = ({ title = t('access-control.add-permission.title', 'Add permission for'), permissions, assignments, onAdd, onCancel, }: Props) => { const [target, setPermissionTarget] = useState(PermissionTarget.None); const [teamUid, setTeamUid] = useState(''); const [userUid, setUserUid] = useState(''); const [builtInRole, setBuiltinRole] = useState(''); const [permission, setPermission] = useState(''); const targetOptions = useMemo(() => { const options = []; if (assignments.users) { options.push({ value: PermissionTarget.User, label: t('access-control.add-permission.user-label', 'User') }); } if (assignments.serviceAccounts) { options.push({ value: PermissionTarget.ServiceAccount, label: t('access-control.add-permission.serviceaccount-label', 'Service Account'), }); } if (assignments.teams) { options.push({ value: PermissionTarget.Team, label: t('access-control.add-permission.team-label', 'Team') }); } if (assignments.builtInRoles) { options.push({ value: PermissionTarget.BuiltInRole, label: t('access-control.add-permission.role-label', 'Role'), }); } return options; }, [assignments]); useEffect(() => { if (permissions.length > 0) { setPermission(permissions[0]); } }, [permissions]); const isValid = () => (target === PermissionTarget.Team && teamUid) || (target === PermissionTarget.User && userUid) || (target === PermissionTarget.ServiceAccount && userUid) || (PermissionTarget.BuiltInRole && OrgRole.hasOwnProperty(builtInRole)); return (
{title}
{ event.preventDefault(); onAdd({ userUid, teamUid, builtInRole, permission, target }); }} > r !== OrgRole.None) .map((r) => ({ value: r, label: r }))} onChange={(r) => setBuiltinRole(r.value || '')} width="auto" /> )}