import React, { useState, useEffect } from 'react'; import { useRouter } from 'next/router'; import LoadingSpinner from '../Common/LoadingSpinner'; import { useUser } from '../../hooks/useUser'; import Button from '../Common/Button'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import axios from 'axios'; import { useToasts } from 'react-toast-notifications'; import Header from '../Common/Header'; import PermissionEdit from '../PermissionEdit'; import { Field, Form, Formik } from 'formik'; import * as Yup from 'yup'; import { UserType } from '../../../server/constants/user'; export const messages = defineMessages({ edituser: 'Edit User', plexUsername: 'Plex Username', username: 'Display Name', avatar: 'Avatar', email: 'Email', permissions: 'Permissions', save: 'Save', saving: 'Saving...', usersaved: 'User saved', userfail: 'Something went wrong saving the user.', }); const UserEdit: React.FC = () => { const router = useRouter(); const intl = useIntl(); const { addToast } = useToasts(); const { user: currentUser } = useUser(); const { user, error, revalidate } = useUser({ id: Number(router.query.userId), }); const [currentPermission, setCurrentPermission] = useState(0); useEffect(() => { if (currentPermission !== user?.permissions ?? 0) { setCurrentPermission(user?.permissions ?? 0); } // We know what we are doing here. // eslint-disable-next-line react-hooks/exhaustive-deps }, [user]); if (!user && !error) { return ; } const UserEditSchema = Yup.object().shape({ username: Yup.string(), }); return ( { try { await axios.put(`/api/v1/user/${user?.id}`, { permissions: currentPermission, email: user?.email, username: values.username, }); addToast(intl.formatMessage(messages.usersaved), { appearance: 'success', autoDismiss: true, }); } catch (e) { addToast(intl.formatMessage(messages.userfail), { appearance: 'error', autoDismiss: true, }); throw new Error(`Something went wrong saving the user: ${e.message}`); } finally { revalidate(); } }} > {({ isSubmitting, handleSubmit }) => (
{user?.userType === UserType.PLEX && (
)}
setCurrentPermission(newPermission) } />
)}
); }; export default UserEdit;