UNPKG

@plone/volto

Version:
69 lines (61 loc) 2.02 kB
import React, { useEffect } from 'react'; import PropTypes from 'prop-types'; import { useDispatch, useSelector } from 'react-redux'; import { useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; import jwtDecode from 'jwt-decode'; import { toast } from 'react-toastify'; import { messages } from '@plone/volto/helpers/MessageLabels/MessageLabels'; import Toast from '@plone/volto/components/manage/Toast/Toast'; import { Form } from '@plone/volto/components/manage/Form'; import { getUser, updateUser } from '@plone/volto/actions/users/users'; import { getUserSchema } from '@plone/volto/actions/userschema/userschema'; const PersonalInformation = (props) => { const intl = useIntl(); const dispatch = useDispatch(); const history = useHistory(); const user = useSelector((state) => state.users.user); const userId = useSelector((state) => state.userSession.token ? jwtDecode(state.userSession.token).sub : '', ); const loading = useSelector((state) => state.users.update.loading); const userschema = useSelector((state) => state.userschema); useEffect(() => { dispatch(getUser(userId)); dispatch(getUserSchema()); }, [dispatch, userId]); const onSubmit = (data) => { delete data.id; delete data.username; delete data.roles; dispatch(updateUser(userId, data)).then(() => toast.success( <Toast success title={intl.formatMessage(messages.success)} content={intl.formatMessage(messages.saved)} />, ), ); if (props.closeMenu) props.closeMenu(); }; const onCancel = () => { if (props.closeMenu) props.closeMenu(); else history.goBack(); }; return ( userschema?.loaded && ( <Form formData={user} schema={userschema.userschema} onSubmit={onSubmit} onCancel={onCancel} loading={loading} /> ) ); }; PersonalInformation.propTypes = { closeMenu: PropTypes.func, }; export default PersonalInformation;