diff --git a/src/pages/UserActivity/components/AllUsersTable/index.js b/src/pages/UserActivity/components/AllUsersTable/index.js
new file mode 100644
index 0000000..ae45a51
--- /dev/null
+++ b/src/pages/UserActivity/components/AllUsersTable/index.js
@@ -0,0 +1,175 @@
+import React, { useState, useEffect } from 'react';
+import { __ } from '@wordpress/i18n';
+import { uniq } from 'ramda';
+import copy from 'copy-to-clipboard';
+
+// store
+import { useStore, storeSet } from '../../../../store';
+
+// tools
+import getBandoSeverity from '../../../../helpers/getBandoSeverity';
+import getBandoLabel from '../../../../helpers/getBandoLabel';
+import getDateFromISOstring from '../../../../helpers/getDateFromISOstring';
+
+// api
+import UserService from '../../../../service/user-service';
+
+// components
+import { FilterMatchMode, FilterOperator } from 'primereact/api';
+import { DataTable } from 'primereact/datatable';
+import { Column } from 'primereact/column';
+import { Dropdown } from 'primereact/dropdown';
+import { Button } from 'primereact/button';
+import { Calendar } from 'primereact/calendar';
+import { Tag } from 'primereact/tag';
+import ProperBandoLabel from '../../../../components/ProperBandoLabel';
+import translationStrings from '../../../../translationStringsForComponents';
+import { Link } from 'react-router-dom';
+
+const AllUsersTable = () => {
+ const users = useStore().main.users();
+ const [filters, setFilters] = useState(null);
+ const [loading, setLoading] = useState(false);
+ const [statuses, setStatuses] = useState([]);
+
+ useEffect(() => {
+ if (!loading) {
+ setLoading(true);
+ UserService.getUsers(getCallback, errGetCallbacks);
+ }
+ }, []);
+
+ const getCallback = (data) => {
+ if (data.status === 'SUCCESS') {
+ storeSet.main.users(getFormattedData(data.data));
+ setStatuses(uniq(data.data.map(o => o.status)))
+ initFilters();
+ }
+ setLoading(false);
+ }
+
+ const errGetCallbacks = () => {
+ setLoading(false);
+ }
+
+ const getFormattedData = (data) => {
+ return data
+ .filter(o => ['ROLE_SUPER_ADMIN', 'ROLE_PRE_INSTRUCTOR', 'ROLE_INSTRUCTOR_MANAGER'].includes(o.role.roleType));
+ };
+
+ const clearFilter = () => {
+ initFilters();
+ };
+
+ const initFilters = () => {
+ setFilters({
+ global: { value: null, matchMode: FilterMatchMode.CONTAINS },
+ email: {
+ operator: FilterOperator.AND,
+ constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }]
+ },
+ lastLogin: {
+ operator: FilterOperator.AND,
+ constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }]
+ }
+ });
+ };
+
+ const renderHeader = () => {
+ return (
+
+
+ );
+ };
+
+ const dateLastAccessBodyTemplate = (rowData) => {
+ return getDateFromISOstring(rowData.lastLogin);
+ };
+
+ const dateFilterTemplate = (options) => {
+ return options.filterCallback(e.value, options.index)}
+ dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999"/>;
+ };
+
+ const nameBodyTemplate = (rowData) => {
+ return `${rowData.firstName} ${rowData.lastName}`;
+ };
+
+ const roleEmailTemplate = (rowData) => {
+ return
+ {rowData.email}
+
+
;
+ };
+
+ const roleBodyTemplate = (rowData) => {
+ return rowData.role.roleName;
+ };
+
+ const statusBodyTemplate = (rowData) => {
+ return ;
+ };
+
+ const statusFilterTemplate = (options) => {
+ return options.filterCallback(e.value, options.index)}
+ itemTemplate={statusItemTemplate} placeholder={__('Scegli uno', 'gepafin')}
+ className="p-column-filter"
+ showClear/>;
+ };
+
+ const statusItemTemplate = (option) => {
+ return ;
+ };
+
+ const actionsBodyTemplate = (rowData) => {
+ return
+
+
+ }
+
+ const header = renderHeader();
+
+ return (
+
+ setFilters(e.filters)}>
+
+
+
+
+
+
+
+
+ )
+}
+
+export default AllUsersTable;
diff --git a/src/pages/UserActivity/index.js b/src/pages/UserActivity/index.js
new file mode 100644
index 0000000..cd0f26b
--- /dev/null
+++ b/src/pages/UserActivity/index.js
@@ -0,0 +1,86 @@
+import React, { useState, useEffect, useRef } from 'react';
+import { __ } from '@wordpress/i18n';
+import { isEmpty, isNil } from 'ramda';
+import { klona } from 'klona';
+
+// store
+import { storeSet, storeGet } from '../../store';
+
+// service
+import UserService from '../../service/user-service';
+
+// tools
+import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
+import { isEmail } from '../../helpers/validators';
+
+// components
+import AllUsersTable from './components/AllUsersTable';
+import { Button } from 'primereact/button';
+import { InputText } from 'primereact/inputtext';
+import { Dropdown } from 'primereact/dropdown';
+import { Dialog } from 'primereact/dialog';
+import { classNames } from 'primereact/utils';
+import { Toast } from 'primereact/toast';
+import getDateFromISOstring from '../../helpers/getDateFromISOstring';
+import getBandoLabel from '../../helpers/getBandoLabel';
+import { useNavigate } from 'react-router-dom';
+
+const UserActivity = () => {
+ const [loading, setLoading] = useState(false);
+ const toast = useRef(null);
+ const navigate = useNavigate();
+
+ const goBack = () => {
+ navigate(`/utenti`);
+ }
+
+ return (
+
+
+
{__('Controllo attività utenti', 'gepafin')}
+
+
+
+
+
+
+
+
+
+
+ {__('Nome utente', 'gepafin')}
+
+
+
+ {__('Email', 'gepafin')}
+
+
+
+ {__('Ruolo', 'gepafin')}
+
+
+
+ {__('Data registrazione', 'gepafin')}
+
+
+
+ {__('Ultimo accesso', 'gepafin')}
+
+
+
+ {__('Stato account', 'gepafin')}
+
+
+
+
+ )
+}
+
+export default UserActivity;
diff --git a/src/pages/Users/components/AllUsersTable/index.js b/src/pages/Users/components/AllUsersTable/index.js
index 5de9510..ae45a51 100644
--- a/src/pages/Users/components/AllUsersTable/index.js
+++ b/src/pages/Users/components/AllUsersTable/index.js
@@ -24,6 +24,7 @@ import { Calendar } from 'primereact/calendar';
import { Tag } from 'primereact/tag';
import ProperBandoLabel from '../../../../components/ProperBandoLabel';
import translationStrings from '../../../../translationStringsForComponents';
+import { Link } from 'react-router-dom';
const AllUsersTable = () => {
const users = useStore().main.users();
@@ -125,12 +126,16 @@ const AllUsersTable = () => {
return ;
};
- /*const actionsBodyTemplate = (rowData) => {
- /!*return
-
- *!/
- return null;
- }*/
+ const actionsBodyTemplate = (rowData) => {
+ return
+
+
+ }
const header = renderHeader();
@@ -160,11 +165,11 @@ const AllUsersTable = () => {
filterField="lastLogin" dataType="date"
style={{ minWidth: '10rem' }}
body={dateLastAccessBodyTemplate} filter filterElement={dateFilterTemplate}/>
- {/**/}
+
)
}
-export default AllUsersTable;
\ No newline at end of file
+export default AllUsersTable;
diff --git a/src/routes.js b/src/routes.js
index 8b753fc..2b4ff22 100644
--- a/src/routes.js
+++ b/src/routes.js
@@ -38,6 +38,7 @@ import SoccorsoEditBeneficiario from './pages/SoccorsoEditBeneficiario';
import BandoApplicationPreview from './pages/BandoApplicationPreview';
import BandiPreferredBeneficiario from './pages/BandiPreferredBeneficiario';
import DomandeInstructorManager from './pages/DomandeInstructorManager';
+import UserActivity from './pages/UserActivity';
const routes = ({ role, chosenCompanyId }) => {
@@ -170,6 +171,12 @@ const routes = ({ role, chosenCompanyId }) => {
{'ROLE_PRE_INSTRUCTOR' === role ? : null}
{'ROLE_INSTRUCTOR_MANAGER' === role ? : null}
}/>
+
+ {'ROLE_SUPER_ADMIN' === role ? : null}
+ {'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
+ {'ROLE_INSTRUCTOR_MANAGER' === role ? : null}
+ }/>
}/>
}/>