import React, { useState, useEffect, useRef, useCallback } from 'react'; import { __ } from '@wordpress/i18n'; import { head, 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 { isCodiceFiscale, isEmail, isPIVA } 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 uniqid from '../../helpers/uniqid'; const APP_HUB_ID = process.env.REACT_APP_HUB_ID; const Users = () => { const [loading, setLoading] = useState(false); const [isVisibleEditDialog, setIsVisibleEditDialog] = useState(false); const [updaterString, setUpdaterString] = useState(''); const [newUserData, setNewUserData] = useState({ firstName: '', lastName: '', email: '', phoneNumber: '', password: '', confPassword: '', roleId: 0, codiceFiscale: '', privacy: true, terms: true }); const [roles, setRoles] = useState([]); const toast = useRef(null); const onCreateNewUser = () => { setIsVisibleEditDialog(true); } const headerEditDialog = () => { return {__('Aggiungi utente', 'gepafin')} } const hideEditDialog = () => { setIsVisibleEditDialog(false); setNewUserData({ firstName: '', lastName: '', email: '', phoneNumber: '', password: '', confPassword: '', roleId: 0, codiceFiscale: '', privacy: true, terms: true }); } const saveEditDialog = () => { const isConfidi = isConfidiRoleChosen(); const emptyValues = Object.keys(newUserData) .filter(v => v !== 'phoneNumber') .filter(v => isConfidi ? v : v !== 'codiceFiscale') .filter(v => isInvalidField(newUserData, v)); if (isEmpty(emptyValues) && newUserData.password === newUserData.confPassword && !loading) { setLoading(true); let body = klona({ ...newUserData, hubUuid: APP_HUB_ID }); if (!isConfidi) { delete body.codiceFiscale; } UserService.createUser(body, createUserCallback, errCreateUserCallback); } } const createUserCallback = (data) => { if (data.status === 'SUCCESS') { const users = storeGet('users'); storeSet('users', [data.data.user, ...users]); if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } } setUpdaterString(uniqid()); setLoading(false); hideEditDialog(); } const errCreateUserCallback = (data) => { setLoading(false); if (toast.current) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); } const onChangeEditItem = (value, key) => { const userData = klona(newUserData); userData[key] = value; setNewUserData(userData); } const footerEditDialog = useCallback(() => { const isConfidi = isConfidiRoleChosen(); const errorValues = Object.keys(newUserData) .filter(v => v !== 'phoneNumber') .filter(v => isConfidi ? v : v !== 'codiceFiscale') .filter(v => isInvalidField(newUserData, v)); return
}, [newUserData]); const getRolesCallback = (data) => { if (data.status === 'SUCCESS') { const roles = data.data .filter(o => [ 'ROLE_SUPER_ADMIN', 'ROLE_PRE_INSTRUCTOR', 'ROLE_INSTRUCTOR_MANAGER', 'ROLE_CONFIDI' ].includes(o.roleType)) .map(o => ({ name: o.roleName, value: o.id, id: o.id, roleType: o.roleType })); setRoles(roles); } storeSet('unsetAsyncRequest'); } const errGetRolesCallback = (data) => { set404FromErrorResponse(data); storeSet('unsetAsyncRequest'); } const isInvalidField = (data, key) => key === 'codiceFiscale' ? !isCodiceFiscale(data[key]) && !isPIVA(data[key]) : isEmpty(data[key]) || isNil(data[key]); const isConfidiRoleChosen = useCallback(() => { const chosen = head(roles.filter(o => o.id === newUserData.roleId)); return chosen ? chosen.roleType === 'ROLE_CONFIDI' : false; }, [roles, newUserData]) useEffect(() => { if (isVisibleEditDialog) { UserService.getRoles(getRolesCallback, errGetRolesCallback) } }, [isVisibleEditDialog]); return (

{__('Gestione utenti', 'gepafin')}

onChangeEditItem(e.target.value, 'firstName')}/>
onChangeEditItem(e.target.value, 'lastName')}/>
onChangeEditItem(e.target.value, 'email')}/>
onChangeEditItem(e.target.value, 'phoneNumber')}/>
onChangeEditItem(e.target.value, 'password')}/>
onChangeEditItem(e.target.value, 'confPassword')}/>
onChangeEditItem(e.value, 'roleId')} options={roles} optionLabel="name" optionValue="value"/>
{isConfidiRoleChosen() ?
onChangeEditItem(e.target.value, 'codiceFiscale')}/>
: null}
) } export default Users;