Skip to content

Commit cc6dd49

Browse files
fix: mensagens de validação em português e verificação de e-mail duplicado
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 3aea5cd commit cc6dd49

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

src/components/staff-form.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
import CheckIcon from '@mui/icons-material/Check'
2121
import ArrowBackIcon from '@mui/icons-material/ArrowBack'
2222
import { staffSchema, departments, type StaffSchema } from '@/features/staff/validation'
23-
import { useCreateStaff, useUpdateStaff } from '@/features/staff/hooks'
23+
import { useCreateStaff, useUpdateStaff, useStaffs } from '@/features/staff/hooks'
2424

2525
const steps = ['Infos Básicas', 'Infos Profissionais']
2626

@@ -63,6 +63,7 @@ export function StaffForm({ staffId, initialValues, isEdit = false }: StaffFormP
6363

6464
const { mutateAsync: createStaff, isPending: isCreating } = useCreateStaff()
6565
const { mutateAsync: updateStaff, isPending: isUpdating } = useUpdateStaff()
66+
const { data: existingStaffs } = useStaffs()
6667
const isPending = isCreating || isUpdating
6768

6869
const onSubmit = async (data: StaffSchema) => {
@@ -178,6 +179,13 @@ export function StaffForm({ staffId, initialValues, isEdit = false }: StaffFormP
178179
<Controller
179180
name="email"
180181
control={control}
182+
rules={{
183+
validate: (value) => {
184+
if (isEdit) return true
185+
const duplicate = existingStaffs?.some(s => s.email === value)
186+
return duplicate ? 'E-mail já cadastrado' : true
187+
},
188+
}}
181189
render={({ field, fieldState }) => (
182190
<TextField
183191
{...field}

src/features/staff/validation.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ export const departments: StaffDepartments[] = ['Design', 'TI', 'Marketing', 'Pr
55
const statuses: StaffStatus[] = ['ACTIVE', 'INACTIVE']
66

77
export const staffSchema = z.object({
8-
name: z.string().min(3, 'O nome deve ter pelo menos 3 caracteres').max(100),
8+
name: z.string().min(3, 'O nome deve ter pelo menos 3 caracteres').max(100, 'Nome muito longo'),
99
email: z.string().email('E-mail inválido'),
10-
department: z.enum(departments as [StaffDepartments, ...StaffDepartments[]]),
11-
status: z.enum(statuses as [StaffStatus, ...StaffStatus[]]),
10+
department: z.enum(departments as [StaffDepartments, ...StaffDepartments[]], { error: 'Selecione um departamento' }),
11+
status: z.enum(statuses as [StaffStatus, ...StaffStatus[]], { error: 'Status inválido' }),
1212
})
1313

1414
export type StaffSchema = z.infer<typeof staffSchema>

0 commit comments

Comments
 (0)