From f3a704569197eba81afa2e73a3a26640afe59857 Mon Sep 17 00:00:00 2001 From: Esdras Renan Date: Fri, 24 Oct 2025 23:52:58 -0300 Subject: [PATCH] feat: cadastro manual de acesso remoto e ajustes de horas --- components/shadcn-studio/input/input-41.tsx | 72 +++- convex/machines.ts | 80 ++++ convex/tickets.ts | 143 +++++++ package.json | 1 - pnpm-lock.yaml | 15 +- src/app/admin/users/page.tsx | 2 +- .../api/admin/machines/remote-access/route.ts | 89 ++++ .../api/admin/users/assign-company/route.ts | 49 ++- src/app/api/admin/users/route.ts | 123 +++++- .../machines/admin-machines-overview.tsx | 402 +++++++++++++++--- .../admin/users/admin-users-workspace.tsx | 253 +++++++++-- .../tickets/ticket-comments.rich.tsx | 45 +- .../tickets/ticket-summary-header.tsx | 217 +++++++++- src/components/tickets/tickets-board.tsx | 190 ++++++--- src/components/ui/alert.tsx | 40 ++ src/components/ui/sidebar.tsx | 35 +- 16 files changed, 1549 insertions(+), 207 deletions(-) create mode 100644 src/app/api/admin/machines/remote-access/route.ts create mode 100644 src/components/ui/alert.tsx diff --git a/components/shadcn-studio/input/input-41.tsx b/components/shadcn-studio/input/input-41.tsx index 4eb3d71..f3ffddd 100644 --- a/components/shadcn-studio/input/input-41.tsx +++ b/components/shadcn-studio/input/input-41.tsx @@ -1,44 +1,72 @@ 'use client' +import { useCallback, useMemo, useState } from 'react' import { MinusIcon, PlusIcon } from 'lucide-react' -import { Button, Group, Input, Label, NumberField } from 'react-aria-components' +import { Button } from '@/components/ui/button' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' + +const clamp = (value: number, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) => + Math.min(Math.max(value, min), max) const InputWithEndButtonsDemo = () => { + const [value, setValue] = useState(1024) + const minValue = 0 + + const formattedValue = useMemo(() => (Number.isFinite(value) ? value.toString() : ''), [value]) + + const handleManualChange = useCallback( + (event: React.ChangeEvent) => { + const digitsOnly = event.target.value.replace(/\D/g, '') + if (digitsOnly.length === 0) { + setValue(minValue) + return + } + const next = Number.parseInt(digitsOnly, 10) + setValue(clamp(next, minValue)) + }, + [minValue], + ) + + const handleIncrement = useCallback(() => setValue((current) => clamp(current + 1, minValue)), [minValue]) + const handleDecrement = useCallback(() => setValue((current) => clamp(current - 1, minValue)), [minValue]) + return ( - -