@fayz-ai/plugin-support 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/HelpdeskConsole-7W5IAQIU.js +355 -0
- package/dist/HelpdeskConsole-7W5IAQIU.js.map +1 -0
- package/dist/SupportCenter-Z2HEPJGD.js +1090 -0
- package/dist/SupportCenter-Z2HEPJGD.js.map +1 -0
- package/dist/chunk-5K7VA5VP.js +106 -0
- package/dist/chunk-5K7VA5VP.js.map +1 -0
- package/dist/chunk-7NVBUXTX.js +300 -0
- package/dist/chunk-7NVBUXTX.js.map +1 -0
- package/dist/chunk-JJPB2T3Z.js +131 -0
- package/dist/chunk-JJPB2T3Z.js.map +1 -0
- package/dist/components/HelpdeskStatusPanel.d.ts +12 -0
- package/dist/components/HelpdeskStatusPanel.d.ts.map +1 -0
- package/dist/data/api.d.ts +15 -0
- package/dist/data/api.d.ts.map +1 -0
- package/dist/data/console.d.ts +37 -0
- package/dist/data/console.d.ts.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +901 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/content.d.ts +24 -0
- package/dist/lib/content.d.ts.map +1 -0
- package/dist/lib/fix-prompt.d.ts +30 -0
- package/dist/lib/fix-prompt.d.ts.map +1 -0
- package/dist/lib/report-tool.d.ts +25 -0
- package/dist/lib/report-tool.d.ts.map +1 -0
- package/dist/lib/vocabulary.d.ts +34 -0
- package/dist/lib/vocabulary.d.ts.map +1 -0
- package/dist/locales/en.d.ts +2 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/index.d.ts +2 -0
- package/dist/locales/index.d.ts.map +1 -0
- package/dist/locales/pt-BR.d.ts +2 -0
- package/dist/locales/pt-BR.d.ts.map +1 -0
- package/dist/migrations/index.d.ts +9 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/store.d.ts +27 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/types.d.ts +80 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/views/HelpdeskConsole.d.ts +10 -0
- package/dist/views/HelpdeskConsole.d.ts.map +1 -0
- package/dist/views/ScreenCaptureEditor.d.ts +12 -0
- package/dist/views/ScreenCaptureEditor.d.ts.map +1 -0
- package/dist/views/SupportCenter.d.ts +14 -0
- package/dist/views/SupportCenter.d.ts.map +1 -0
- package/dist/views/SupportMenu.d.ts +12 -0
- package/dist/views/SupportMenu.d.ts.map +1 -0
- package/dist/views/SupportRequestDetail.d.ts +6 -0
- package/dist/views/SupportRequestDetail.d.ts.map +1 -0
- package/dist/views/SupportRequestForm.d.ts +12 -0
- package/dist/views/SupportRequestForm.d.ts.map +1 -0
- package/dist/views/SupportRequestsPanel.d.ts +11 -0
- package/dist/views/SupportRequestsPanel.d.ts.map +1 -0
- package/dist/views/TicketDetailPage.d.ts +12 -0
- package/dist/views/TicketDetailPage.d.ts.map +1 -0
- package/package.json +56 -3
- package/README.md +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/views/SupportMenu.tsx","../src/views/ScreenCaptureEditor.tsx","../src/views/SupportRequestForm.tsx","../src/views/SupportRequestDetail.tsx","../src/views/SupportRequestsPanel.tsx","../src/views/TicketDetailPage.tsx","../src/views/SupportCenter.tsx"],"names":["Icon","jsx","jsxs","React","Button","Textarea","Thumbnail","Skeleton","Badge","SubpageHeader","AttachmentCard","Row","fmtDate","ICON_MAP","snapshot","Fragment","fmtSize","go","q","Input"],"mappings":"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","file":"SupportCenter-Z2HEPJGD.js","sourcesContent":["import React from 'react'\nimport { ICON_MAP } from '@fayz-ai/ui'\nimport type { SupportKind } from '../types'\nimport { DOORS } from '../lib/vocabulary'\n\nexport interface SupportMenuProps {\n onPickKind: (kind: SupportKind) => void\n /** \"Tirar dúvidas\" — opens the Dico chat. Hidden when not wired (e.g. on the page). */\n onAskDico?: () => void\n /** Footer entry. Hidden when already on the list. */\n onOpenList?: () => void\n unread?: number\n}\n\nfunction Row({ icon, title, hint, onClick }: { icon: string; title: string; hint: string; onClick: () => void }) {\n const Icon = (ICON_MAP as Record<string, React.ComponentType<{ className?: string }>>)[icon] ?? ICON_MAP.HelpCircle\n return (\n <button\n onClick={onClick}\n className=\"flex w-full items-center gap-3 rounded-xl border bg-card p-3 text-left transition-colors hover:bg-accent\"\n >\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-warning-soft text-warning-soft-foreground\">\n {Icon && <Icon className=\"h-5 w-5\" />}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block text-sm font-semibold\">{title}</span>\n <span className=\"block truncate text-xs text-muted-foreground\">{hint}</span>\n </span>\n <span className=\"text-muted-foreground\">›</span>\n </button>\n )\n}\n\nexport function SupportMenu({ onPickKind, onAskDico, onOpenList, unread = 0 }: SupportMenuProps) {\n return (\n <div className=\"space-y-3\">\n <div>\n <h2 className=\"text-xl font-semibold\">Em que podemos ajudar?</h2>\n <p className=\"text-sm text-muted-foreground\">Escolha o tipo de ajuda.</p>\n </div>\n <div className=\"space-y-2\">\n {onAskDico && (\n <Row icon=\"HelpCircle\" title=\"Tirar dúvidas\" hint=\"Pergunte sobre qualquer parte do sistema\" onClick={onAskDico} />\n )}\n {DOORS.map((d) => (\n <Row key={d.kind} icon={d.icon} title={d.title} hint={d.hint} onClick={() => onPickKind(d.kind)} />\n ))}\n </div>\n {onOpenList && (\n <button onClick={onOpenList} className=\"flex items-center gap-2 pt-1 text-sm text-muted-foreground hover:text-foreground\">\n <span>Minhas solicitações</span>\n {unread > 0 && <span className=\"rounded-full bg-warning px-1.5 text-[10px] font-semibold text-warning-foreground\">{unread}</span>}\n </button>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Takeover, Button } from '@fayz-ai/ui'\n\n// Capture a frame of the screen (native getDisplayMedia — no new dependency) and\n// let the person blur names/phones/values before it is attached. V1 photographs\n// the app without the panel; here the browser's own picker chooses the surface,\n// which is one extra click and zero bundle cost. Blur is a pixelation pass baked\n// into the exported PNG, so the sensitive pixels never leave the device.\n\ninterface Rect { x: number; y: number; w: number; h: number }\n\nexport interface ScreenCaptureEditorProps {\n open: boolean\n onClose: () => void\n onUse: (file: File, previewUrl: string) => void\n /** When set, skip acquisition and edit this file directly (the \"Arquivo\"/paste path). */\n initialFile?: File | null\n /** Start capture immediately in this mode when the editor opens. */\n autoStart?: 'tab' | 'window' | null\n}\n\nconst PIXEL = 12 // blur block size\n\nexport function ScreenCaptureEditor({ open, onClose, onUse, initialFile, autoStart }: ScreenCaptureEditorProps) {\n const canvasRef = React.useRef<HTMLCanvasElement | null>(null)\n const baseRef = React.useRef<HTMLCanvasElement | null>(null) // the clean capture\n const [hasImage, setHasImage] = React.useState(false)\n const [rects, setRects] = React.useState<Rect[]>([])\n const [drag, setDrag] = React.useState<Rect | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n const [busy, setBusy] = React.useState(false)\n\n const reset = React.useCallback(() => {\n setHasImage(false); setRects([]); setDrag(null); setError(null); baseRef.current = null\n }, [])\n\n // Load the initial file (Arquivo / paste) when provided.\n React.useEffect(() => {\n if (!open) { reset(); return }\n if (initialFile) void loadFromBlob(initialFile)\n else if (autoStart) void capture(autoStart === 'tab')\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, initialFile, autoStart])\n\n async function loadFromBlob(blob: Blob) {\n try {\n const bitmap = await createImageBitmap(blob)\n const base = document.createElement('canvas')\n base.width = bitmap.width; base.height = bitmap.height\n base.getContext('2d')!.drawImage(bitmap, 0, 0)\n baseRef.current = base\n setRects([]); setHasImage(true); setError(null)\n requestAnimationFrame(redraw)\n } catch {\n setError('Não consegui abrir esta imagem.')\n }\n }\n\n async function capture(preferCurrentTab: boolean) {\n setError(null); setBusy(true)\n try {\n const md = navigator.mediaDevices as MediaDevices & {\n getDisplayMedia?: (c?: unknown) => Promise<MediaStream>\n }\n if (!md?.getDisplayMedia) { setError('Seu navegador não permite capturar a tela aqui. Use \"Arquivo\".'); return }\n const stream = await md.getDisplayMedia(\n preferCurrentTab ? { video: { displaySurface: 'browser' }, preferCurrentTab: true } as any : { video: true },\n )\n const track = stream.getVideoTracks()[0]\n const video = document.createElement('video')\n video.srcObject = stream\n await video.play()\n await new Promise((r) => setTimeout(r, 180)) // let the first frame paint\n const base = document.createElement('canvas')\n base.width = video.videoWidth; base.height = video.videoHeight\n base.getContext('2d')!.drawImage(video, 0, 0)\n track.stop()\n baseRef.current = base\n setRects([]); setHasImage(true)\n requestAnimationFrame(redraw)\n } catch (e) {\n // User cancelled the picker, or permission denied — not an error worth shouting.\n if ((e as Error)?.name !== 'NotAllowedError') setError('Não consegui capturar a tela.')\n } finally {\n setBusy(false)\n }\n }\n\n function redraw() {\n const base = baseRef.current, canvas = canvasRef.current\n if (!base || !canvas) return\n canvas.width = base.width; canvas.height = base.height\n const ctx = canvas.getContext('2d')!\n ctx.drawImage(base, 0, 0)\n for (const r of rects) pixelate(ctx, r)\n if (drag) { ctx.strokeStyle = '#111'; ctx.lineWidth = 2; ctx.setLineDash([6, 4]); ctx.strokeRect(drag.x, drag.y, drag.w, drag.h); ctx.setLineDash([]) }\n }\n\n React.useEffect(() => { redraw() }) // redraw on every rects/drag change\n\n function pixelate(ctx: CanvasRenderingContext2D, r: Rect) {\n const { x, y, w, h } = normalize(r)\n if (w < 2 || h < 2) return\n const sw = Math.max(1, Math.floor(w / PIXEL)), sh = Math.max(1, Math.floor(h / PIXEL))\n const tmp = document.createElement('canvas'); tmp.width = sw; tmp.height = sh\n const tctx = tmp.getContext('2d')!\n tctx.drawImage(ctx.canvas, x, y, w, h, 0, 0, sw, sh)\n ctx.imageSmoothingEnabled = false\n ctx.drawImage(tmp, 0, 0, sw, sh, x, y, w, h)\n ctx.imageSmoothingEnabled = true\n }\n\n function normalize(r: Rect): Rect {\n return { x: Math.min(r.x, r.x + r.w), y: Math.min(r.y, r.y + r.h), w: Math.abs(r.w), h: Math.abs(r.h) }\n }\n\n function toCanvasXY(e: React.PointerEvent): { x: number; y: number } {\n const canvas = canvasRef.current!\n const rect = canvas.getBoundingClientRect()\n return { x: (e.clientX - rect.left) * (canvas.width / rect.width), y: (e.clientY - rect.top) * (canvas.height / rect.height) }\n }\n\n async function finish() {\n const canvas = canvasRef.current\n if (!canvas) return\n const blob: Blob | null = await new Promise((res) => canvas.toBlob(res, 'image/png'))\n if (!blob) { setError('Não consegui gerar a imagem.'); return }\n const file = new File([blob], `captura-${Date.now()}.png`, { type: 'image/png' })\n onUse(file, URL.createObjectURL(blob))\n onClose()\n }\n\n return (\n <Takeover open={open} onClose={onClose} label=\"Capturar a tela\" closeLabel=\"Descartar captura\">\n <div className=\"mx-auto flex h-full w-full max-w-5xl flex-col gap-4 p-4\">\n {!hasImage ? (\n <div className=\"flex flex-1 flex-col items-center justify-center gap-4 text-center\">\n <p className=\"max-w-md text-sm text-muted-foreground\">\n Fotografe a tela do sistema para anexar à solicitação. No próximo passo você borra\n nomes, telefones ou valores que não precisam ir para o suporte.\n </p>\n <div className=\"flex flex-wrap items-center justify-center gap-2\">\n <Button onClick={() => capture(true)} disabled={busy}>Capturar esta tela</Button>\n <Button variant=\"outline\" onClick={() => capture(false)} disabled={busy}>Outra janela</Button>\n </div>\n {error && <p className=\"text-sm text-destructive\">{error}</p>}\n </div>\n ) : (\n <>\n <div>\n <h2 className=\"text-base font-semibold\">Esconder informações antes de enviar</h2>\n <p className=\"text-sm text-muted-foreground\">\n Arraste sobre nomes, telefones ou valores que não precisam ir para o suporte. Eles saem borrados na imagem.\n </p>\n </div>\n <div className=\"flex-1 overflow-auto rounded-lg border bg-muted/30 p-2\">\n <canvas\n ref={canvasRef}\n className=\"mx-auto block max-w-full cursor-crosshair touch-none\"\n onPointerDown={(e) => { (e.target as Element).setPointerCapture(e.pointerId); const p = toCanvasXY(e); setDrag({ x: p.x, y: p.y, w: 0, h: 0 }) }}\n onPointerMove={(e) => { if (!drag) return; const p = toCanvasXY(e); setDrag({ ...drag, w: p.x - drag.x, h: p.y - drag.y }) }}\n onPointerUp={() => { if (drag) { setRects((rs) => [...rs, normalize(drag)]); setDrag(null) } }}\n />\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"flex gap-2\">\n <Button variant=\"ghost\" onClick={() => setRects((rs) => rs.slice(0, -1))} disabled={!rects.length}>Desfazer</Button>\n <Button variant=\"ghost\" onClick={() => setRects([])} disabled={!rects.length}>Limpar</Button>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" onClick={onClose}>Descartar captura</Button>\n <Button onClick={finish}>Usar esta imagem</Button>\n </div>\n </div>\n {error && <p className=\"text-sm text-destructive\">{error}</p>}\n </>\n )}\n </div>\n </Takeover>\n )\n}\n","import React from 'react'\nimport { SubpageHeader, Button, Input, Textarea, Thumbnail } from '@fayz-ai/ui'\nimport type { SupportKind, PendingAttachment } from '../types'\nimport { MAX_ATTACHMENTS } from '../types'\nimport { FORM_COPY } from '../lib/vocabulary'\nimport { useSupportStore } from '../store'\nimport { ScreenCaptureEditor } from './ScreenCaptureEditor'\n\nexport interface SupportRequestFormProps {\n kind: SupportKind\n onDone: (result: { id: string; number: number }) => void\n onBack: () => void\n}\n\nconst MIN_DESCRIPTION = 5\n\nexport function SupportRequestForm({ kind, onDone, onBack }: SupportRequestFormProps) {\n const copy = FORM_COPY[kind]\n const create = useSupportStore((s) => s.create)\n const [description, setDescription] = React.useState('')\n const [subject, setSubject] = React.useState('')\n const [pending, setPending] = React.useState<PendingAttachment[]>([])\n const [submitting, setSubmitting] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n const [capture, setCapture] = React.useState<{ mode: 'tab' | 'window' | null; file: File | null } | null>(null)\n const fileRef = React.useRef<HTMLInputElement | null>(null)\n\n const canSubmit = description.trim().length >= MIN_DESCRIPTION && !submitting\n const full = pending.length >= MAX_ATTACHMENTS\n\n React.useEffect(() => () => pending.forEach((p) => p.previewUrl && URL.revokeObjectURL(p.previewUrl)), [pending])\n\n function addFile(file: File, previewUrl?: string) {\n setPending((ps) => ps.length >= MAX_ATTACHMENTS ? ps : [...ps, {\n id: crypto.randomUUID(), file, name: file.name, contentType: file.type || 'application/octet-stream',\n sizeBytes: file.size, previewUrl: previewUrl ?? (file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined),\n }])\n }\n\n function onPaste(e: React.ClipboardEvent) {\n const img = Array.from(e.clipboardData.files).find((f) => f.type.startsWith('image/'))\n if (img) { e.preventDefault(); setCapture({ mode: null, file: img }) }\n }\n\n async function submit() {\n setSubmitting(true); setError(null)\n try {\n const result = await create(\n {\n kind,\n description,\n subject: subject.trim() || null,\n route: typeof location !== 'undefined' ? location.hash || location.pathname : null,\n screenSnapshot: snapshot(),\n },\n pending,\n )\n onDone(result)\n } catch (e) {\n setError((e as Error)?.message ?? 'Não consegui enviar a solicitação.')\n } finally {\n setSubmitting(false)\n }\n }\n\n return (\n <div className=\"flex flex-col gap-4\">\n <SubpageHeader title={copy.title} subtitle={copy.intro} onBack={onBack} parentLabel=\"Suporte\" />\n\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium\">Descrição</label>\n <Textarea\n rows={5}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onPaste={onPaste}\n placeholder=\"O que você estava fazendo, o que esperava que acontecesse e o que apareceu?\"\n />\n <p className=\"text-xs text-muted-foreground\">Pode falar em vez de escrever, ou colar um print aqui. Mínimo de {MIN_DESCRIPTION} caracteres.</p>\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium\">Assunto <span className=\"text-muted-foreground\">(opcional)</span></label>\n <Input value={subject} onChange={(e) => setSubject(e.target.value)} placeholder={copy.subjectPlaceholder} maxLength={200} />\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <label className=\"text-sm font-medium\">Anexos</label>\n <div className=\"flex flex-wrap gap-2\">\n <Button variant=\"outline\" size=\"sm\" disabled={full} onClick={() => setCapture({ mode: 'tab', file: null })}>Capturar esta tela</Button>\n <Button variant=\"outline\" size=\"sm\" disabled={full} onClick={() => setCapture({ mode: 'window', file: null })}>Outra janela</Button>\n <Button variant=\"outline\" size=\"sm\" disabled={full} onClick={() => fileRef.current?.click()}>Arquivo</Button>\n <input\n ref={fileRef} type=\"file\" className=\"hidden\"\n accept=\"image/*,application/pdf,text/plain,text/csv,audio/*,video/mp4,video/webm\"\n onChange={(e) => { const f = e.target.files?.[0]; if (f) addFile(f); e.target.value = '' }}\n />\n </div>\n {full && <p className=\"text-xs text-muted-foreground\">No máximo {MAX_ATTACHMENTS} anexos por solicitação.</p>}\n {pending.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {pending.map((p) => (\n <div key={p.id} className=\"relative flex items-center gap-2 rounded-lg border bg-card p-2 pr-7\">\n {p.previewUrl\n ? <Thumbnail src={p.previewUrl} alt={p.name} className=\"h-10 w-10 rounded object-cover\" />\n : <div className=\"flex h-10 w-10 items-center justify-center rounded bg-muted text-xs text-muted-foreground\">arq</div>}\n <span className=\"max-w-[12rem] truncate text-xs\">{p.name}</span>\n <button\n aria-label=\"Remover anexo\"\n className=\"absolute right-1 top-1 rounded p-0.5 text-muted-foreground hover:bg-muted\"\n onClick={() => setPending((ps) => ps.filter((x) => x.id !== p.id))}\n >×</button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {error && <p className=\"text-sm text-destructive\">{error}</p>}\n\n <div className=\"flex items-center justify-between gap-2 pt-2\">\n <Button variant=\"ghost\" onClick={onBack}>Voltar</Button>\n <Button onClick={submit} disabled={!canSubmit}>{submitting ? 'Enviando…' : 'Enviar solicitação'}</Button>\n </div>\n\n <ScreenCaptureEditor\n open={!!capture}\n autoStart={capture?.mode ?? null}\n initialFile={capture?.file ?? null}\n onClose={() => setCapture(null)}\n onUse={(file, previewUrl) => addFile(file, previewUrl)}\n />\n </div>\n )\n}\n\nfunction snapshot(): Record<string, unknown> {\n if (typeof window === 'undefined') return {}\n return {\n url: location.href,\n hash: location.hash,\n title: document.title,\n viewport: { w: window.innerWidth, h: window.innerHeight },\n at: new Date().toISOString(),\n }\n}\n","import React from 'react'\nimport { Badge, Button, Textarea, Skeleton, Thumbnail, Separator } from '@fayz-ai/ui'\nimport { useSupportStore } from '../store'\nimport { KIND_LABEL, STATUS_LABEL, STATUS_TONE, eventLine, canMessage, canCancel, canValidate } from '../lib/vocabulary'\nimport { signedUrl } from '../data/api'\nimport type { SupportAttachment } from '../types'\n\nexport interface SupportRequestDetailProps {\n onBack?: () => void\n}\n\nexport function SupportRequestDetail({ onBack }: SupportRequestDetailProps) {\n const detail = useSupportStore((s) => s.detail)\n const loading = useSupportStore((s) => s.loadingDetail)\n const sendMessage = useSupportStore((s) => s.sendMessage)\n const cancel = useSupportStore((s) => s.cancel)\n const validate = useSupportStore((s) => s.validate)\n\n const [message, setMessage] = React.useState('')\n const [sending, setSending] = React.useState(false)\n const [confirmingCancel, setConfirmingCancel] = React.useState(false)\n const [reopenReason, setReopenReason] = React.useState('')\n const [reopening, setReopening] = React.useState(false)\n\n React.useEffect(() => { setMessage(''); setConfirmingCancel(false); setReopenReason(''); setReopening(false) }, [detail?.id])\n\n if (loading && !detail) {\n return <div className=\"space-y-3 p-4\"><Skeleton className=\"h-6 w-48\" /><Skeleton className=\"h-24 w-full\" /><Skeleton className=\"h-16 w-full\" /></div>\n }\n if (!detail) {\n return <div className=\"flex h-full items-center justify-center p-8 text-center text-sm text-muted-foreground\">Escolha uma solicitação para ver a conversa com a equipe.</div>\n }\n\n async function send() {\n if (!message.trim()) return\n setSending(true)\n try { await sendMessage(message); setMessage('') } finally { setSending(false) }\n }\n\n return (\n <div className=\"flex h-full flex-col\">\n <div className=\"flex items-start justify-between gap-3 border-b p-4\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {onBack && <button className=\"rounded px-1 hover:bg-muted lg:hidden\" onClick={onBack} aria-label=\"Voltar à lista\">←</button>}\n <span>#{detail.number} · {KIND_LABEL[detail.kind]} · aberta em {fmtDate(detail.createdAt)}</span>\n </div>\n <h2 className=\"mt-1 truncate text-base font-semibold\">{detail.subject || KIND_LABEL[detail.kind]}</h2>\n </div>\n <Badge variant={STATUS_TONE[detail.status]}>{STATUS_LABEL[detail.status]}</Badge>\n </div>\n\n <div className=\"flex-1 space-y-4 overflow-y-auto p-4\">\n <div className=\"rounded-lg border bg-card p-3 text-sm whitespace-pre-wrap\">{detail.description}</div>\n\n {detail.attachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {detail.attachments.map((a) => <AttachmentCard key={a.id} att={a} />)}\n </div>\n )}\n\n {detail.messages.length > 0 && (\n <div className=\"space-y-2\">\n {detail.messages.map((m) => (\n <div key={m.id} className={m.authorKind === 'team' ? 'flex justify-start' : 'flex justify-end'}>\n <div className={`max-w-[85%] rounded-lg px-3 py-2 text-sm ${m.authorKind === 'team' ? 'bg-muted' : 'bg-primary/10'}`}>\n <div className=\"whitespace-pre-wrap\">{m.body}</div>\n <div className=\"mt-1 text-right text-[10px] text-muted-foreground\">{fmtDate(m.createdAt)}</div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n <Separator />\n <ol className=\"space-y-1 text-xs text-muted-foreground\">\n {detail.events.map((e) => (\n <li key={e.id}>• {eventLine(e.type, e.note)} <span className=\"opacity-60\">· {fmtDate(e.createdAt)}</span></li>\n ))}\n </ol>\n </div>\n\n <div className=\"border-t p-3\">\n {canValidate(detail.status) ? (\n reopening ? (\n <div className=\"space-y-2\">\n <Textarea rows={2} value={reopenReason} onChange={(e) => setReopenReason(e.target.value)} placeholder=\"Conte o que ainda não ficou certo.\" />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setReopening(false)}>Voltar</Button>\n <Button size=\"sm\" disabled={!reopenReason.trim()} onClick={() => void validate(false, reopenReason)}>Enviar</Button>\n </div>\n </div>\n ) : (\n <div className=\"flex items-center justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setReopening(true)}>Ainda não resolveu</Button>\n <Button size=\"sm\" onClick={() => void validate(true)}>Ficou bom</Button>\n </div>\n )\n ) : canMessage(detail.status) ? (\n <div className=\"space-y-2\">\n <div className=\"flex items-end gap-2\">\n <Textarea rows={2} value={message} onChange={(e) => setMessage(e.target.value)} placeholder=\"Escreva para a equipe…\" className=\"flex-1\" />\n <Button size=\"sm\" disabled={!message.trim() || sending} onClick={send}>Enviar</Button>\n </div>\n {canCancel(detail.status) && (\n confirmingCancel ? (\n <div className=\"flex items-center justify-end gap-2 text-sm\">\n <span className=\"text-muted-foreground\">Cancelar esta solicitação?</span>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setConfirmingCancel(false)}>Não</Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={() => { setConfirmingCancel(false); void cancel() }}>Cancelar solicitação</Button>\n </div>\n ) : (\n <div className=\"flex justify-end\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setConfirmingCancel(true)}>Cancelar solicitação</Button>\n </div>\n )\n )}\n </div>\n ) : (\n <p className=\"text-center text-xs text-muted-foreground\">Esta solicitação está {STATUS_LABEL[detail.status].toLowerCase()}.</p>\n )}\n </div>\n </div>\n )\n}\n\nfunction AttachmentCard({ att }: { att: SupportAttachment }) {\n const [url, setUrl] = React.useState<string | null>(null)\n React.useEffect(() => {\n let alive = true\n if ((att.contentType ?? '').startsWith('image/')) void signedUrl(att.storagePath).then((u) => { if (alive) setUrl(u) })\n return () => { alive = false }\n }, [att.storagePath, att.contentType])\n return (\n <div className=\"flex items-center gap-2 rounded-lg border bg-card p-2\">\n {url\n ? <Thumbnail src={url} alt={att.name} className=\"h-12 w-12 rounded object-cover\" />\n : <div className=\"flex h-12 w-12 items-center justify-center rounded bg-muted text-[10px] text-muted-foreground\">anexo</div>}\n <div className=\"text-xs\">\n <div className=\"max-w-[10rem] truncate\">{att.name}</div>\n {att.sizeBytes != null && <div className=\"text-muted-foreground\">{fmtSize(att.sizeBytes)}</div>}\n </div>\n </div>\n )\n}\n\nfunction fmtDate(iso: string): string {\n try {\n const d = new Date(iso)\n const today = new Date()\n const sameDay = d.toDateString() === today.toDateString()\n return sameDay\n ? d.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })\n : d.toLocaleDateString('pt-BR', { day: '2-digit', month: '2-digit' }) + ', ' + d.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })\n } catch { return iso }\n}\n\nfunction fmtSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n}\n","import React from 'react'\nimport { Button, Badge, SegmentedControl, Skeleton } from '@fayz-ai/ui'\nimport { useHasPermission } from '@fayz-ai/admin'\nimport { useSupportStore } from '../store'\nimport type { SupportKind, SupportRequest, SupportFilter } from '../types'\nimport { KIND_LABEL, STATUS_LABEL, STATUS_TONE, FILTER_LABEL } from '../lib/vocabulary'\nimport { SupportMenu } from './SupportMenu'\nimport { SupportRequestForm } from './SupportRequestForm'\nimport { SupportRequestDetail } from './SupportRequestDetail'\n\ntype View =\n | { t: 'list' }\n | { t: 'menu' }\n | { t: 'form'; kind: SupportKind }\n | { t: 'created'; number: number }\n | { t: 'detail'; id: string }\n\nconst FILTERS: SupportFilter[] = ['waiting', 'in_progress', 'closed', 'all']\n\nexport interface SupportRequestsPanelProps {\n onAskDico?: () => void\n /** Start straight on the new-request menu (e.g. the \"Nova solicitação\" CTA). */\n startNew?: boolean\n /** Open a ticket as a full page instead of the in-panel detail (host closes\n * the modal and navigates). Falls back to the in-panel detail when absent. */\n onOpenTicket?: (id: string) => void\n}\n\n// Single-column flow: list ↔ detail ↔ menu ↔ form ↔ confirmation. Fits a modal\n// or a column, and opens in place (no navigation away from the help center).\nexport function SupportRequestsPanel({ onAskDico, startNew, onOpenTicket }: SupportRequestsPanelProps) {\n const { requests, loadingList, scope, filter, selectedId } = useSupportStore()\n const setScope = useSupportStore((s) => s.setScope)\n const setFilter = useSupportStore((s) => s.setFilter)\n const loadList = useSupportStore((s) => s.loadList)\n const select = useSupportStore((s) => s.select)\n const refreshUnread = useSupportStore((s) => s.refreshUnread)\n\n const canSeeAll = useHasPermission('support.all', 'read')\n const [view, setView] = React.useState<View>(startNew ? { t: 'menu' } : { t: 'list' })\n\n React.useEffect(() => { void loadList(); void refreshUnread() }, [loadList, refreshUnread])\n\n const openDetail = (id: string) => {\n if (onOpenTicket) { onOpenTicket(id); return }\n void select(id); setView({ t: 'detail', id })\n }\n const backToList = () => { void select(null); setView({ t: 'list' }) }\n\n if (view.t === 'menu') {\n return (\n <Section onBack={backToList}>\n <SupportMenu onPickKind={(kind) => setView({ t: 'form', kind })} onAskDico={onAskDico} />\n </Section>\n )\n }\n if (view.t === 'form') {\n return (\n <SupportRequestForm\n kind={view.kind}\n onBack={() => setView({ t: 'menu' })}\n onDone={(res) => { setView({ t: 'created', number: res.number }); void refreshUnread() }}\n />\n )\n }\n if (view.t === 'created') {\n return (\n <div className=\"flex flex-col items-center justify-center gap-3 p-8 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-success-soft text-success-soft-foreground text-xl\">✓</div>\n <h3 className=\"text-lg font-semibold\">Recebemos sua solicitação</h3>\n <p className=\"text-sm text-muted-foreground\">\n Número <strong>#{view.number}</strong>. Você acompanha o andamento e conversa com a equipe aqui,\n e avisamos quando houver resposta.\n </p>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" onClick={backToList}>Ver minhas solicitações</Button>\n <Button onClick={() => setView({ t: 'menu' })}>Abrir outra</Button>\n </div>\n </div>\n )\n }\n if (view.t === 'detail') {\n return (\n <div className=\"h-full min-h-[22rem]\">\n <SupportRequestDetail onBack={backToList} />\n </div>\n )\n }\n\n // list\n const filterOptions = FILTERS.map((f) => ({ value: f, label: FILTER_LABEL[f] }))\n return (\n <div className=\"flex h-full flex-col gap-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <SegmentedControl options={filterOptions} value={filter} onChange={(v) => setFilter(v as SupportFilter)} />\n <Button onClick={() => setView({ t: 'menu' })}>Nova solicitação</Button>\n </div>\n {canSeeAll && (\n <SegmentedControl\n options={[{ value: 'mine', label: 'Minhas' }, { value: 'all', label: 'Toda a empresa' }]}\n value={scope}\n onChange={(v) => setScope(v as 'mine' | 'all')}\n />\n )}\n <div className=\"min-h-[18rem] flex-1 overflow-y-auto rounded-xl border bg-card\">\n {loadingList ? (\n <div className=\"space-y-2 p-3\">{[0, 1, 2].map((i) => <Skeleton key={i} className=\"h-16 w-full\" />)}</div>\n ) : requests.length === 0 ? (\n <div className=\"p-8 text-center text-sm text-muted-foreground\">Nenhuma solicitação por aqui ainda.</div>\n ) : (\n <ul className=\"divide-y\">\n {requests.map((r) => (\n <li key={r.id}>\n <RequestCard req={r} active={selectedId === r.id} onClick={() => openDetail(r.id)} />\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n )\n}\n\nfunction Section({ children, onBack }: { children: React.ReactNode; onBack: () => void }) {\n return (\n <div className=\"flex flex-col gap-3\">\n <button onClick={onBack} className=\"self-start text-sm text-muted-foreground hover:text-foreground\">← Voltar</button>\n {children}\n </div>\n )\n}\n\nfunction RequestCard({ req, active, onClick }: { req: SupportRequest; active: boolean; onClick: () => void }) {\n return (\n <button onClick={onClick} className={`block w-full p-3 text-left transition-colors hover:bg-accent ${active ? 'bg-accent' : ''}`}>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>#{req.number} · {KIND_LABEL[req.kind]}</span>\n <span>{shortTime(req.createdAt)}</span>\n </div>\n <div className=\"mt-0.5 truncate text-sm font-medium\">{req.subject || KIND_LABEL[req.kind]}</div>\n <div className=\"mt-1\"><Badge variant={STATUS_TONE[req.status]}>{STATUS_LABEL[req.status]}</Badge></div>\n </button>\n )\n}\n\nfunction shortTime(iso: string): string {\n try {\n const d = new Date(iso)\n const sameDay = d.toDateString() === new Date().toDateString()\n return sameDay\n ? d.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })\n : d.toLocaleDateString('pt-BR', { day: '2-digit', month: '2-digit' })\n } catch { return '' }\n}\n","import React from 'react'\nimport { SubpageHeader, Badge, Button, Textarea, Skeleton, Thumbnail, ICON_MAP } from '@fayz-ai/ui'\nimport { useAuth } from '@fayz-ai/admin'\nimport { useSupportStore } from '../store'\nimport { signedUrl } from '../data/api'\nimport {\n KIND_LABEL, STATUS_LABEL, STATUS_TONE, eventLine,\n canMessage, canCancel, canValidate,\n} from '../lib/vocabulary'\nimport type { SupportAttachment } from '../types'\n\n/** Hash navigation without reaching into the shell's private routing. */\nfunction go(path: string) { if (typeof window !== 'undefined') window.location.hash = path }\n\n/** \"Ticket #0001\" — padded like the V1 ticket numbers. */\nfunction ticketNo(n: number): string {\n return `#${String(n).padStart(4, '0')}`\n}\n\n/**\n * Full-page ticket, opened at #/support/ticket/<id>. A small CRM feedback page:\n * the conversation on the left, the ticket's facts on the right, with the slow\n * detail (history, ids, the screens the user passed through) tucked under an\n * \"Informações avançadas\" toggle so the page reads at a glance.\n */\nexport function TicketDetailPage({ id }: { id: string }) {\n const detail = useSupportStore((s) => s.detail)\n const loading = useSupportStore((s) => s.loadingDetail)\n const selectedId = useSupportStore((s) => s.selectedId)\n const select = useSupportStore((s) => s.select)\n const sendMessage = useSupportStore((s) => s.sendMessage)\n const cancel = useSupportStore((s) => s.cancel)\n const validate = useSupportStore((s) => s.validate)\n const user = useAuth().user\n\n const [message, setMessage] = React.useState('')\n const [sending, setSending] = React.useState(false)\n const [confirmingCancel, setConfirmingCancel] = React.useState(false)\n const [reopening, setReopening] = React.useState(false)\n const [reopenReason, setReopenReason] = React.useState('')\n const [advanced, setAdvanced] = React.useState(false)\n\n React.useEffect(() => { void select(id) }, [id, select])\n React.useEffect(() => {\n setMessage(''); setConfirmingCancel(false); setReopening(false); setReopenReason('')\n }, [detail?.id])\n\n const ready = detail && detail.id === id\n // \"Attempted\" = the store finished loading THIS id. Until then we show the\n // skeleton, so an inaccessible/missing ticket never flashes \"não encontrada\"\n // before the fetch even runs.\n const attempted = selectedId === id && !loading\n\n async function send() {\n if (!message.trim()) return\n setSending(true)\n try { await sendMessage(message); setMessage('') } finally { setSending(false) }\n }\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* The app's standard subpage header — hoisted into the shell bar exactly\n like every other detail page (CRM lead, financial payable). No inline\n / custom back style: the back link follows the same cross-module rule\n the whole app uses, so it reads \"← Suporte\" from the center and \"← the\n screen you came from\" when the chat opens it elsewhere. */}\n <SubpageHeader\n title={ready ? `Ticket ${ticketNo(detail.number)}` : 'Ticket'}\n parentLabel=\"Suporte\"\n onBack={() => go('/support')}\n titleTrailing={ready ? <Badge variant={STATUS_TONE[detail.status]}>{STATUS_LABEL[detail.status]}</Badge> : undefined}\n />\n\n {!ready && !attempted ? (\n <TicketSkeleton />\n ) : !ready ? (\n <div className=\"rounded-xl border bg-card p-10 text-center\">\n <p className=\"text-sm font-medium\">Solicitação não encontrada</p>\n <p className=\"mt-1 text-sm text-muted-foreground\">Ela pode ter sido removida, ou pertencer a outra conta.</p>\n <div className=\"mt-4\"><Button variant=\"outline\" onClick={() => go('/support')}>Voltar para o Suporte</Button></div>\n </div>\n ) : (\n <div className=\"grid gap-5 lg:grid-cols-2 lg:items-start\">\n {/* ── LEFT: the ticket's facts ────────────────────────────────── */}\n <div className=\"flex flex-col gap-4\">\n <section className=\"rounded-xl border bg-card p-5\">\n <h1 className=\"text-lg font-semibold leading-snug\">{detail.subject || KIND_LABEL[detail.kind]}</h1>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {KIND_LABEL[detail.kind]} · aberta em {fmtDateTime(detail.createdAt)}\n </p>\n\n <div className=\"mt-4\">\n <h2 className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground\">Descrição</h2>\n <p className=\"mt-1.5 whitespace-pre-wrap text-sm leading-relaxed\">{detail.description}</p>\n </div>\n\n {detail.attachments.length > 0 && (\n <div className=\"mt-4\">\n <h2 className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground\">Anexos</h2>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {detail.attachments.map((a) => <AttachmentCard key={a.id} att={a} />)}\n </div>\n </div>\n )}\n </section>\n\n <div className=\"rounded-xl border bg-card p-5\">\n <h2 className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground\">Informações</h2>\n <dl className=\"mt-3 divide-y divide-border/60 text-sm\">\n <Row label=\"Número\">{ticketNo(detail.number)}</Row>\n <Row label=\"Status\"><Badge variant={STATUS_TONE[detail.status]}>{STATUS_LABEL[detail.status]}</Badge></Row>\n <Row label=\"Tipo\">{KIND_LABEL[detail.kind]}</Row>\n <Row label=\"Solicitante\">{detail.createdBy === user?.id ? (user?.fullName || user?.email || 'Você') : '—'}</Row>\n <Row label=\"Responsável\">Equipe de Suporte</Row>\n <Row label=\"Aberta em\">{fmtDateTime(detail.createdAt)}</Row>\n <Row label=\"Atualizada\">{fmtDateTime(detail.updatedAt)}</Row>\n </dl>\n\n <button\n onClick={() => setAdvanced((v) => !v)}\n className=\"mt-3 flex w-full items-center justify-between rounded-md border-t pt-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground\"\n aria-expanded={advanced}\n >\n <span>Informações avançadas</span>\n <Chevron className={`h-3.5 w-3.5 transition-transform ${advanced ? 'rotate-180' : ''}`} />\n </button>\n {advanced && (\n <div className=\"mt-2 text-xs\">\n <dl className=\"divide-y divide-border/60\">\n {detail.route && <Row label=\"Tela\">{detail.route}</Row>}\n <Row label=\"ID\"><span className=\"font-mono text-[10px] break-all\">{detail.id}</span></Row>\n </dl>\n <ActivityTrail snapshot={detail.screenSnapshot} />\n </div>\n )}\n </div>\n </div>\n\n {/* ── RIGHT: conversation + activities (like the operator console) ─ */}\n <div className=\"flex flex-col gap-4\">\n <section className=\"rounded-xl border bg-card p-5\">\n <h2 className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground\">Conversa com a equipe</h2>\n {detail.messages.length === 0 ? (\n <p className=\"mt-2 text-sm text-muted-foreground\">Ainda não há mensagens. Escreva abaixo para falar com a equipe.</p>\n ) : (\n <div className=\"mt-3 space-y-2\">\n {detail.messages.map((m) => (\n <div key={m.id} className={m.authorKind === 'team' ? 'flex justify-start' : 'flex justify-end'}>\n <div className={`max-w-[85%] rounded-lg px-3 py-2 text-sm ${m.authorKind === 'team' ? 'bg-muted' : 'bg-primary/10'}`}>\n <div className=\"whitespace-pre-wrap\">{m.body}</div>\n <div className=\"mt-1 text-right text-[10px] text-muted-foreground\">{fmtDate(m.createdAt)}</div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n <div className=\"mt-3\">\n {canValidate(detail.status) ? (\n reopening ? (\n <div className=\"space-y-2\">\n <Textarea rows={2} value={reopenReason} onChange={(e) => setReopenReason(e.target.value)} placeholder=\"Conte o que ainda não ficou certo.\" />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setReopening(false)}>Voltar</Button>\n <Button size=\"sm\" disabled={!reopenReason.trim()} onClick={() => void validate(false, reopenReason)}>Enviar</Button>\n </div>\n </div>\n ) : (\n <div className=\"flex items-center justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setReopening(true)}>Ainda não resolveu</Button>\n <Button size=\"sm\" onClick={() => void validate(true)}>Ficou bom</Button>\n </div>\n )\n ) : canMessage(detail.status) ? (\n <div className=\"space-y-2\">\n <div className=\"flex items-end gap-2\">\n <Textarea rows={2} value={message} onChange={(e) => setMessage(e.target.value)} placeholder=\"Escreva para a equipe…\" className=\"flex-1\" />\n <Button size=\"sm\" disabled={!message.trim() || sending} onClick={send}>Enviar</Button>\n </div>\n {canCancel(detail.status) && (\n confirmingCancel ? (\n <div className=\"flex items-center justify-end gap-2 text-sm\">\n <span className=\"text-muted-foreground\">Cancelar esta solicitação?</span>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setConfirmingCancel(false)}>Não</Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={() => { setConfirmingCancel(false); void cancel() }}>Cancelar solicitação</Button>\n </div>\n ) : (\n <div className=\"flex justify-end\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setConfirmingCancel(true)}>Cancelar solicitação</Button>\n </div>\n )\n )}\n </div>\n ) : (\n <p className=\"text-center text-xs text-muted-foreground\">Esta solicitação está {STATUS_LABEL[detail.status].toLowerCase()}.</p>\n )}\n </div>\n </section>\n\n <div className=\"rounded-xl border bg-card p-5\">\n <h2 className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground\">Atividades</h2>\n {detail.events.length === 0 ? (\n <p className=\"mt-2 text-sm text-muted-foreground\">Sem atividades.</p>\n ) : (\n <ol className=\"mt-3 space-y-2.5\">\n {detail.events.map((e) => (\n <li key={e.id} className=\"flex gap-2 text-xs\">\n <span className=\"mt-1 h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/40\" />\n <div className=\"min-w-0\">\n <div>{eventLine(e.type, e.note)}</div>\n <div className=\"text-muted-foreground\">{fmtDate(e.createdAt)}</div>\n </div>\n </li>\n ))}\n </ol>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/** The page's own 2-column skeleton — mirrors the real layout (facts left,\n * conversation right) so the shell doesn't jump when the ticket arrives. */\nfunction TicketSkeleton() {\n return (\n <div className=\"grid gap-5 lg:grid-cols-2 lg:items-start\">\n <div className=\"flex flex-col gap-4\">\n <div className=\"rounded-xl border bg-card p-5\">\n <Skeleton className=\"h-5 w-2/3\" />\n <Skeleton className=\"mt-2 h-3 w-1/3\" />\n <Skeleton className=\"mt-4 h-16 w-full\" />\n </div>\n <div className=\"rounded-xl border bg-card p-5 space-y-2.5\">\n {[0, 1, 2, 3].map((i) => <Skeleton key={i} className=\"h-4 w-full\" />)}\n </div>\n </div>\n <div className=\"flex flex-col gap-4\">\n <div className=\"rounded-xl border bg-card p-5\">\n <Skeleton className=\"h-28 w-full\" />\n <Skeleton className=\"mt-3 h-10 w-full\" />\n </div>\n <div className=\"rounded-xl border bg-card p-5 space-y-2.5\">\n {[0, 1, 2].map((i) => <Skeleton key={i} className=\"h-4 w-5/6\" />)}\n </div>\n </div>\n </div>\n )\n}\n\nfunction Row({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-start justify-between gap-3 py-2 first:pt-0 last:pb-0\">\n <dt className=\"shrink-0 text-muted-foreground\">{label}</dt>\n <dd className=\"min-w-0 text-right font-medium\">{children}</dd>\n </div>\n )\n}\n\nfunction Chevron({ className }: { className?: string }) {\n const C = (ICON_MAP as Record<string, React.ComponentType<{ className?: string }>>).ChevronDown\n return C ? <C className={className} /> : <span className={className}>▾</span>\n}\n\n/** The trail the user left before filing: pages visited and buttons pressed,\n * in order. Reads the rich `activity` when present, else the older\n * `recentScreens` (page labels only) so old tickets still show something. */\nfunction ActivityTrail({ snapshot }: { snapshot: Record<string, unknown> }) {\n const activity = snapshot?.activity\n if (Array.isArray(activity) && activity.length) {\n const items = activity.filter((e): e is { kind: string; label: string; path?: string } =>\n !!e && typeof e === 'object' && typeof (e as { label?: unknown }).label === 'string')\n if (!items.length) return null\n return (\n <div className=\"mt-3 border-t pt-3\">\n <div className=\"mb-1.5 text-muted-foreground\">Trilha até o relato</div>\n <ol className=\"space-y-1\">\n {items.map((e, i) => (\n <li key={i} className=\"flex items-start gap-1.5\">\n <span className=\"mt-[3px] text-muted-foreground/50\">{e.kind === 'action' ? '›' : '•'}</span>\n <span className=\"min-w-0\">\n {e.kind === 'action' ? (\n <>clicou <span className=\"font-medium\">\"{e.label}\"</span></>\n ) : (\n <>\n <span className=\"font-medium\">{e.label}</span>\n {e.path && <span className=\"ml-1 font-mono text-[10px] text-muted-foreground\">{e.path}</span>}\n </>\n )}\n </span>\n </li>\n ))}\n </ol>\n </div>\n )\n }\n const recent = snapshot?.recentScreens\n if (!Array.isArray(recent) || recent.length === 0) return null\n const labels = recent\n .map((r) => (r && typeof r === 'object' ? (r as { label?: string }).label : undefined))\n .filter((l): l is string => !!l)\n if (!labels.length) return null\n return (\n <div className=\"mt-3 border-t pt-3\">\n <div className=\"mb-1 text-muted-foreground\">Telas recentes</div>\n <div>{labels.join(' → ')}</div>\n </div>\n )\n}\n\nfunction AttachmentCard({ att }: { att: SupportAttachment }) {\n const [url, setUrl] = React.useState<string | null>(null)\n React.useEffect(() => {\n let alive = true\n if ((att.contentType ?? '').startsWith('image/')) void signedUrl(att.storagePath).then((u) => { if (alive) setUrl(u) })\n return () => { alive = false }\n }, [att.storagePath, att.contentType])\n return (\n <a\n href={url ?? undefined}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"flex items-center gap-2 rounded-lg border bg-card p-2 transition-colors hover:bg-muted\"\n >\n {url\n ? <Thumbnail src={url} alt={att.name} className=\"h-12 w-12 rounded object-cover\" />\n : <div className=\"flex h-12 w-12 items-center justify-center rounded bg-muted text-[10px] text-muted-foreground\">anexo</div>}\n <div className=\"text-xs\">\n <div className=\"max-w-[10rem] truncate\">{att.name}</div>\n {att.sizeBytes != null && <div className=\"text-muted-foreground\">{fmtSize(att.sizeBytes)}</div>}\n </div>\n </a>\n )\n}\n\nfunction fmtDate(iso: string): string {\n try {\n const d = new Date(iso)\n const sameDay = d.toDateString() === new Date().toDateString()\n return sameDay\n ? d.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })\n : d.toLocaleDateString('pt-BR', { day: '2-digit', month: '2-digit' }) + ', ' + d.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })\n } catch { return iso }\n}\n\nfunction fmtDateTime(iso: string): string {\n try {\n return new Date(iso).toLocaleString('pt-BR', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' })\n } catch { return iso }\n}\n\nfunction fmtSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n}\n\nexport default TicketDetailPage\n","import React from 'react'\nimport { Button, Input, Badge, ModalTask, ICON_MAP } from '@fayz-ai/ui'\nimport { useChatStore, useTenantOptional } from '@fayz-ai/admin'\n\n/** Hash-router navigation without reaching into the shell's private routing. */\nfunction go(path: string) { if (typeof window !== 'undefined') window.location.hash = path }\nimport { useConnectivity } from '@fayz-ai/core'\nimport { useSupportStore } from '../store'\nimport { KIND_LABEL, STATUS_LABEL, STATUS_TONE } from '../lib/vocabulary'\nimport { type FaqItem, type WhatsNewItem, type StatusComponent, toEmbedUrl } from '../lib/content'\nimport { SupportRequestsPanel } from './SupportRequestsPanel'\nimport { TicketDetailPage } from './TicketDetailPage'\n\nexport interface SupportCenterContent {\n faq: FaqItem[]\n whatsNew: WhatsNewItem[]\n statusComponents: StatusComponent[]\n}\n\n/** The ticket id when the route is #/support/ticket/<id>, else null. Re-renders\n * on hash change so the one `/support/*` route serves both the center and a\n * full-page ticket with nested navigation. */\nfunction useTicketRoute(): string | null {\n const read = () => {\n if (typeof window === 'undefined') return null\n const m = window.location.hash.replace(/^#/, '').match(/^\\/support\\/ticket\\/([^/?]+)/)\n return m ? decodeURIComponent(m[1]!) : null\n }\n const [id, setId] = React.useState<string | null>(read)\n React.useEffect(() => {\n const on = () => setId(read())\n window.addEventListener('hashchange', on)\n return () => window.removeEventListener('hashchange', on)\n }, [])\n return id\n}\n\n/** Router seam: the same /support route renders either the help center or a\n * full-page ticket. Kept thin so hook order never changes between the two. */\nexport function SupportCenter({ content }: { content: SupportCenterContent }) {\n const ticketId = useTicketRoute()\n return ticketId ? <TicketDetailPage id={ticketId} /> : <SupportCenterHome content={content} />\n}\n\nfunction Icon({ name, className }: { name: string; className?: string }) {\n const C = (ICON_MAP as Record<string, React.ComponentType<{ className?: string }>>)[name]\n return C ? <C className={className} /> : null\n}\n\n// AI-first help center: ask Dico or search first; status, plan, what's new and\n// your requests sit as quiet cards beside the knowledge base. Clean and minimal.\nfunction SupportCenterHome({ content }: { content: SupportCenterContent }) {\n const [query, setQuery] = React.useState('')\n const [requestsOpen, setRequestsOpen] = React.useState(false)\n const [startNew, setStartNew] = React.useState(false)\n\n const setChatOpen = useChatStore((s) => s.setOpen)\n const queuePrompt = useChatStore((s) => s.queuePrompt)\n\n function askDico() {\n setChatOpen(true)\n const q = query.trim()\n if (q) queuePrompt(q)\n }\n\n const q = query.trim().toLowerCase()\n const faq = q\n ? content.faq.filter((f) =>\n [f.question, f.answer, f.category].filter(Boolean).some((s) => s!.toLowerCase().includes(q)))\n : content.faq\n\n function openRequests(forNew: boolean) { setStartNew(forNew); setRequestsOpen(true) }\n\n return (\n <div className=\"flex flex-col gap-5\">\n {/* Hero — ask first */}\n <div className=\"rounded-2xl border bg-card p-6\">\n <div className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\n <Icon name=\"Sparkles\" className=\"h-4 w-4\" /> Dico · central de ajuda\n </div>\n <h1 className=\"mt-1 text-2xl font-semibold tracking-tight\">Como podemos ajudar?</h1>\n <p className=\"mt-1 text-sm text-muted-foreground\">Pergunte ao Dico ou busque na central de ajuda.</p>\n <div className=\"mt-4 flex gap-2\">\n <div className=\"relative flex-1\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <Icon name=\"Search\" className=\"h-4 w-4\" />\n </span>\n <Input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') askDico() }}\n placeholder=\"Pergunte ou busque… ex.: como recebo pagamentos?\"\n className=\"pl-9\"\n />\n </div>\n <Button onClick={askDico}><Icon name=\"Sparkles\" className=\"mr-1.5 h-4 w-4\" /> Perguntar ao Dico</Button>\n </div>\n </div>\n\n <div className=\"grid gap-5 lg:grid-cols-[1fr_20rem] lg:items-start\">\n {/* Knowledge base */}\n <div className=\"flex flex-col gap-3\">\n <h2 className=\"text-sm font-semibold text-muted-foreground\">Perguntas frequentes e vídeos</h2>\n {faq.length === 0 ? (\n <div className=\"rounded-xl border bg-card p-6 text-center text-sm text-muted-foreground\">\n Nada encontrado para \"{query}\".\n <div className=\"mt-3\"><Button variant=\"outline\" onClick={askDico}>Perguntar ao Dico</Button></div>\n </div>\n ) : (\n <div className=\"divide-y rounded-xl border bg-card\">\n {faq.map((item) => <FaqRow key={item.id} item={item} />)}\n </div>\n )}\n </div>\n\n {/* Side cards */}\n <div className=\"flex flex-col gap-4\">\n <StatusCard components={content.statusComponents} />\n <PlanCard />\n <WhatsNewCard items={content.whatsNew} />\n <RequestsCard onOpen={() => openRequests(false)} onNew={() => openRequests(true)} />\n </div>\n </div>\n\n <ModalTask open={requestsOpen} title=\"Minhas solicitações\" width=\"min(44rem, 94vw)\" onClose={() => setRequestsOpen(false)}>\n <div className=\"p-4\">\n <SupportRequestsPanel\n startNew={startNew}\n onAskDico={() => { setRequestsOpen(false); setChatOpen(true) }}\n onOpenTicket={(id) => { setRequestsOpen(false); go(`/support/ticket/${id}`) }}\n />\n </div>\n </ModalTask>\n </div>\n )\n}\n\nfunction FaqRow({ item }: { item: FaqItem }) {\n const [open, setOpen] = React.useState(false)\n const [playing, setPlaying] = React.useState(false)\n return (\n <div className=\"p-4\">\n <button onClick={() => setOpen((v) => !v)} className=\"flex w-full items-center gap-3 text-left\">\n {item.videoUrl\n ? <Icon name=\"PlayCircle\" className=\"h-5 w-5 shrink-0 text-muted-foreground\" />\n : <Icon name=\"HelpCircle\" className=\"h-5 w-5 shrink-0 text-muted-foreground\" />}\n <span className=\"flex-1 text-sm font-medium\">{item.question}</span>\n <Icon name=\"ChevronDown\" className={`h-4 w-4 shrink-0 text-muted-foreground transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n {open && (\n <div className=\"mt-2 pl-8 text-sm text-muted-foreground\">\n <p className=\"whitespace-pre-wrap\">{item.answer}</p>\n {item.videoUrl && (\n playing ? (\n <div className=\"mt-3 aspect-video w-full max-w-md overflow-hidden rounded-lg border\">\n {/\\.(mp4|webm)(\\?|$)/.test(item.videoUrl)\n ? <video src={item.videoUrl} controls autoPlay className=\"h-full w-full\" />\n : <iframe src={toEmbedUrl(item.videoUrl)} className=\"h-full w-full\" allow=\"autoplay; fullscreen\" allowFullScreen title={item.question} />}\n </div>\n ) : (\n <button onClick={() => setPlaying(true)} className=\"mt-3 inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline\">\n <Icon name=\"PlayCircle\" className=\"h-4 w-4\" /> Assistir ao vídeo\n </button>\n )\n )}\n </div>\n )}\n </div>\n )\n}\n\nfunction Card({ title, icon, action, children }: { title: string; icon: string; action?: React.ReactNode; children: React.ReactNode }) {\n return (\n <div className=\"rounded-xl border bg-card p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2 text-sm font-semibold\"><Icon name={icon} className=\"h-4 w-4 text-muted-foreground\" /> {title}</div>\n {action}\n </div>\n {children}\n </div>\n )\n}\n\nfunction StatusCard({ components }: { components: StatusComponent[] }) {\n const conn = useConnectivity()\n const ok = conn.online\n return (\n <Card title=\"Status\" icon=\"Activity\">\n <div className=\"flex items-center gap-2\">\n <span className={`h-2.5 w-2.5 rounded-full ${ok ? 'bg-success' : 'bg-warning'}`} />\n <span className=\"text-sm\">{ok ? 'Todos os sistemas operacionais' : 'Sem conexão com o servidor'}</span>\n </div>\n <ul className=\"mt-3 space-y-1.5\">\n {components.map((c) => (\n <li key={c.id} className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>{c.label}</span>\n <span className={`inline-flex items-center gap-1 ${ok ? 'text-success' : 'text-warning'}`}>\n <span className={`h-1.5 w-1.5 rounded-full ${ok ? 'bg-success' : 'bg-warning'}`} />\n {ok ? 'Operacional' : 'Instável'}\n </span>\n </li>\n ))}\n </ul>\n </Card>\n )\n}\n\nfunction PlanCard() {\n const org = useTenantOptional()?.org as { plan?: string; name?: string } | undefined\n const plan = org?.plan\n const label = plan ? plan.charAt(0).toUpperCase() + plan.slice(1) : null\n const paid = !!plan && !/free|trial|gratis|grátis/i.test(plan)\n return (\n <Card title=\"Seu plano\" icon=\"CreditCard\" action={<Button variant=\"ghost\" size=\"sm\" onClick={() => go('/settings')}>Gerenciar</Button>}>\n {label ? (\n <div className=\"flex items-center gap-2\">\n <Badge variant={paid ? 'success' : 'secondary'}>{label}</Badge>\n {org?.name && <span className=\"truncate text-xs text-muted-foreground\">{org.name}</span>}\n </div>\n ) : (\n <p className=\"text-xs text-muted-foreground\">Plano não identificado.</p>\n )}\n </Card>\n )\n}\n\nfunction WhatsNewCard({ items }: { items: WhatsNewItem[] }) {\n if (!items.length) return null\n return (\n <Card title=\"Novidades\" icon=\"Rocket\">\n <ul className=\"space-y-2.5\">\n {items.slice(0, 4).map((n) => (\n <li key={n.id}>\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"text-sm font-medium\">{n.title}</span>\n <span className=\"shrink-0 text-[10px] text-muted-foreground\">{fmtDate(n.date)}</span>\n </div>\n {n.note && <p className=\"text-xs text-muted-foreground\">{n.note}</p>}\n </li>\n ))}\n </ul>\n </Card>\n )\n}\n\nfunction RequestsCard({ onOpen, onNew }: { onOpen: () => void; onNew: () => void }) {\n const requests = useSupportStore((s) => s.requests)\n const unread = useSupportStore((s) => s.unread)\n const loadList = useSupportStore((s) => s.loadList)\n const refreshUnread = useSupportStore((s) => s.refreshUnread)\n React.useEffect(() => { void loadList(); void refreshUnread() }, [loadList, refreshUnread])\n const recent = requests.slice(0, 3)\n return (\n <Card\n title=\"Minhas solicitações\"\n icon=\"Inbox\"\n action={unread > 0 ? <span className=\"rounded-full bg-warning px-1.5 text-[10px] font-semibold text-warning-foreground\">{unread}</span> : undefined}\n >\n {recent.length === 0 ? (\n <p className=\"text-xs text-muted-foreground\">Você ainda não abriu nenhuma solicitação.</p>\n ) : (\n <ul className=\"mb-3 space-y-1.5\">\n {recent.map((r) => (\n <li key={r.id}>\n <button onClick={() => go(`/support/ticket/${r.id}`)} className=\"flex w-full items-center justify-between gap-2 text-left hover:text-foreground\">\n <span className=\"min-w-0 truncate text-xs\">#{r.number} {r.subject || KIND_LABEL[r.kind]}</span>\n <Badge variant={STATUS_TONE[r.status]}>{STATUS_LABEL[r.status]}</Badge>\n </button>\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex gap-2\">\n <Button size=\"sm\" className=\"flex-1\" onClick={onNew}>Nova solicitação</Button>\n {recent.length > 0 && <Button size=\"sm\" variant=\"outline\" onClick={onOpen}>Ver todas</Button>}\n </div>\n </Card>\n )\n}\n\nfunction fmtDate(iso: string): string {\n try { return new Date(iso).toLocaleDateString('pt-BR', { day: '2-digit', month: 'short' }) } catch { return iso }\n}\n\nexport default SupportCenter\n"]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { getSupabaseClientOptional } from '@fayz-ai/core';
|
|
2
|
+
|
|
3
|
+
// src/data/console.ts
|
|
4
|
+
function client() {
|
|
5
|
+
const c = getSupabaseClientOptional();
|
|
6
|
+
if (!c) throw new Error("Supabase client not available");
|
|
7
|
+
return c;
|
|
8
|
+
}
|
|
9
|
+
function toConsoleRequest(r) {
|
|
10
|
+
return {
|
|
11
|
+
id: r.id,
|
|
12
|
+
number: r.number,
|
|
13
|
+
kind: r.kind,
|
|
14
|
+
subject: r.subject ?? null,
|
|
15
|
+
description: r.description,
|
|
16
|
+
status: r.status,
|
|
17
|
+
priority: r.priority ?? "normal",
|
|
18
|
+
route: r.route ?? null,
|
|
19
|
+
createdBy: r.created_by,
|
|
20
|
+
createdByName: r.created_by_name ?? null,
|
|
21
|
+
createdAt: r.created_at,
|
|
22
|
+
updatedAt: r.updated_at,
|
|
23
|
+
tenantId: r.tenant_id,
|
|
24
|
+
tenantName: r.tenant_name ?? null,
|
|
25
|
+
tenantSlug: r.tenant_slug ?? null,
|
|
26
|
+
linkedLeadId: r.linked_lead_id ?? null,
|
|
27
|
+
linkedLeadName: r.linked_lead_name ?? null,
|
|
28
|
+
messageCount: Number(r.message_count ?? 0)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
var toMessage = (r) => ({
|
|
32
|
+
id: r.id,
|
|
33
|
+
requestId: r.request_id,
|
|
34
|
+
authorKind: r.author_kind,
|
|
35
|
+
authorId: r.author_id ?? null,
|
|
36
|
+
body: r.body,
|
|
37
|
+
createdAt: r.created_at
|
|
38
|
+
});
|
|
39
|
+
var toEvent = (r) => ({
|
|
40
|
+
id: r.id,
|
|
41
|
+
requestId: r.request_id,
|
|
42
|
+
type: r.type,
|
|
43
|
+
note: r.note ?? null,
|
|
44
|
+
createdAt: r.created_at
|
|
45
|
+
});
|
|
46
|
+
var toAttachment = (r) => ({
|
|
47
|
+
id: r.id,
|
|
48
|
+
requestId: r.request_id,
|
|
49
|
+
storagePath: r.storage_path,
|
|
50
|
+
name: r.name,
|
|
51
|
+
sizeBytes: r.size_bytes ?? null,
|
|
52
|
+
contentType: r.content_type ?? null,
|
|
53
|
+
createdAt: r.created_at
|
|
54
|
+
});
|
|
55
|
+
function toDetail(payload) {
|
|
56
|
+
const r = payload?.request;
|
|
57
|
+
if (!r) return null;
|
|
58
|
+
return {
|
|
59
|
+
...toConsoleRequest(r),
|
|
60
|
+
screenSnapshot: r.screen_snapshot ?? {},
|
|
61
|
+
messages: (payload.messages ?? []).map(toMessage),
|
|
62
|
+
events: (payload.events ?? []).map(toEvent),
|
|
63
|
+
attachments: (payload.attachments ?? []).map(toAttachment)
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function isOperator() {
|
|
67
|
+
try {
|
|
68
|
+
const { data, error } = await client().rpc("support_is_operator");
|
|
69
|
+
if (error) return false;
|
|
70
|
+
return data === true;
|
|
71
|
+
} catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function consoleListRequests(statuses, search) {
|
|
76
|
+
const { data, error } = await client().rpc("support_console_requests", {
|
|
77
|
+
p_statuses: statuses && statuses.length ? statuses : null,
|
|
78
|
+
p_search: search && search.trim() ? search.trim() : null
|
|
79
|
+
});
|
|
80
|
+
if (error) throw error;
|
|
81
|
+
return (data ?? []).map(toConsoleRequest);
|
|
82
|
+
}
|
|
83
|
+
async function consoleDetail(requestId) {
|
|
84
|
+
const { data, error } = await client().rpc("support_console_detail", { p_request_id: requestId });
|
|
85
|
+
if (error) throw error;
|
|
86
|
+
return toDetail(data);
|
|
87
|
+
}
|
|
88
|
+
async function consoleSetStatus(requestId, status, note) {
|
|
89
|
+
const { data, error } = await client().rpc("support_console_set_status", { p_request_id: requestId, p_status: status, p_note: note ?? null });
|
|
90
|
+
if (error) throw error;
|
|
91
|
+
return toDetail(data);
|
|
92
|
+
}
|
|
93
|
+
async function consoleSetPriority(requestId, priority) {
|
|
94
|
+
const { data, error } = await client().rpc("support_console_set_priority", { p_request_id: requestId, p_priority: priority });
|
|
95
|
+
if (error) throw error;
|
|
96
|
+
return toDetail(data);
|
|
97
|
+
}
|
|
98
|
+
async function consoleReply(requestId, body) {
|
|
99
|
+
const { data, error } = await client().rpc("support_console_reply", { p_request_id: requestId, p_body: body });
|
|
100
|
+
if (error) throw error;
|
|
101
|
+
return toDetail(data);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export { consoleDetail, consoleListRequests, consoleReply, consoleSetPriority, consoleSetStatus, isOperator };
|
|
105
|
+
//# sourceMappingURL=chunk-5K7VA5VP.js.map
|
|
106
|
+
//# sourceMappingURL=chunk-5K7VA5VP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/console.ts"],"names":[],"mappings":"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","file":"chunk-5K7VA5VP.js","sourcesContent":["import { getSupabaseClientOptional } from '@fayz-ai/core'\nimport type {\n SupportKind, SupportStatus, SupportPriority,\n SupportMessage, SupportEvent, SupportAttachment,\n} from '../types'\n\n// The helpdesk (console) data layer — cross-tenant, and therefore NOT plain\n// PostgREST + RLS like data/api.ts. Every call goes through a SECURITY DEFINER\n// RPC that checks the caller is a seeded operator (plg_support_operators) and\n// carries the tenant boundary itself. A non-operator gets an error, never rows.\n\ntype AnyClient = any\n\nfunction client(): AnyClient {\n const c = getSupabaseClientOptional()\n if (!c) throw new Error('Supabase client not available')\n return c as AnyClient\n}\n\n/** A request as the operator sees it — with the originating tenant and a count. */\nexport interface ConsoleRequest {\n id: string\n number: number\n kind: SupportKind\n subject: string | null\n description: string\n status: SupportStatus\n priority: SupportPriority\n route: string | null\n createdBy: string\n createdByName: string | null\n createdAt: string\n updatedAt: string\n tenantId: string\n tenantName: string | null\n tenantSlug: string | null\n linkedLeadId: string | null\n linkedLeadName: string | null\n messageCount: number\n}\n\nexport interface ConsoleDetail extends ConsoleRequest {\n screenSnapshot: Record<string, unknown>\n messages: SupportMessage[]\n events: SupportEvent[]\n attachments: SupportAttachment[]\n}\n\nfunction toConsoleRequest(r: any): ConsoleRequest {\n return {\n id: r.id, number: r.number, kind: r.kind, subject: r.subject ?? null,\n description: r.description, status: r.status, priority: r.priority ?? 'normal',\n route: r.route ?? null, createdBy: r.created_by, createdByName: r.created_by_name ?? null,\n createdAt: r.created_at, updatedAt: r.updated_at,\n tenantId: r.tenant_id, tenantName: r.tenant_name ?? null, tenantSlug: r.tenant_slug ?? null,\n linkedLeadId: r.linked_lead_id ?? null, linkedLeadName: r.linked_lead_name ?? null,\n messageCount: Number(r.message_count ?? 0),\n }\n}\n\nconst toMessage = (r: any): SupportMessage => ({\n id: r.id, requestId: r.request_id, authorKind: r.author_kind,\n authorId: r.author_id ?? null, body: r.body, createdAt: r.created_at,\n})\nconst toEvent = (r: any): SupportEvent => ({\n id: r.id, requestId: r.request_id, type: r.type, note: r.note ?? null, createdAt: r.created_at,\n})\nconst toAttachment = (r: any): SupportAttachment => ({\n id: r.id, requestId: r.request_id, storagePath: r.storage_path, name: r.name,\n sizeBytes: r.size_bytes ?? null, contentType: r.content_type ?? null, createdAt: r.created_at,\n})\n\nfunction toDetail(payload: any): ConsoleDetail | null {\n const r = payload?.request\n if (!r) return null\n return {\n ...toConsoleRequest(r),\n screenSnapshot: r.screen_snapshot ?? {},\n messages: (payload.messages ?? []).map(toMessage),\n events: (payload.events ?? []).map(toEvent),\n attachments: (payload.attachments ?? []).map(toAttachment),\n }\n}\n\n/** Is the signed-in user a helpdesk operator? Gates the console menu entry. */\nexport async function isOperator(): Promise<boolean> {\n try {\n const { data, error } = await client().rpc('support_is_operator')\n if (error) return false\n return data === true\n } catch {\n return false\n }\n}\n\nexport async function consoleListRequests(statuses?: SupportStatus[], search?: string): Promise<ConsoleRequest[]> {\n const { data, error } = await client().rpc('support_console_requests', {\n p_statuses: statuses && statuses.length ? statuses : null,\n p_search: search && search.trim() ? search.trim() : null,\n })\n if (error) throw error\n return ((data as any[]) ?? []).map(toConsoleRequest)\n}\n\nexport async function consoleDetail(requestId: string): Promise<ConsoleDetail | null> {\n const { data, error } = await client().rpc('support_console_detail', { p_request_id: requestId })\n if (error) throw error\n return toDetail(data)\n}\n\nexport async function consoleSetStatus(requestId: string, status: SupportStatus, note?: string): Promise<ConsoleDetail | null> {\n const { data, error } = await client().rpc('support_console_set_status', { p_request_id: requestId, p_status: status, p_note: note ?? null })\n if (error) throw error\n return toDetail(data)\n}\n\nexport async function consoleSetPriority(requestId: string, priority: SupportPriority): Promise<ConsoleDetail | null> {\n const { data, error } = await client().rpc('support_console_set_priority', { p_request_id: requestId, p_priority: priority })\n if (error) throw error\n return toDetail(data)\n}\n\nexport async function consoleReply(requestId: string, body: string): Promise<ConsoleDetail | null> {\n const { data, error } = await client().rpc('support_console_reply', { p_request_id: requestId, p_body: body })\n if (error) throw error\n return toDetail(data)\n}\n\nexport async function consoleLinkLead(requestId: string, leadId: string, leadName?: string): Promise<ConsoleDetail | null> {\n const { data, error } = await client().rpc('support_console_link_lead', { p_request_id: requestId, p_lead_id: leadId, p_lead_name: leadName ?? null })\n if (error) throw error\n return toDetail(data)\n}\n"]}
|