import axios from "axios"; import { useRouter } from "next/router"; import nProgress from "nprogress"; import { useMemo, useState } from "react"; import FormLayout from "components/FormLayout"; import PageTransition from "components/PageTransition"; import TextBox from "components/TextBox"; import PATHS from "constants/paths"; import useAutoFocus from "hooks/useAutoFocus"; import getUserCategoriesCount from "lib/category/getUserCategoriesCount"; import getUser from "lib/user/getUser"; import { redirectWithoutClientCache } from "utils/client"; import { HandleAxiosError } from "utils/front"; import { getSession } from "utils/session"; import styles from "styles/form.module.scss"; function CreateCategory({ categoriesCount }: { categoriesCount: number }) { const autoFocusRef = useAutoFocus(); const router = useRouter(); const info = useRouter().query?.info as string; const [name, setName] = useState(""); const [error, setError] = useState(null); const [submitted, setSubmitted] = useState(false); const canSubmit = useMemo( () => name.length !== 0 && !submitted, [name.length, submitted] ); const handleSubmit = async (event) => { event.preventDefault(); setError(null); setSubmitted(true); nProgress.start(); try { const { data } = await axios.post(PATHS.API.CATEGORY, { name }); redirectWithoutClientCache(router, ""); router.push(`${PATHS.HOME}?categoryId=${data?.categoryId}`); setSubmitted(true); } catch (error) { setError(HandleAxiosError(error)); setSubmitted(false); } finally { nProgress.done(); } }; return ( setName(value)} value={name} fieldClass={styles["input-field"]} placeholder="Nom..." innerRef={autoFocusRef} /> ); } CreateCategory.authRequired = true; export default CreateCategory; export async function getServerSideProps({ req, res }) { const session = await getSession(req, res); const user = await getUser(session); if (!user) { return { redirect: { destination: PATHS.HOME, }, }; } const categoriesCount = await getUserCategoriesCount(user); return { props: { categoriesCount, }, }; }