grafana/public/app/features/admin/UserListPage.tsx
Alex Khomenko c3d13a0e2f
Admin: Combine org and admin user pages (#59365)
* Admin: Add unified users page

* Admin: Combine admin and org components

* Admin: Add combined route

* Admin: Show combined page in nav

* Admin: Update translation

* Admin: Update description

* Admin: Update description on backend

* Admin: Update translations

* Admin: Use dynamic imports
2022-11-30 15:24:53 +02:00

53 lines
1.6 KiB
TypeScript

import { css } from '@emotion/css';
import React, { useState } from 'react';
import { GrafanaTheme2 } from '@grafana/data';
import { RadioButtonGroup, Field, useStyles2 } from '@grafana/ui';
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';
const views = [
{ value: 'admin', label: 'All organisations' },
{ value: 'org', label: 'This organisation' },
];
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 && (
<Field label={'Display list of users for'} className={styles.container}>
<RadioButtonGroup options={views} onChange={setView} value={view} />
</Field>
)}
{view === 'admin' ? <UserListAdminPageContent /> : <UsersListPageContent />}
</Page>
);
}
const getStyles = (theme: GrafanaTheme2) => {
return {
container: css`
margin: ${theme.spacing(2, 0)};
`,
};
};