mirror of
https://github.com/strapi/strapi.git
synced 2025-09-26 17:00:55 +00:00
add list of roles in a table
This commit is contained in:
parent
3f025d7759
commit
ce86b5f5f5
@ -1,10 +1,33 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Button, HeaderLayout, Layout, Main } from '@strapi/parts';
|
import {
|
||||||
import { AddIcon } from '@strapi/icons';
|
Button,
|
||||||
|
ContentLayout,
|
||||||
|
HeaderLayout,
|
||||||
|
IconButton,
|
||||||
|
Layout,
|
||||||
|
Main,
|
||||||
|
Table,
|
||||||
|
Tbody,
|
||||||
|
Text,
|
||||||
|
Tr,
|
||||||
|
Td,
|
||||||
|
Thead,
|
||||||
|
Th,
|
||||||
|
TableLabel,
|
||||||
|
} from '@strapi/parts';
|
||||||
|
import { AddIcon, EditIcon } from '@strapi/icons';
|
||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
import { useTracking, SettingsPageTitle, CheckPermissions } from '@strapi/helper-plugin';
|
import {
|
||||||
|
useTracking,
|
||||||
|
SettingsPageTitle,
|
||||||
|
CheckPermissions,
|
||||||
|
LoadingIndicatorPage,
|
||||||
|
useNotification,
|
||||||
|
} from '@strapi/helper-plugin';
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
|
import { useQuery } from 'react-query';
|
||||||
|
|
||||||
|
import { fetchData } from './utils/api';
|
||||||
import { getTrad } from '../../../utils';
|
import { getTrad } from '../../../utils';
|
||||||
import pluginId from '../../../pluginId';
|
import pluginId from '../../../pluginId';
|
||||||
import permissions from '../../../permissions';
|
import permissions from '../../../permissions';
|
||||||
@ -13,6 +36,15 @@ const RoleListPage = () => {
|
|||||||
const { trackUsage } = useTracking();
|
const { trackUsage } = useTracking();
|
||||||
const { formatMessage } = useIntl();
|
const { formatMessage } = useIntl();
|
||||||
const { push } = useHistory();
|
const { push } = useHistory();
|
||||||
|
const toggleNotification = useNotification();
|
||||||
|
|
||||||
|
const {
|
||||||
|
isLoading: isLoadingForData,
|
||||||
|
data: { roles },
|
||||||
|
isFetching,
|
||||||
|
} = useQuery('get-roles', () => fetchData(toggleNotification), { initialData: {} });
|
||||||
|
|
||||||
|
const isLoading = isLoadingForData || isFetching;
|
||||||
|
|
||||||
const handleNewRoleClick = () => {
|
const handleNewRoleClick = () => {
|
||||||
trackUsage('willCreateRole');
|
trackUsage('willCreateRole');
|
||||||
@ -24,6 +56,10 @@ const RoleListPage = () => {
|
|||||||
defaultMessage: 'Roles',
|
defaultMessage: 'Roles',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const handleClickEdit = id => {
|
||||||
|
push(`/settings/${pluginId}/roles/${id}`);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<SettingsPageTitle name={pageTitle} />
|
<SettingsPageTitle name={pageTitle} />
|
||||||
@ -55,6 +91,64 @@ const RoleListPage = () => {
|
|||||||
</CheckPermissions>
|
</CheckPermissions>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
{isLoading ? (
|
||||||
|
<LoadingIndicatorPage />
|
||||||
|
) : (
|
||||||
|
<ContentLayout>
|
||||||
|
<Table colCount={4}>
|
||||||
|
<Thead>
|
||||||
|
<Tr>
|
||||||
|
<Th>
|
||||||
|
<TableLabel>
|
||||||
|
{formatMessage({ id: getTrad('Roles.name'), defaultMessage: 'Name' })}
|
||||||
|
</TableLabel>
|
||||||
|
</Th>
|
||||||
|
<Th>
|
||||||
|
<TableLabel>
|
||||||
|
{formatMessage({
|
||||||
|
id: getTrad('Roles.descriptions'),
|
||||||
|
defaultMessage: 'Description',
|
||||||
|
})}
|
||||||
|
</TableLabel>
|
||||||
|
</Th>
|
||||||
|
<Th>
|
||||||
|
<TableLabel>
|
||||||
|
{formatMessage({
|
||||||
|
id: getTrad('Roles.users'),
|
||||||
|
defaultMessage: 'Users',
|
||||||
|
})}
|
||||||
|
</TableLabel>
|
||||||
|
</Th>
|
||||||
|
</Tr>
|
||||||
|
</Thead>
|
||||||
|
<Tbody>
|
||||||
|
{roles.map(role => (
|
||||||
|
<Tr key={role.name}>
|
||||||
|
<Td width="20%">
|
||||||
|
<Text>{role.name}</Text>
|
||||||
|
</Td>
|
||||||
|
<Td width="50%">
|
||||||
|
<Text>{role.description}</Text>
|
||||||
|
</Td>
|
||||||
|
<Td width="30%">
|
||||||
|
<Text>{role.nb_users} users</Text>
|
||||||
|
</Td>
|
||||||
|
<Td>
|
||||||
|
<CheckPermissions permissions={permissions.updateRole}>
|
||||||
|
<IconButton
|
||||||
|
onClick={() => handleClickEdit(role.id)}
|
||||||
|
noBorder
|
||||||
|
icon={<EditIcon />}
|
||||||
|
label="Edit"
|
||||||
|
/>
|
||||||
|
</CheckPermissions>
|
||||||
|
</Td>
|
||||||
|
</Tr>
|
||||||
|
))}
|
||||||
|
</Tbody>
|
||||||
|
</Table>
|
||||||
|
</ContentLayout>
|
||||||
|
)}
|
||||||
</Main>
|
</Main>
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,33 @@
|
|||||||
|
import { setupServer } from 'msw/node';
|
||||||
|
import { rest } from 'msw';
|
||||||
|
|
||||||
|
const handlers = [
|
||||||
|
rest.get('*/roles', (req, res, ctx) => {
|
||||||
|
return res(
|
||||||
|
ctx.delay(1000),
|
||||||
|
ctx.status(200),
|
||||||
|
ctx.json({
|
||||||
|
roles: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: 'Authenticated',
|
||||||
|
description: 'Default role given to authenticated user.',
|
||||||
|
type: 'authenticated',
|
||||||
|
nb_users: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
name: 'Public',
|
||||||
|
description: 'Default role given to unauthenticated user.',
|
||||||
|
type: 'public',
|
||||||
|
nb_users: 0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
|
||||||
|
const server = setupServer(...handlers);
|
||||||
|
|
||||||
|
export default server;
|
@ -0,0 +1,17 @@
|
|||||||
|
import { getRequestURL, axiosInstance } from '../../../../utils';
|
||||||
|
|
||||||
|
// eslint-disable-next-line import/prefer-default-export
|
||||||
|
export const fetchData = async toggleNotification => {
|
||||||
|
try {
|
||||||
|
const { data } = await axiosInstance.get(getRequestURL('roles'));
|
||||||
|
|
||||||
|
return data;
|
||||||
|
} catch (err) {
|
||||||
|
toggleNotification({
|
||||||
|
type: 'warning',
|
||||||
|
message: { id: 'notification.error' },
|
||||||
|
});
|
||||||
|
|
||||||
|
throw new Error('error');
|
||||||
|
}
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user