This commit is contained in:
2025-02-22 09:52:00 -03:00
parent 7b51166db8
commit bc77e892a5
11 changed files with 375 additions and 32 deletions

View File

@@ -0,0 +1,13 @@
import { encodeURI, decode } from 'js-base64'
export function encode(data) {
return encodeURI(JSON.stringify(data))
}
export function parse(str) {
try {
return JSON.parse(decode(str))
} catch {
return null
}
}

View File

@@ -16,6 +16,7 @@ import { Heading } from '~/components/heading'
import { Link } from '~/layouts/auth/_link'
import { Card } from '~/layouts/auth/layout'
import * as yup from 'yup'
import { parse } from '../_base64state'
const schema = yup.object({
password: yup
@@ -33,6 +34,7 @@ export default function Password() {
const { register, formState, setError, handleSubmit } = useForm({
resolver: yupResolver(schema),
})
const state = parse(searchParams.get('state'))
const formError = (message) => {
setError('password', {
@@ -42,7 +44,7 @@ export default function Password() {
}
const onSubmit = async ({ password }) => {
const username = searchParams.get('username')
const username = state?.email
const redirectTo = searchParams.get('redirect') ?? '/'
try {
@@ -114,9 +116,7 @@ export default function Password() {
<p className="break-all">
Entre na sua conta usando o email{' '}
<span className="font-semibold">
{searchParams.get('username')}
</span>{' '}
<span className="font-semibold">{state?.email}</span>{' '}
<Link to="." as={RouterLink}>
(editar)
</Link>

View File

@@ -1,4 +1,4 @@
import { useNavigate, useSearchParams, Link } from 'react-router'
import { useSearchParams, Link } from 'react-router'
import { useForm } from 'react-hook-form'
import { ErrorMessage } from '@hookform/error-message'
import { isValidCPF } from '@brazilian-utils/brazilian-utils'
@@ -6,8 +6,11 @@ import { yupResolver } from '@hookform/resolvers/yup'
import { Card } from '~/layouts/auth/layout'
import { Control, Label, Input, Button, Error } from '~/components/form'
import { Heading } from '~/components/heading'
import Password from './_password'
import { useMutation } from '@tanstack/react-query'
import * as yup from 'yup'
import { encode, parse } from '../_base64state'
import axios from '~/axios'
import Password from './_password'
yup.addMethod(yup.string, 'username', function (message) {
return this.test(
@@ -29,8 +32,9 @@ export const schema = yup.object({
export default function Component() {
const [searchParams] = useSearchParams()
const state = parse(searchParams.get('state'))
if (searchParams.get('username')) {
if (state?.['cognito:sub']) {
return <Password />
}
@@ -43,9 +47,18 @@ function SignIn() {
resolver: yupResolver(schema),
})
const { mutateAsync } = useMutation({
mutationFn: async ({ username }) => {
const { data } = await axios.get(`/search/lookup/${username}`)
return data
},
})
const onSubmit = async ({ username }) => {
const data = await mutateAsync({ username })
setSearchParams((searchParams) => {
searchParams.set('username', username)
searchParams.set('state', encode(data))
return searchParams
})
}