- added filter to users table;

- added auto reload of users table  on user added;
This commit is contained in:
Vitalii Kiiko
2025-03-10 11:01:25 +01:00
parent 7fb6587448
commit d9aa0b6c23
4 changed files with 30 additions and 10 deletions

View File

@@ -121,7 +121,7 @@ const Login = () => {
hotkeys('command+x,ctrl+x', function(){ hotkeys('command+x,ctrl+x', function(){
window.location.replace('/loginadmin') window.location.replace('/loginadmin')
}); });
hotkeys('command+shift+x,ctrl+shift+x', function(){ hotkeys('command+option+x,ctrl+alt+x', function(){
window.location.replace('/confidi') window.location.replace('/confidi')
}); });
}, []); }, []);

View File

@@ -80,7 +80,7 @@ const LoginAdmin = () => {
}, [token]); }, [token]);
useEffect(() => { useEffect(() => {
hotkeys('command+shift+x,ctrl+shift+x', function(){ hotkeys('command+option+x,ctrl+alt+x', function(){
window.location.replace('/confidi') window.location.replace('/confidi')
}); });
}, []); }, []);

View File

@@ -26,23 +26,25 @@ import ProperBandoLabel from '../../../../components/ProperBandoLabel';
import translationStrings from '../../../../translationStringsForComponents'; import translationStrings from '../../../../translationStringsForComponents';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
const AllUsersTable = () => { const AllUsersTable = ({ updaterString = '' }) => {
const users = useStore().main.users(); const users = useStore().main.users();
const [filters, setFilters] = useState(null); const [filters, setFilters] = useState(null);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [statuses, setStatuses] = useState([]); const [statuses, setStatuses] = useState([]);
const [roles, setRoles] = useState([]);
useEffect(() => { useEffect(() => {
if (!loading) { if (!loading) {
setLoading(true); setLoading(true);
UserService.getUsers(getCallback, errGetCallbacks); UserService.getUsers(getCallback, errGetCallbacks);
} }
}, []); }, [updaterString]);
const getCallback = (data) => { const getCallback = (data) => {
if (data.status === 'SUCCESS') { if (data.status === 'SUCCESS') {
storeSet.main.users(getFormattedData(data.data)); storeSet.main.users(getFormattedData(data.data));
setStatuses(uniq(data.data.map(o => o.status))) setStatuses(uniq(data.data.map(o => o.status)));
setRoles(uniq(data.data.map(o => o.role.roleName)));
initFilters(); initFilters();
} }
setLoading(false); setLoading(false);
@@ -56,7 +58,8 @@ const AllUsersTable = () => {
return data return data
.filter(o => [ .filter(o => [
'ROLE_SUPER_ADMIN', 'ROLE_PRE_INSTRUCTOR', 'ROLE_INSTRUCTOR_MANAGER', 'ROLE_CONFIDI' 'ROLE_SUPER_ADMIN', 'ROLE_PRE_INSTRUCTOR', 'ROLE_INSTRUCTOR_MANAGER', 'ROLE_CONFIDI'
].includes(o.role.roleType)); ].includes(o.role.roleType))
.map(o => ({...o, roleName: o.role.roleName}));
}; };
const clearFilter = () => { const clearFilter = () => {
@@ -73,7 +76,8 @@ const AllUsersTable = () => {
lastLogin: { lastLogin: {
operator: FilterOperator.AND, operator: FilterOperator.AND,
constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }]
} },
roleName: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] },
}); });
}; };
@@ -116,6 +120,14 @@ const AllUsersTable = () => {
return <ProperBandoLabel status={rowData.status}/>; return <ProperBandoLabel status={rowData.status}/>;
}; };
const roleFilterTemplate = (options) => {
return <Dropdown value={options.value} options={roles}
onChange={(e) => options.filterCallback(e.value, options.index)}
placeholder={__('Scegli uno', 'gepafin')}
className="p-column-filter"
showClear/>;
};
const statusFilterTemplate = (options) => { const statusFilterTemplate = (options) => {
return <Dropdown value={options.value} options={statuses} return <Dropdown value={options.value} options={statuses}
onChange={(e) => options.filterCallback(e.value, options.index)} onChange={(e) => options.filterCallback(e.value, options.index)}
@@ -157,9 +169,14 @@ const AllUsersTable = () => {
field="email" field="email"
filterPlaceholder={__('Cerca per email', 'gepafin')} filterPlaceholder={__('Cerca per email', 'gepafin')}
style={{ minWidth: '10rem' }}/> style={{ minWidth: '10rem' }}/>
<Column body={roleBodyTemplate} header={__('Ruolo', 'gepafin')} <Column body={roleBodyTemplate}
filterField="roleName"
filter
filterElement={roleFilterTemplate}
header={__('Ruolo', 'gepafin')}
style={{ minWidth: '8rem' }}/> style={{ minWidth: '8rem' }}/>
<Column field="status" header={__('Stato', 'gepafin')} <Column field="status"
header={__('Stato', 'gepafin')}
filterMenuStyle={{ width: '14rem' }} filterMenuStyle={{ width: '14rem' }}
style={{ width: '120px' }} body={statusBodyTemplate} style={{ width: '120px' }} body={statusBodyTemplate}
filterElement={statusFilterTemplate}/> filterElement={statusFilterTemplate}/>

View File

@@ -21,12 +21,14 @@ import { Dropdown } from 'primereact/dropdown';
import { Dialog } from 'primereact/dialog'; import { Dialog } from 'primereact/dialog';
import { classNames } from 'primereact/utils'; import { classNames } from 'primereact/utils';
import { Toast } from 'primereact/toast'; import { Toast } from 'primereact/toast';
import uniqid from '../../helpers/uniqid';
const APP_HUB_ID = process.env.REACT_APP_HUB_ID; const APP_HUB_ID = process.env.REACT_APP_HUB_ID;
const Users = () => { const Users = () => {
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [isVisibleEditDialog, setIsVisibleEditDialog] = useState(false); const [isVisibleEditDialog, setIsVisibleEditDialog] = useState(false);
const [updaterString, setUpdaterString] = useState('');
const [newUserData, setNewUserData] = useState({ const [newUserData, setNewUserData] = useState({
firstName: '', firstName: '',
lastName: '', lastName: '',
@@ -96,6 +98,7 @@ const Users = () => {
}); });
} }
} }
setUpdaterString(uniqid());
setLoading(false); setLoading(false);
hideEditDialog(); hideEditDialog();
} }
@@ -187,7 +190,7 @@ const Users = () => {
label={__('Crea nuovo')} icon="pi pi-plus" iconPos="right"/> label={__('Crea nuovo')} icon="pi pi-plus" iconPos="right"/>
</div> </div>
<AllUsersTable/> <AllUsersTable updaterString={updaterString}/>
<Dialog <Dialog
visible={isVisibleEditDialog} visible={isVisibleEditDialog}