{"version":3,"file":"modern-907c521a.js","sources":["../../src/hooks/use-search-params.ts","../../src/pages/auth-demo/login/modern.tsx"],"sourcesContent":["import { useSearchParams as _useSearchParams } from 'react-router-dom';\n\n// TODO: Maybe unify React-Router and Next.js Router to have the same behaviour\n// In Next.js we do not have the set. There we need to redirect manually.\n\n/**\n * Returns ReadOnly search params\n */\nexport const useSearchParams = () => {\n const [searchParams] = _useSearchParams();\n\n return searchParams;\n};\n","import React, { useState, useEffect } from 'react';\nimport * as Yup from 'yup';\nimport { useFormik } from 'formik';\nimport { useMounted } from 'src/hooks/use-mounted';\nimport { useRouter } from 'src/hooks/use-router';\nimport { useSearchParams } from 'src/hooks/use-search-params';\nimport type { AuthContextType } from 'src/contexts/auth/jwt';\nimport { useAuth } from 'src/hooks/use-auth';\nimport { Box, Button, Link, Stack, TextField, Typography } from '@mui/material';\nimport { loginUser } from '../../../services/teamMemberService';\nimport { Seo } from 'src/components/seo';\nimport { paths } from 'src/paths';\n\nconst LoginValidationSchema = Yup.object({\n email: Yup.string().email('Must be a valid email').max(255).required('Email is required'),\n password: Yup.string().max(255).required('Password is required'),\n});\n\nconst LoginPage = () => {\n const [error, setError] = useState('');\n const { signIn, isAuthenticated } = useAuth<AuthContextType>();\n const isMounted = useMounted();\n const router = useRouter();\n const searchParams = useSearchParams();\n const returnTo = searchParams.get('returnTo');\n\n useEffect(() => {\n if (isAuthenticated) {\n router.push(returnTo || paths.dashboard.index);\n }\n }, [isAuthenticated, router, returnTo]);\n\n const formik = useFormik({\n initialValues: {\n email: '',\n password: '',\n },\n validationSchema: LoginValidationSchema,\n onSubmit: async (values, actions) => {\n try {\n const response = await loginUser(values.email, values.password);\n if (response && response.auth_data && response.auth_data.user) {\n signIn(response);\n if (isMounted()) {\n router.push(returnTo || paths.dashboard.index);\n }\n } else {\n setError('Authentication failed, please try again');\n }\n } catch (error) {\n setError('An error occurred. Please try again.');\n }\n actions.setSubmitting(false);\n }\n });\n\n if (isAuthenticated) {\n return null; // or a loading spinner if you prefer\n }\n\n return (\n <>\n <Seo title=\"Login\" />\n <Box sx={{ maxWidth: 400, margin: 'auto', mt: 4 }}>\n <Typography variant=\"h4\" gutterBottom>\n Log in\n </Typography>\n {error && <Typography color=\"error\" sx={{ mb: 2 }}>{error}</Typography>}\n <form onSubmit={formik.handleSubmit}>\n <Stack spacing={3}>\n <TextField\n autoFocus\n error={!!(formik.touched.email && formik.errors.email)}\n fullWidth\n helperText={formik.touched.email && formik.errors.email}\n label=\"Email Address\"\n name=\"email\"\n onBlur={formik.handleBlur}\n onChange={formik.handleChange}\n type=\"email\"\n value={formik.values.email}\n />\n <TextField\n error={!!(formik.touched.password && formik.errors.password)}\n fullWidth\n helperText={formik.touched.password && formik.errors.password}\n label=\"Password\"\n name=\"password\"\n onBlur={formik.handleBlur}\n onChange={formik.handleChange}\n type=\"password\"\n value={formik.values.password}\n />\n <Button\n fullWidth\n size=\"large\"\n type=\"submit\"\n variant=\"contained\"\n >\n Log In\n </Button>\n </Stack>\n </form>\n <Box mt={2}>\n <Link href=\"/forgot-password\">\n Forgot password?\n </Link>\n </Box>\n </Box>\n </>\n );\n};\n\nexport default LoginPage;"],"names":["useSearchParams","searchParams","_useSearchParams","LoginValidationSchema","Yup.object","Yup.string","LoginPage","error","setError","useState","signIn","isAuthenticated","useAuth","isMounted","useMounted","router","useRouter","returnTo","useEffect","paths","formik","useFormik","values","actions","response","loginUser","jsxs","Fragment","jsx","Seo","Box","Typography","Stack","TextField","Button","Link"],"mappings":"ohBAQO,MAAMA,EAAkB,IAAM,CAC7B,KAAA,CAACC,CAAY,EAAIC,IAEhB,OAAAD,CACT,ECCME,EAAwBC,EAAW,CACvC,MAAOC,IAAa,MAAM,uBAAuB,EAAE,IAAI,GAAG,EAAE,SAAS,mBAAmB,EACxF,SAAUA,EAAW,EAAE,IAAI,GAAG,EAAE,SAAS,sBAAsB,CACjE,CAAC,EAEKC,EAAY,IAAM,CACtB,KAAM,CAACC,EAAOC,CAAQ,EAAIC,WAAS,EAAE,EAC/B,CAAE,OAAAC,EAAQ,gBAAAC,CAAgB,EAAIC,EAAyB,EACvDC,EAAYC,IACZC,EAASC,IAETC,EADejB,IACS,IAAI,UAAU,EAE5CkB,EAAAA,UAAU,IAAM,CACVP,GACFI,EAAO,KAAKE,GAAYE,EAAM,UAAU,KAAK,CAE9C,EAAA,CAACR,EAAiBI,EAAQE,CAAQ,CAAC,EAEtC,MAAMG,EAASC,EAAU,CACvB,cAAe,CACb,MAAO,GACP,SAAU,EACZ,EACA,iBAAkBlB,EAClB,SAAU,MAAOmB,EAAQC,IAAY,CAC/B,GAAA,CACF,MAAMC,EAAW,MAAMC,EAAUH,EAAO,MAAOA,EAAO,QAAQ,EAC1DE,GAAYA,EAAS,WAAaA,EAAS,UAAU,MACvDd,EAAOc,CAAQ,EACXX,KACFE,EAAO,KAAKE,GAAYE,EAAM,UAAU,KAAK,GAG/CX,EAAS,yCAAyC,OAEtC,CACdA,EAAS,sCAAsC,CACjD,CACAe,EAAQ,cAAc,EAAK,CAC7B,CAAA,CACD,EAED,OAAIZ,EACK,KAKLe,EAAA,KAAAC,WAAA,CAAA,SAAA,CAACC,EAAAA,IAAAC,EAAA,CAAI,MAAM,OAAQ,CAAA,EACnBH,EAAAA,KAACI,EAAI,CAAA,GAAI,CAAE,SAAU,IAAK,OAAQ,OAAQ,GAAI,CAAA,EAC5C,SAAA,CAAAF,MAACG,EAAW,CAAA,QAAQ,KAAK,aAAY,GAAC,SAEtC,SAAA,EACCxB,GAAUqB,EAAA,IAAAG,EAAA,CAAW,MAAM,QAAQ,GAAI,CAAE,GAAI,CAAE,EAAI,SAAMxB,CAAA,CAAA,EAC1DqB,EAAAA,IAAC,QAAK,SAAUR,EAAO,aACrB,SAACM,EAAAA,KAAAM,EAAA,CAAM,QAAS,EACd,SAAA,CAAAJ,EAAA,IAACK,EAAA,CACC,UAAS,GACT,MAAO,CAAC,EAAEb,EAAO,QAAQ,OAASA,EAAO,OAAO,OAChD,UAAS,GACT,WAAYA,EAAO,QAAQ,OAASA,EAAO,OAAO,MAClD,MAAM,gBACN,KAAK,QACL,OAAQA,EAAO,WACf,SAAUA,EAAO,aACjB,KAAK,QACL,MAAOA,EAAO,OAAO,KAAA,CACvB,EACAQ,EAAA,IAACK,EAAA,CACC,MAAO,CAAC,EAAEb,EAAO,QAAQ,UAAYA,EAAO,OAAO,UACnD,UAAS,GACT,WAAYA,EAAO,QAAQ,UAAYA,EAAO,OAAO,SACrD,MAAM,WACN,KAAK,WACL,OAAQA,EAAO,WACf,SAAUA,EAAO,aACjB,KAAK,WACL,MAAOA,EAAO,OAAO,QAAA,CACvB,EACAQ,EAAA,IAACM,EAAA,CACC,UAAS,GACT,KAAK,QACL,KAAK,SACL,QAAQ,YACT,SAAA,QAAA,CAED,CAAA,CAAA,CACF,CACF,CAAA,EACAN,EAAAA,IAACE,GAAI,GAAI,EACP,eAACK,EAAK,CAAA,KAAK,mBAAmB,SAAA,kBAAA,CAE9B,CACF,CAAA,CAAA,EACF,CACF,CAAA,CAAA,CAEJ"}