2022-01-07 10:59:14 -06:00
|
|
|
import React, { useEffect } from 'react';
|
2020-04-27 03:00:17 -05:00
|
|
|
import useAsyncFn from 'react-use/lib/useAsyncFn';
|
2022-04-22 08:33:13 -05:00
|
|
|
|
2022-10-17 04:10:10 -05:00
|
|
|
import { getBackendSrv, isFetchError } from '@grafana/runtime';
|
2022-04-22 08:33:13 -05:00
|
|
|
import { LinkButton } from '@grafana/ui';
|
2022-07-06 10:00:56 -05:00
|
|
|
import { Page } from 'app/core/components/Page/Page';
|
2021-11-18 07:10:38 -06:00
|
|
|
import { contextSrv } from 'app/core/services/context_srv';
|
|
|
|
import { AccessControlAction } from 'app/types';
|
2022-04-22 08:33:13 -05:00
|
|
|
|
|
|
|
import { AdminOrgsTable } from './AdminOrgsTable';
|
2020-04-27 03:00:17 -05:00
|
|
|
|
|
|
|
const deleteOrg = async (orgId: number) => {
|
|
|
|
return await getBackendSrv().delete('/api/orgs/' + orgId);
|
|
|
|
};
|
|
|
|
|
|
|
|
const getOrgs = async () => {
|
|
|
|
return await getBackendSrv().get('/api/orgs');
|
|
|
|
};
|
|
|
|
|
2022-10-17 04:10:10 -05:00
|
|
|
const getErrorMessage = (error: Error) => {
|
|
|
|
return isFetchError(error) ? error?.data?.message : 'An unexpected error happened.';
|
2021-11-18 07:10:38 -06:00
|
|
|
};
|
|
|
|
|
2022-01-07 10:59:14 -06:00
|
|
|
export default function AdminListOrgsPages() {
|
2020-04-27 03:00:17 -05:00
|
|
|
const [state, fetchOrgs] = useAsyncFn(async () => await getOrgs(), []);
|
2021-11-18 07:10:38 -06:00
|
|
|
const canCreateOrg = contextSrv.hasPermission(AccessControlAction.OrgsCreate);
|
2020-07-15 02:35:00 -05:00
|
|
|
|
2020-04-27 03:00:17 -05:00
|
|
|
useEffect(() => {
|
|
|
|
fetchOrgs();
|
2021-03-25 06:42:14 -05:00
|
|
|
}, [fetchOrgs]);
|
2020-04-27 03:00:17 -05:00
|
|
|
|
|
|
|
return (
|
2022-09-23 10:08:08 -05:00
|
|
|
<Page navId="global-orgs">
|
2020-04-27 03:00:17 -05:00
|
|
|
<Page.Contents>
|
|
|
|
<>
|
|
|
|
<div className="page-action-bar">
|
2020-07-15 02:35:00 -05:00
|
|
|
<div className="page-action-bar__spacer" />
|
2021-11-18 07:10:38 -06:00
|
|
|
<LinkButton icon="plus" href="org/new" disabled={!canCreateOrg}>
|
2020-04-27 03:00:17 -05:00
|
|
|
New org
|
|
|
|
</LinkButton>
|
|
|
|
</div>
|
2021-11-18 07:10:38 -06:00
|
|
|
{state.error && getErrorMessage(state.error)}
|
2020-04-27 03:00:17 -05:00
|
|
|
{state.loading && 'Fetching organizations'}
|
|
|
|
{state.value && (
|
|
|
|
<AdminOrgsTable
|
|
|
|
orgs={state.value}
|
2021-01-20 00:59:48 -06:00
|
|
|
onDelete={(orgId) => {
|
2020-07-15 02:35:00 -05:00
|
|
|
deleteOrg(orgId).then(() => fetchOrgs());
|
2020-04-27 03:00:17 -05:00
|
|
|
}}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
</>
|
|
|
|
</Page.Contents>
|
|
|
|
</Page>
|
|
|
|
);
|
2022-01-07 10:59:14 -06:00
|
|
|
}
|