import React, { useState, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { useAsyncFn } from 'react-use'; import { NavModelItem } from '@grafana/data'; import { Field, Input, Button, Legend, Alert } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { contextSrv } from 'app/core/core'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; import { OrgUser, AccessControlAction, OrgRole } from 'app/types'; import { OrgUsersTable } from './Users/OrgUsersTable'; import { getOrg, getOrgUsers, getUsersRoles, removeOrgUser, updateOrgName, updateOrgUserRole } from './api'; interface OrgNameDTO { orgName: string; } interface Props extends GrafanaRouteComponentProps<{ id: string }> {} const AdminEditOrgPage = ({ match }: Props) => { const orgId = parseInt(match.params.id, 10); const canWriteOrg = contextSrv.hasPermission(AccessControlAction.OrgsWrite); const canReadUsers = contextSrv.hasPermission(AccessControlAction.OrgUsersRead); const [users, setUsers] = useState([]); const [page, setPage] = useState(1); const [totalPages, setTotalPages] = useState(1); const [orgState, fetchOrg] = useAsyncFn(() => getOrg(orgId), []); const { handleSubmit, register, formState: { errors }, } = useForm(); const [, fetchOrgUsers] = useAsyncFn(async (page) => { const result = await getOrgUsers(orgId, page); if (contextSrv.licensedAccessControlEnabled()) { await getUsersRoles(orgId, result.orgUsers); } const totalPages = result?.perPage !== 0 ? Math.ceil(result.totalCount / result.perPage) : 0; setTotalPages(totalPages); setUsers(result.orgUsers); return result.orgUsers; }, []); useEffect(() => { fetchOrg(); fetchOrgUsers(page); }, [fetchOrg, fetchOrgUsers, page]); const onUpdateOrgName = async ({ orgName }: OrgNameDTO) => { await updateOrgName(orgName, orgId); }; const renderMissingPermissionMessage = () => ( You do not have permission to see users in this organization. To update this organization, contact your server administrator. ); const onPageChange = (toPage: number) => { setPage(toPage); }; const onRemoveUser = async (orgUser: OrgUser) => { await removeOrgUser(orgUser, orgId); fetchOrgUsers(page); }; const onRoleChange = async (role: OrgRole, orgUser: OrgUser) => { await updateOrgUserRole({ ...orgUser, role }, orgId); fetchOrgUsers(page); }; const pageNav: NavModelItem = { text: orgState?.value?.name ?? '', icon: 'shield', subTitle: 'Manage settings and user roles for an organization.', }; return ( <> Edit organization {orgState.value && (
)}
Organization users {!canReadUsers && renderMissingPermissionMessage()} {canReadUsers && !!users.length && ( )}
); }; export default AdminEditOrgPage;