import React, { useCallback, useEffect, useState } from 'react';
import { List, Header } from '@buffetjs/custom';
import { Button } from '@buffetjs/core';
import { Duplicate, Pencil, Plus } from '@buffetjs/icons';
import matchSorter from 'match-sorter';
import { useIntl } from 'react-intl';
import { useHistory } from 'react-router-dom';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { ListButton, useGlobalContext, useQuery, useUserPermissions } from 'strapi-helper-plugin';
import adminPermissions from '../../../permissions';
import PageTitle from '../../../components/SettingsPageTitle';
import { EmptyRole, RoleListWrapper, RoleRow } from '../../../components/Roles';
import { useRolesList, useSettingsHeaderSearchContext } from '../../../hooks';
import UpgradePlanModal from '../../../components/UpgradePlanModal';
import BaselineAlignment from './BaselineAlignment';
const RoleListPage = () => {
const { formatMessage } = useIntl();
const { push } = useHistory();
const [isOpen, setIsOpen] = useState(false);
const { emitEvent, settingsBaseURL } = useGlobalContext();
const { roles, isLoading } = useRolesList();
const { toggleHeaderSearch } = useSettingsHeaderSearchContext();
const {
allowedActions: { canUpdate },
} = useUserPermissions(adminPermissions.settings.roles);
const query = useQuery();
const _q = decodeURIComponent(query.get('_q') || '');
const results = matchSorter(roles, _q, { keys: ['name', 'description'] });
useEffect(() => {
toggleHeaderSearch({ id: 'Settings.permissions.menu.link.roles.label' });
return () => {
toggleHeaderSearch();
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const handleGoTo = useCallback(
id => {
push(`${settingsBaseURL}/roles/${id}`);
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[settingsBaseURL]
);
const handleToggle = useCallback(e => {
e.preventDefault();
e.stopPropagation();
setIsOpen(prev => !prev);
}, []);
const handleToggleModalForCreatingRole = useCallback(e => {
e.preventDefault();
e.stopPropagation();
emitEvent('didShowRBACUpgradeModal');
setIsOpen(true);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const headerActions = [
{
label: formatMessage({
id: 'Settings.roles.list.button.add',
defaultMessage: 'Add new role',
}),
onClick: handleToggleModalForCreatingRole,
color: 'primary',
type: 'button',
icon: true,
},
];
const resultsCount = results.length;
return (
<>
1 ? '.plural' : '.singular'}`,
},
{ number: resultsCount }
)}
items={results}
isLoading={isLoading}
customRowComponent={role => (
handleGoTo(role.id)}
canUpdate={canUpdate}
links={[
{
icon: ,
onClick: handleToggle,
},
{
icon: canUpdate ? : null,
onClick: () => {
handleGoTo(role.id);
},
},
{
icon: ,
onClick: handleToggle,
},
]}
role={role}
/>
)}
/>
{!resultsCount && !isLoading && }
}
label={formatMessage({
id: 'Settings.roles.list.button.add',
defaultMessage: 'Add new role',
})}
/>
>
);
};
export default RoleListPage;