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