2022-11-30 07:24:53 -06:00
|
|
|
import { css } from '@emotion/css';
|
|
|
|
import React, { useState } from 'react';
|
|
|
|
|
|
|
|
import { GrafanaTheme2 } from '@grafana/data';
|
2022-12-28 12:29:42 -06:00
|
|
|
import { useStyles2, TabsBar, Tab } from '@grafana/ui';
|
2022-11-30 07:24:53 -06:00
|
|
|
import { contextSrv } from 'app/core/services/context_srv';
|
|
|
|
|
|
|
|
import { Page } from '../../core/components/Page/Page';
|
|
|
|
import { AccessControlAction } from '../../types';
|
|
|
|
import { UsersListPageContent } from '../users/UsersListPage';
|
|
|
|
|
|
|
|
import { UserListAdminPageContent } from './UserListAdminPage';
|
|
|
|
|
|
|
|
export default function UserListPage() {
|
|
|
|
const hasAccessToAdminUsers = contextSrv.hasAccess(AccessControlAction.UsersRead, contextSrv.isGrafanaAdmin);
|
|
|
|
const hasAccessToOrgUsers = contextSrv.hasPermission(AccessControlAction.OrgUsersRead);
|
|
|
|
const styles = useStyles2(getStyles);
|
|
|
|
const [view, setView] = useState(() => {
|
|
|
|
if (hasAccessToAdminUsers) {
|
|
|
|
return 'admin';
|
|
|
|
} else if (hasAccessToOrgUsers) {
|
|
|
|
return 'org';
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
});
|
|
|
|
|
|
|
|
const showToggle = hasAccessToOrgUsers && hasAccessToAdminUsers;
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Page navId={'global-users'}>
|
|
|
|
{showToggle && (
|
2022-12-28 12:29:42 -06:00
|
|
|
<TabsBar className={styles.tabsMargin}>
|
|
|
|
<Tab label="All users" active={view === 'admin'} onChangeTab={() => setView('admin')} />
|
|
|
|
<Tab label="Organization users" active={view === 'org'} onChangeTab={() => setView('org')} />
|
|
|
|
</TabsBar>
|
2022-11-30 07:24:53 -06:00
|
|
|
)}
|
|
|
|
{view === 'admin' ? <UserListAdminPageContent /> : <UsersListPageContent />}
|
|
|
|
</Page>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-12-28 12:29:42 -06:00
|
|
|
const getStyles = (theme: GrafanaTheme2) => ({
|
|
|
|
tabsMargin: css({
|
|
|
|
marginBottom: theme.spacing(3),
|
|
|
|
}),
|
|
|
|
});
|