update login
This commit is contained in:
@@ -17,9 +17,9 @@ import {
|
|||||||
AlertTriangleIcon,
|
AlertTriangleIcon,
|
||||||
UserIcon
|
UserIcon
|
||||||
} from 'lucide-react'
|
} from 'lucide-react'
|
||||||
import { Link, useParams, useFetcher } from 'react-router'
|
import { redirect, Link, useParams, useFetcher } from 'react-router'
|
||||||
import { Controller, useFieldArray, useForm } from 'react-hook-form'
|
import { Controller, useFieldArray, useForm } from 'react-hook-form'
|
||||||
import { Fragment, use, useEffect, useMemo, useRef, useState } from 'react'
|
import { Fragment, use, useMemo, useState } from 'react'
|
||||||
import { format } from 'date-fns'
|
import { format } from 'date-fns'
|
||||||
import { ptBR } from 'react-day-picker/locale'
|
import { ptBR } from 'react-day-picker/locale'
|
||||||
import { zodResolver } from '@hookform/resolvers/zod'
|
import { zodResolver } from '@hookform/resolvers/zod'
|
||||||
@@ -75,7 +75,6 @@ import { cloudflareContext } from '@repo/auth/context'
|
|||||||
import { SearchFilter } from '@repo/ui/components/search-filter'
|
import { SearchFilter } from '@repo/ui/components/search-filter'
|
||||||
|
|
||||||
import { formSchema, type Schema, MAX_ITEMS } from './data'
|
import { formSchema, type Schema, MAX_ITEMS } from './data'
|
||||||
import { redirect } from 'react-router'
|
|
||||||
|
|
||||||
export function meta({}: Route.MetaArgs) {
|
export function meta({}: Route.MetaArgs) {
|
||||||
return [{ title: 'Adicionar matrícula' }]
|
return [{ title: 'Adicionar matrícula' }]
|
||||||
@@ -284,6 +283,7 @@ export default function Route({
|
|||||||
<InputGroupInput
|
<InputGroupInput
|
||||||
readOnly
|
readOnly
|
||||||
value={value?.name || ''}
|
value={value?.name || ''}
|
||||||
|
autoFocus={true}
|
||||||
placeholder="Colaborador"
|
placeholder="Colaborador"
|
||||||
className="cursor-pointer"
|
className="cursor-pointer"
|
||||||
autoComplete="off"
|
autoComplete="off"
|
||||||
@@ -320,7 +320,6 @@ export default function Route({
|
|||||||
</InputGroup>
|
</InputGroup>
|
||||||
)}
|
)}
|
||||||
</SearchFilter>
|
</SearchFilter>
|
||||||
|
|
||||||
<ErrorMessage
|
<ErrorMessage
|
||||||
errors={formState.errors}
|
errors={formState.errors}
|
||||||
name={name}
|
name={name}
|
||||||
@@ -455,7 +454,6 @@ function FacetedFilter({
|
|||||||
const [open, { set }] = useToggle()
|
const [open, { set }] = useToggle()
|
||||||
const [sort, { toggle }] = useToggle('a-z', 'z-a')
|
const [sort, { toggle }] = useToggle('a-z', 'z-a')
|
||||||
const { hits } = use(options)
|
const { hits } = use(options)
|
||||||
const listRef = useRef<HTMLDivElement | null>(null)
|
|
||||||
const fuse = useMemo(() => {
|
const fuse = useMemo(() => {
|
||||||
return new Fuse(hits, {
|
return new Fuse(hits, {
|
||||||
keys: ['name'],
|
keys: ['name'],
|
||||||
@@ -506,6 +504,7 @@ function FacetedFilter({
|
|||||||
<Button
|
<Button
|
||||||
variant="link"
|
variant="link"
|
||||||
size="icon-sm"
|
size="icon-sm"
|
||||||
|
tabIndex={-1}
|
||||||
className="cursor-pointer text-muted-foreground"
|
className="cursor-pointer text-muted-foreground"
|
||||||
onClick={toggle}
|
onClick={toggle}
|
||||||
>
|
>
|
||||||
@@ -571,7 +570,7 @@ function ScheduledForInput({ value, onChange }: ScheduledForInputProps) {
|
|||||||
tomorrow.setDate(today.getDate() + 1)
|
tomorrow.setDate(today.getDate() + 1)
|
||||||
const [open, { set }] = useToggle()
|
const [open, { set }] = useToggle()
|
||||||
const [selected, setDate] = useState<Date | undefined>(value)
|
const [selected, setDate] = useState<Date | undefined>(value)
|
||||||
const displayValue = selected ? format(selected, 'dd/MM/yyyy') : ''
|
const display = selected ? format(selected, 'dd/MM/yyyy') : ''
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover open={open} onOpenChange={set}>
|
<Popover open={open} onOpenChange={set}>
|
||||||
@@ -580,7 +579,7 @@ function ScheduledForInput({ value, onChange }: ScheduledForInputProps) {
|
|||||||
<InputGroupInput
|
<InputGroupInput
|
||||||
readOnly
|
readOnly
|
||||||
placeholder="Imediatamente"
|
placeholder="Imediatamente"
|
||||||
value={displayValue}
|
value={display}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<InputGroupAddon>
|
<InputGroupAddon>
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ import { createSessionStorage } from '@repo/auth/session'
|
|||||||
export async function loader({ request, context }: Route.LoaderArgs) {
|
export async function loader({ request, context }: Route.LoaderArgs) {
|
||||||
const url = new URL(request.url)
|
const url = new URL(request.url)
|
||||||
const cloudflare = context.get(cloudflareContext)
|
const cloudflare = context.get(cloudflareContext)
|
||||||
|
const requestId = context.get(requestIdContext)
|
||||||
const sessionStorage = createSessionStorage(cloudflare.env)
|
const sessionStorage = createSessionStorage(cloudflare.env)
|
||||||
const session = await sessionStorage.getSession(request.headers.get('cookie'))
|
const session = await sessionStorage.getSession(request.headers.get('cookie'))
|
||||||
const requestId = context.get(requestIdContext)
|
|
||||||
const user = session.get('user')
|
const user = session.get('user')
|
||||||
const returnTo = (session.get('returnTo') as string | undefined) ?? '/'
|
const returnTo = (session.get('returnTo') as string | undefined) ?? '/'
|
||||||
|
|
||||||
@@ -26,6 +26,7 @@ export async function loader({ request, context }: Route.LoaderArgs) {
|
|||||||
request
|
request
|
||||||
)) as User
|
)) as User
|
||||||
session.set('user', authenticatedUser)
|
session.set('user', authenticatedUser)
|
||||||
|
session.unset('returnTo')
|
||||||
|
|
||||||
console.log(`[${requestId}] Redirecting the user to ${returnTo}`)
|
console.log(`[${requestId}] Redirecting the user to ${returnTo}`)
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ import { createSessionStorage } from '@repo/auth/session'
|
|||||||
export async function loader({ request, context }: Route.LoaderArgs) {
|
export async function loader({ request, context }: Route.LoaderArgs) {
|
||||||
const url = new URL(request.url)
|
const url = new URL(request.url)
|
||||||
const cloudflare = context.get(cloudflareContext)
|
const cloudflare = context.get(cloudflareContext)
|
||||||
|
const requestId = context.get(requestIdContext)
|
||||||
const sessionStorage = createSessionStorage(cloudflare.env)
|
const sessionStorage = createSessionStorage(cloudflare.env)
|
||||||
const session = await sessionStorage.getSession(request.headers.get('cookie'))
|
const session = await sessionStorage.getSession(request.headers.get('cookie'))
|
||||||
const requestId = context.get(requestIdContext)
|
|
||||||
const user = session.get('user')
|
const user = session.get('user')
|
||||||
const returnTo = (session.get('returnTo') as string | undefined) ?? '/'
|
const returnTo = (session.get('returnTo') as string | undefined) ?? '/'
|
||||||
|
|
||||||
@@ -26,6 +26,7 @@ export async function loader({ request, context }: Route.LoaderArgs) {
|
|||||||
request
|
request
|
||||||
)) as User
|
)) as User
|
||||||
session.set('user', authenticatedUser)
|
session.set('user', authenticatedUser)
|
||||||
|
session.unset('returnTo')
|
||||||
|
|
||||||
console.log(`[${requestId}] Redirecting the user to ${returnTo}`)
|
console.log(`[${requestId}] Redirecting the user to ${returnTo}`)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import type { Route } from './+types/route'
|
import type { Route } from './+types/route'
|
||||||
|
|
||||||
import type { User } from '@repo/auth/auth'
|
|
||||||
import { userContext, cloudflareContext } from '@repo/auth/context'
|
import { userContext, cloudflareContext } from '@repo/auth/context'
|
||||||
import { authMiddleware } from '@repo/auth/middleware/auth'
|
import { authMiddleware } from '@repo/auth/middleware/auth'
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export const authMiddleware = async (
|
|||||||
let user = session.get('user')
|
let user = session.get('user')
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
console.log('There is no user logged in')
|
console.log(`[${requestId}] There is no user logged in`)
|
||||||
|
|
||||||
session.set('returnTo', new URL(request.url).toString())
|
session.set('returnTo', new URL(request.url).toString())
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,8 @@ export function SearchFilter<T>({
|
|||||||
<Command
|
<Command
|
||||||
shouldFilter={false}
|
shouldFilter={false}
|
||||||
className={cn(
|
className={cn(
|
||||||
!searched && '**:data-[slot=command-input-wrapper]:border-b-0'
|
!searched && '**:data-[slot=command-input-wrapper]:border-b-0',
|
||||||
|
data.length > 0 && 'rounded-b-none'
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<CommandInput
|
<CommandInput
|
||||||
|
|||||||
Reference in New Issue
Block a user