fix(companies): corrige modal de edicao de empresas
All checks were successful
CI/CD Web + Desktop / Detect changes (push) Successful in 7s
CI/CD Web + Desktop / Deploy (VPS Linux) (push) Successful in 3m37s
CI/CD Web + Desktop / Deploy Convex functions (push) Has been skipped
Quality Checks / Lint, Test and Build (push) Successful in 4m4s

- Corrige erro NaN nos campos numericos (reopenWindowDays, contractedHoursPerMonth)
  usando z.preprocess para converter NaN para null
- Ajusta espacamento nos AccordionContent para melhor legibilidade
- Define tamanho consistente nos botoes Cancelar/Salvar (size="sm")
- Accordions agora iniciam fechados por padrao

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
rever-tecnologia 2025-12-18 11:26:02 -03:00
parent a5bab2cc33
commit d38d5d39eb
2 changed files with 20 additions and 17 deletions

View file

@ -1102,12 +1102,13 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
</DialogDescription>
</DialogHeader>
<div className="flex flex-wrap items-center gap-2 md:justify-end">
<Button type="button" variant="outline" onClick={close} disabled={isSubmitting}>
<Button type="button" variant="outline" size="sm" onClick={close} disabled={isSubmitting}>
Cancelar
</Button>
<Button
type="submit"
form="company-form"
size="sm"
disabled={isSubmitting}
onClick={async (e) => {
const valid = await form.trigger()
@ -1274,10 +1275,10 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
</div>
</section>
<Accordion type="multiple" defaultValue={["communication", "contacts", "contracts"]} className="space-y-2">
<Accordion type="multiple" defaultValue={[]} className="space-y-2">
<AccordionItem value="communication" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">Canais e comunicação</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<div className="grid gap-x-4 gap-y-3 md:grid-cols-2">
<div className="space-y-2">
<Label htmlFor="supportEmail">E-mail de suporte</Label>
@ -1434,7 +1435,7 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
<AccordionItem value="contacts" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">Contatos estratégicos</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<div className="space-y-4">
<div className="flex items-center justify-between">
<p className="text-sm text-muted-foreground">
@ -1589,7 +1590,7 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
<AccordionItem value="locations" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">Localizações e unidades</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<div className="space-y-4">
<div className="flex items-center justify-between">
<p className="text-sm text-muted-foreground">Registre filiais, data centers ou unidades críticas.</p>
@ -1712,7 +1713,7 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
<AccordionItem value="businessHours" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">Horários de atendimento</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<div className="grid gap-x-4 gap-y-3 md:grid-cols-2">
<div className="space-y-2">
<Label>Modo</Label>
@ -1744,7 +1745,7 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
<AccordionItem value="requestTypes" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">Tipos de solicitação</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<CompanyRequestTypesControls tenantId={tenantId} companyId={editor?.mode === "edit" ? editor.company.id : null} />
<CompanyExportTemplateSelector tenantId={tenantId} companyId={editor?.mode === "edit" ? editor.company.id : null} />
</AccordionContent>
@ -1753,7 +1754,7 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
{editor?.mode === "edit" ? (
<AccordionItem value="machines" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">Dispositivos vinculadas</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<div className="rounded-lg border border-border/60 bg-background p-3">
<AdminDevicesOverview tenantId={tenantId} initialCompanyFilterSlug={editor.company.slug} />
</div>
@ -1763,7 +1764,7 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
<AccordionItem value="contracts" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">Contratos e escopo</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<div className="space-y-4">
<div className="flex items-center justify-between">
<p className="text-sm text-muted-foreground">
@ -1935,7 +1936,7 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
<AccordionItem value="sla" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">SLA e horários de atendimento</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<div className="grid gap-x-4 gap-y-3 md:grid-cols-2">
<div className="space-y-2">
<Label>Calendário</Label>
@ -2029,7 +2030,7 @@ export function CompanySheet({ tenantId, editor, onClose, onCreated, onUpdated }
<AccordionItem value="metadata" className="rounded-lg border border-border/60 bg-muted/20 px-4">
<AccordionTrigger className="py-3 font-semibold">Metadados e observações</AccordionTrigger>
<AccordionContent className="pb-5">
<AccordionContent className="space-y-4 pb-5 pt-2">
<div className="grid gap-4 md:grid-cols-2">
<Controller
name="tags"

View file

@ -347,11 +347,10 @@ export const companyFormSchema = z.object({
.nullable()
.optional(),
address: z.string().trim().nullable().optional(),
contractedHoursPerMonth: z
.number()
.min(0)
.nullable()
.optional(),
contractedHoursPerMonth: z.preprocess(
(val) => (val === "" || Number.isNaN(val) ? null : val),
z.number().min(0).nullable().optional()
),
businessHours: businessHoursSchema.nullish(),
communicationChannels: communicationChannelsSchema.default({
supportEmails: [],
@ -384,7 +383,10 @@ export const companyFormSchema = z.object({
customFields: z.array(customFieldSchema).default([]),
notes: z.string().trim().nullable().optional(),
isAvulso: z.boolean().default(false),
reopenWindowDays: z.number().int().min(1).max(90).nullable().optional(),
reopenWindowDays: z.preprocess(
(val) => (val === "" || Number.isNaN(val) ? null : val),
z.number().int().min(1).max(90).nullable().optional()
),
})
export type CompanyFormValues = z.infer<typeof companyFormSchema>