import React, { FC, useState, useEffect } from 'react'; import Page from 'app/core/components/Page/Page'; import { useSelector } from 'react-redux'; import { StoreState, OrgUser } from 'app/types'; import { getNavModel } from 'app/core/selectors/navModel'; import UsersTable from '../users/UsersTable'; import { useAsyncFn } from 'react-use'; import { getBackendSrv } from '@grafana/runtime'; import { UrlQueryValue } from '@grafana/data'; import { Form, Field, Input, Button, Legend } from '@grafana/ui'; import { css } from '@emotion/css'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; interface OrgNameDTO { orgName: string; } const getOrg = async (orgId: UrlQueryValue) => { return await getBackendSrv().get('/api/orgs/' + orgId); }; const getOrgUsers = async (orgId: UrlQueryValue) => { return await getBackendSrv().get('/api/orgs/' + orgId + '/users'); }; const updateOrgUserRole = async (orgUser: OrgUser, orgId: UrlQueryValue) => { await getBackendSrv().patch('/api/orgs/' + orgId + '/users/' + orgUser.userId, orgUser); }; const removeOrgUser = async (orgUser: OrgUser, orgId: UrlQueryValue) => { return await getBackendSrv().delete('/api/orgs/' + orgId + '/users/' + orgUser.userId); }; interface Props extends GrafanaRouteComponentProps<{ id: string }> {} export const AdminEditOrgPage: FC = ({ match }) => { const navIndex = useSelector((state: StoreState) => state.navIndex); const navModel = getNavModel(navIndex, 'global-orgs'); const orgId = parseInt(match.params.id, 10); const [users, setUsers] = useState([]); const [orgState, fetchOrg] = useAsyncFn(() => getOrg(orgId), []); const [, fetchOrgUsers] = useAsyncFn(() => getOrgUsers(orgId), []); useEffect(() => { fetchOrg(); fetchOrgUsers().then((res) => setUsers(res)); }, [fetchOrg, fetchOrgUsers]); const updateOrgName = async (name: string) => { return await getBackendSrv().put('/api/orgs/' + orgId, { ...orgState.value, name }); }; return ( <> Edit organization {orgState.value && (
await updateOrgName(values.orgName)} > {({ register, errors }) => ( <> )}
)}
Organization users {!!users.length && ( { updateOrgUserRole({ ...orgUser, role }, orgId); setUsers( users.map((user) => { if (orgUser.userId === user.userId) { return { ...orgUser, role }; } return user; }) ); fetchOrgUsers(); }} onRemoveUser={(orgUser) => { removeOrgUser(orgUser, orgId); setUsers(users.filter((user) => orgUser.userId !== user.userId)); fetchOrgUsers(); }} /> )}
); }; export default AdminEditOrgPage;