//Lib import { toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import classes from '../UserSettings.module.css'; import { useState } from 'react'; import { useForm } from 'react-hook-form'; import { SpinnerDotted } from 'spinners-react'; //Components import Error from '../../../Components/UI/Error/Error'; import Info from '../../../Components/UI/Info/Info'; export default function UsernameSettings(props) { //Var const toastOptions = { position: 'top-right', autoClose: 8000, hideProgressBar: false, closeOnClick: true, pauseOnHover: true, draggable: true, progress: undefined, }; const { register, handleSubmit, reset, formState: { errors, isSubmitting, isValid }, } = useForm({ mode: 'onChange' }); ////State const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(); const [info, setInfo] = useState(false); ////Functions //Form submit Handler for ADD a repo const formSubmitHandler = async (data) => { //Remove old error setError(); //Loading button on submit to avoid multiple send. setIsLoading(true); //POST API to update the username try { const response = await fetch('/api/account/updateUsername', { method: 'PUT', headers: { 'Content-type': 'application/json', }, body: JSON.stringify(data), }); const result = await response.json(); if (!response.ok) { setIsLoading(false); reset(); setError(result.message); setTimeout(() => setError(), 4000); } else { reset(); setIsLoading(false); setInfo(true); toast.success('Username edited !', toastOptions); } } catch (error) { reset(); setIsLoading(false); setError("Can't update your username. Contact your administrator."); setTimeout(() => setError(), 4000); } }; return ( <> {/* Username */}

Username

{info ? ( //For local JWTs (cookie) without an OAuth provider, Next-Auth does not allow //at the time this code is written to refresh client-side session information //without triggering a logout. //I chose to inform the user to reconnect rather than force logout. ) : (

{error && } {errors.username && ( {errors.username.message} )}

)}
); }