@fayz-ai/plugin-shop 0.11.2 → 0.12.0

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.
Files changed (37) hide show
  1. package/dist/{ShopPage-YB5ZWECJ.js → ShopPage-VVLOH3RF.js} +67 -28
  2. package/dist/ShopPage-VVLOH3RF.js.map +1 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +684 -141
  6. package/dist/index.js.map +1 -1
  7. package/dist/integrations/abacatepay/connectorDef.d.ts.map +1 -1
  8. package/dist/integrations/abacatepay/data.d.ts +40 -0
  9. package/dist/integrations/abacatepay/data.d.ts.map +1 -0
  10. package/dist/integrations/abacatepay/limits.d.ts +26 -0
  11. package/dist/integrations/abacatepay/limits.d.ts.map +1 -0
  12. package/dist/integrations/abacatepay/sync.d.ts +88 -0
  13. package/dist/integrations/abacatepay/sync.d.ts.map +1 -0
  14. package/dist/integrations/neochef/connectorDef.d.ts +12 -0
  15. package/dist/integrations/neochef/connectorDef.d.ts.map +1 -0
  16. package/dist/integrations/neochef/data.d.ts +54 -0
  17. package/dist/integrations/neochef/data.d.ts.map +1 -0
  18. package/dist/integrations/neochef/index.d.ts +8 -0
  19. package/dist/integrations/neochef/index.d.ts.map +1 -0
  20. package/dist/integrations/neochef/limits.d.ts +26 -0
  21. package/dist/integrations/neochef/limits.d.ts.map +1 -0
  22. package/dist/integrations/neochef/mapping.d.ts +31 -0
  23. package/dist/integrations/neochef/mapping.d.ts.map +1 -0
  24. package/dist/integrations/neochef/mark.d.ts +21 -0
  25. package/dist/integrations/neochef/mark.d.ts.map +1 -0
  26. package/dist/integrations/neochef/types.d.ts +71 -0
  27. package/dist/integrations/neochef/types.d.ts.map +1 -0
  28. package/dist/integrations/vindi/connectorDef.d.ts +25 -6
  29. package/dist/integrations/vindi/connectorDef.d.ts.map +1 -1
  30. package/dist/views/ContentPage.d.ts.map +1 -1
  31. package/dist/views/NewOrderCharge.d.ts +14 -2
  32. package/dist/views/NewOrderCharge.d.ts.map +1 -1
  33. package/dist/views/NewOrderPage.d.ts.map +1 -1
  34. package/dist/views/new-order-rules.d.ts +10 -1
  35. package/dist/views/new-order-rules.d.ts.map +1 -1
  36. package/package.json +5 -5
  37. package/dist/ShopPage-YB5ZWECJ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/views/ShipOrderForm.tsx","../src/views/SenderLocationModal.tsx","../src/views/new-order-rules.ts","../src/views/ShipWithCarrier.tsx","../src/views/ShipmentActions.tsx","../src/views/OrderProviderLinks.tsx","../src/views/OrderPaymentDetail.tsx","../src/views/order-actions.ts","../src/views/OrderDetailView.tsx","../src/views/NewOrderCharge.tsx","../src/views/NewOrderPage.tsx","../src/views/ShopPage.tsx"],"names":["React","jsx","useState","service","jsxs","Truck","getSupabaseClientOptional","useEffect","STATUS_LABEL","ExternalLink","money","currency","dateTime","data","useCallback","OrderDetailBlock","SharedOrderDetailView","Button","Check","Copy","useMemo","Fragment","Modal","ModalPortal","ModalOverlay","ModalContent","ModalHeader","ModalTitle","ModalBody","ModalFooter","getShopProvider","PersonLink","adminNavigateTo"],"mappings":"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","file":"ShopPage-YB5ZWECJ.js","sourcesContent":["import React, { useState } from 'react'\nimport { errorMessage } from '../settings/error-message'\nimport { Truck } from 'lucide-react'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\nimport type { ShopProvider } from '@fayz-ai/shop'\n\n// ---------------------------------------------------------------------------\n// \"Marquei como enviado\" — the merchant packs the box and types what the\n// courier gave them.\n//\n// Deliberately NOT a modal: this block already lives inside the order page, and\n// a dialog over it would be the second layer the founder ruled out. It is a\n// two-step inline form instead — the button opens it, and confirming is the\n// second click, because creating a shipment moves stock off the shelf.\n//\n// Carrier is free text on purpose. The store that delivers by car is as real as\n// the one that ships by Correios, and a dropdown of carriers would be the SDK\n// telling a merchant how to run their own delivery.\n// ---------------------------------------------------------------------------\n\nexport interface ShipOrderFormProps {\n orderId: string\n provider: () => ShopProvider\n /** Called after the shipment exists, so the page can re-read it. */\n onShipped: () => void\n}\n\nexport function ShipOrderForm({ orderId, provider, onShipped }: ShipOrderFormProps) {\n const [open, setOpen] = useState(false)\n const [carrier, setCarrier] = useState('')\n const [tracking, setTracking] = useState('')\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n // The merchant console reads the store through SupabaseShopProvider, which\n // has no createFulfillment — only the storefront's REST provider does. Falling\n // back to the RPC directly is what keeps the button on the page: without it\n // the whole dispatch step disappeared from the only screen that needs it.\n const db = getSupabaseClientOptional() as { rpc?: (fn: string, args: unknown) => Promise<{ error: { message: string } | null }> } | null\n const supported = typeof provider().createFulfillment === 'function' || typeof db?.rpc === 'function'\n if (!supported) return null\n\n async function ship() {\n setSaving(true)\n setError(null)\n try {\n if (typeof provider().createFulfillment === 'function') {\n await provider().createFulfillment?.({\n orderId,\n carrier: carrier.trim() || undefined,\n trackingCode: tracking.trim() || undefined,\n })\n } else {\n const { error: rpcError } = await db!.rpc!('shop_create_fulfillment', {\n p_order_id: orderId,\n p_location_id: null,\n p_carrier: carrier.trim() || null,\n p_tracking: tracking.trim() || null,\n p_items: null,\n p_notes: null,\n })\n if (rpcError) throw new Error(rpcError.message)\n }\n setOpen(false)\n setCarrier('')\n setTracking('')\n onShipped()\n } catch (err: unknown) {\n // The RPC's own refusals are the useful ones: \"nothing left to fulfill\"\n // and \"not a member of this store\" both tell the merchant what happened.\n setError(errorMessage(err))\n } finally {\n setSaving(false)\n }\n }\n\n if (!open) {\n return (\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n data-testid=\"order-ship\"\n className=\"mt-2 inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\"\n >\n <Truck className=\"h-3.5 w-3.5\" />\n Marcar como enviado\n </button>\n )\n }\n\n return (\n <div className=\"mt-2 space-y-2 rounded-md border bg-muted/30 p-3\">\n <div className=\"fz-fields fz-fields-2 gap-2\">\n <label className=\"block\">\n <span className=\"text-xs font-medium text-muted-foreground\">Transportadora</span>\n <input\n value={carrier}\n onChange={(event) => setCarrier(event.target.value)}\n placeholder=\"Correios, motoboy, entrega própria…\"\n data-testid=\"order-ship-carrier\"\n className=\"mt-1 w-full rounded-md border bg-background px-2.5 py-1.5 text-sm outline-none focus:border-primary\"\n />\n </label>\n <label className=\"block\">\n <span className=\"text-xs font-medium text-muted-foreground\">Código de rastreio</span>\n <input\n value={tracking}\n onChange={(event) => setTracking(event.target.value)}\n placeholder=\"Opcional\"\n data-testid=\"order-ship-tracking\"\n className=\"mt-1 w-full rounded-md border bg-background px-2.5 py-1.5 text-sm outline-none focus:border-primary\"\n />\n </label>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {tracking.trim()\n ? 'Com rastreio o pedido já sai como «em trânsito» e o comprador vê o código.'\n : 'Sem rastreio o envio fica como «aguardando coleta» — dá para completar depois.'}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Confirmar dá baixa no estoque destes itens.\n </p>\n {error && (\n <p className=\"rounded-md border border-red-200 bg-red-50 px-2.5 py-1.5 text-xs text-red-800\">{error}</p>\n )}\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={ship}\n disabled={saving}\n data-testid=\"order-ship-confirm\"\n className=\"rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground transition hover:opacity-90 disabled:opacity-60\"\n >\n {saving ? 'Registrando…' : 'Confirmar envio'}\n </button>\n <button\n type=\"button\"\n onClick={() => { setOpen(false); setError(null) }}\n className=\"rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\"\n >\n Cancelar\n </button>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { CrudRecordModal } from '@fayz-ai/admin'\nimport { getShopProvider } from '@fayz-ai/shop'\nimport { buildStockLocationsRegistry } from '../data/registries'\nimport type { ShopProvider, StockLocation } from '@fayz-ai/shop'\n\n// ---------------------------------------------------------------------------\n// The dispatch location, opened from wherever the carrier refused it.\n//\n// No form of its own: the Locais registry already declares every field, label,\n// group and rule, and a second copy here would drift the first time either\n// changes. This is the glue — which record, and how to read and write it —\n// over the shared CrudRecordModal.\n// ---------------------------------------------------------------------------\n\n/**\n * The same row `shop-shipping-label` reads: active, dispatching online, default\n * first. Resolved here too rather than passed in, so the screen showing the\n * refusal and the function that produced it cannot disagree about which\n * warehouse is wrong.\n */\nexport function pickDispatchLocation(\n locations: StockLocation[],\n locationId?: string | null,\n): StockLocation | null {\n if (locationId) return locations.find((place) => place.id === locationId) ?? null\n const alive = locations.filter((place) => place.status !== 'archived')\n const dispatching = alive.filter((place) => place.shipsOnline !== false)\n // A store whose only place has \"despacha pedidos\" off still has a place to\n // edit — and the form carries that switch. Offering it beats telling a\n // merchant with one warehouse that they have none.\n const pool = dispatching.length > 0 ? dispatching : alive\n return pool.find((place) => place.isDefault) ?? pool[0] ?? null\n}\n\nexport interface SenderLocationModalProps {\n open: boolean\n onClose: () => void\n /** Called after a save, so the caller can retry what the carrier refused. */\n onSaved: () => void\n provider?: () => ShopProvider\n /** Which place. Defaults to the one the label function reads. */\n locationId?: string | null\n}\n\nexport function SenderLocationModal({\n open, onClose, onSaved, provider, locationId,\n}: SenderLocationModalProps) {\n const resolve = provider ?? (() => getShopProvider())\n const registry = React.useMemo(() => buildStockLocationsRegistry(resolve), [provider])\n const chosen = React.useRef<string | null>(null)\n\n return (\n <CrudRecordModal\n open={open}\n onClose={onClose}\n onSaved={onSaved}\n entityDef={registry.entity}\n title=\"Remetente das etiquetas\"\n description=\"É o que vai impresso na etiqueta, e é o que a transportadora confere.\"\n emptyLabel=\"Esta loja não tem nenhum local que despacha pedidos. Cadastre um em Entrega ▸ Locais.\"\n load={async () => {\n const rows = (await resolve().listStockLocations?.()) ?? []\n const place = pickDispatchLocation(rows, locationId)\n chosen.current = place?.id ?? null\n return place as unknown as Record<string, any> | null\n }}\n save={async (data) => {\n if (!chosen.current) throw new Error('Nenhum local de despacho para salvar.')\n return (await resolve().updateStockLocation?.(chosen.current, data)) as unknown as Record<string, any>\n }}\n />\n )\n}\n","import type { CheckoutSettlement } from '@fayz-ai/shop'\n\n// ---------------------------------------------------------------------------\n// The two decisions the new-order screen makes that are worth locking down:\n// what an acquirer's answer means, and what a draft is still missing.\n// ---------------------------------------------------------------------------\n\nexport type ChargeOutcome = 'waiting' | 'paid' | 'expired' | 'failed'\n\n/**\n * What the merchant is told while a Pix is open.\n *\n * `pending` is the ordinary answer for as long as the buyer has the QR code in\n * front of them, and reading it as a refusal put \"o pagamento não foi\n * concluído\" on screen one second after the charge was opened. Only the three\n * dead states end the wait; anything else — including a state this build has\n * never heard of — keeps waiting.\n */\nexport function chargeOutcome(state: CheckoutSettlement['state'] | undefined): ChargeOutcome {\n if (state === 'paid') return 'paid'\n if (state === 'expired') return 'expired'\n if (state === 'failed' || state === 'cancelled') return 'failed'\n return 'waiting'\n}\n\nexport type NewOrderEnding = 'charge' | 'received' | 'later'\n\nexport interface NewOrderDraft {\n lineCount: number\n /** Lines whose product has options but no variant chosen yet. */\n unresolvedVariants: number\n customerName: string\n customerEmail: string\n customerPhone: string\n /** Digits only. Empty when the merchant did not ask for it. */\n customerDocument: string\n documentValid: boolean\n /** True once the address carries a postcode the store can quote. */\n delivers: boolean\n addressComplete: boolean\n}\n\n/**\n * The one sentence that stands between a draft and the act — or null.\n *\n * The acquirer's requirements only apply to the charge ending: a counter sale\n * settled in cash needs no CPF, and demanding one there would be this screen\n * inventing a rule nobody has.\n */\nexport function validateNewOrder(draft: NewOrderDraft, ending: NewOrderEnding): string | null {\n if (draft.lineCount === 0) return 'Adicione pelo menos um produto ao pedido.'\n if (draft.unresolvedVariants > 0) {\n return 'Escolha a variação de cada produto que tem mais de uma opção.'\n }\n if (!draft.customerName.trim()) return 'Informe o cliente.'\n if (draft.delivers && !draft.addressComplete) return 'Complete o endereço de entrega.'\n if (draft.customerDocument && !draft.documentValid) return 'Esse CPF/CNPJ não confere.'\n if (ending === 'charge') {\n const missing = [\n !draft.customerEmail.trim() && 'e-mail',\n !draft.customerDocument.trim() && 'CPF',\n !draft.customerPhone.trim() && 'telefone',\n ].filter(Boolean)\n if (missing.length) {\n // Names WHERE the fix is: these three live on the customer's record, and\n // the screen turns this sentence into a button that opens it.\n return `Para gerar a cobrança o adquirente exige ${missing.join(', ')} no cadastro do cliente.`\n }\n }\n return null\n}\n\n/**\n * Is this the \"one e-mail, one customer\" index refusing a second row?\n *\n * Postgres says it as `duplicate key value violates unique constraint\n * \"shop_customers_tenant_email_idx\"`, which is true and useless to a merchant\n * mid-call: the person is already their customer, and what they want is that\n * record. Matched by SQLSTATE first, by the sentence only as a fallback for the\n * transports that drop the code.\n */\nexport function isDuplicateEmail(error: unknown): boolean {\n const code = String((error as { code?: string } | null)?.code ?? '')\n if (code === '23505') return true\n const message = String((error as { message?: string } | null)?.message ?? error ?? '')\n return /duplicate key value/iu.test(message) && /email/iu.test(message)\n}\n\n/**\n * Is the carrier complaining about the SENDER rather than this order?\n *\n * Its refusals name the field — \"O campo from.phone é obrigatório quando service\n * for 4\" — and every `from.*` one is about the store's dispatch location, which\n * the merchant can fix without leaving the screen. `to.*` is about the order,\n * and a button offering to edit the warehouse would be a wrong turn.\n */\nexport function isSenderRefusal(message: string | null | undefined): boolean {\n const text = String(message ?? '')\n return /\\bfrom\\./iu.test(text) || /remetente/iu.test(text)\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Button, Skeleton } from '@fayz-ai/ui'\nimport { useConnectors } from '@fayz-ai/admin'\nimport { AlertTriangle, CheckCircle2, ExternalLink, Loader2, Printer, RefreshCw, Truck } from 'lucide-react'\nimport { resolveShippingLabelProvider } from '@fayz-ai/shop'\nimport { errorMessage } from '../settings/error-message'\nimport { SenderLocationModal } from './SenderLocationModal'\nimport { isSenderRefusal } from './new-order-rules'\nimport type { ShippingLabel, ShippingLabelOption, ShopProvider } from '@fayz-ai/shop'\n\n// ---------------------------------------------------------------------------\n// Despatching through the carrier the store connected.\n//\n// \"Marcar como enviado\" was the whole dispatch story: the merchant went to the\n// carrier's own site, bought a label there, came back and typed the tracking\n// code by hand. With Melhor Envio connected, all of that is one screen — quote\n// this order, buy the label, print it, and let the code arrive on its own.\n//\n// The purchase is the only step that spends money, so it is the only one behind\n// a second click: choosing a service opens a confirmation that restates WHAT is\n// being bought and FOR HOW MUCH, and only the button in there spends.\n// Everything else (quoting, printing, tracking) is free and repeatable.\n// ---------------------------------------------------------------------------\n\nconst money = (value: number) =>\n new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(Number(value) || 0)\n\nconst eta = (option: ShippingLabelOption) => {\n const min = option.etaMinDays ?? null\n const max = option.etaMaxDays ?? null\n if (!min && !max) return null\n if (min && max && min !== max) return `${min}–${max} dias`\n return `${max ?? min} dia(s)`\n}\n\nexport interface ShipWithCarrierProps {\n orderId: string\n /**\n * The app's shop provider. WHO carries the parcel is resolved from the\n * registry, but reading the store's own dispatch location is ordinary data\n * access — and the global runtime provider is not the app's, so without this\n * the sender form found no locations in a store that has them.\n */\n provider?: () => ShopProvider\n /** The carrier the merchant chose, when they chose one. */\n preferredCarrier?: string | null\n /** Called after the label exists, so the order can re-read its shipments. */\n onShipped: () => void\n}\n\nexport function ShipWithCarrier({ orderId, provider, preferredCarrier, onShipped }: ShipWithCarrierProps) {\n // WHO issues the label is resolved, never assumed: this screen names no\n // carrier, and the second one to be implemented needs nothing here.\n const { connectors } = useConnectors({ hostPluginId: 'shop', includeGrants: false })\n const carrier = useMemo(() => resolveShippingLabelProvider({\n connected: (connectors ?? []).filter((c) => c.state === 'connected').map((c) => c.slug),\n preferred: preferredCarrier,\n }), [connectors, preferredCarrier])\n const [options, setOptions] = useState<ShippingLabelOption[] | null>(null)\n const [label, setLabel] = useState<ShippingLabel | null>(null)\n const [chosen, setChosen] = useState<number | null>(null)\n const [open, setOpen] = useState(false)\n const [confirming, setConfirming] = useState(false)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [unavailable, setUnavailable] = useState(false)\n // A refusal about `from.*` is about the store's own record, not this order.\n const [fixingSender, setFixingSender] = useState(false)\n // The purchase just landed on THIS screen: worth saying out loud once, then\n // getting out of the way — the block below is the permanent record.\n const [celebrating, setCelebrating] = useState(false)\n\n const load = useCallback(async () => {\n setBusy(true)\n setError(null)\n try {\n const result = await carrier?.quote(orderId)\n if (!result) { setUnavailable(true); return }\n setOptions(result.options)\n setLabel(result.label)\n setChosen(result.options[0]?.serviceId ?? null)\n } catch (err: unknown) {\n // A store with no carrier connected is the ordinary case, not a failure:\n // the block simply does not appear, and \"marcar como enviado\" still does.\n const message = errorMessage(err)\n if (/conectada|not_connected|404/iu.test(message)) setUnavailable(true)\n else setError(message)\n } finally {\n setBusy(false)\n }\n }, [orderId, carrier])\n\n // Only when asked: quoting on every order page would spend the store's rate\n // limit at the carrier to draw a block nobody opened.\n useEffect(() => { if (open && options === null) void load() }, [open, options, load])\n\n // A label already bought is worth showing without a click.\n useEffect(() => {\n let cancelled = false\n carrier?.quote(orderId)\n .then((result) => {\n if (cancelled || !result?.label) return\n setLabel(result.label)\n setOptions(result.options)\n setOpen(true)\n })\n .catch(() => { /* silence: the block stays closed */ })\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [orderId])\n\n // The success banner is a moment, not a state of the order.\n useEffect(() => {\n if (!celebrating) return\n const timer = setTimeout(() => setCelebrating(false), 8000)\n return () => clearTimeout(timer)\n }, [celebrating])\n\n // No carrier connected (or none implemented): the block disappears and the\n // manual \"marcar como enviado\" is the whole story, as it was.\n if (!carrier || unavailable) return null\n\n async function buy() {\n // The quote can go stale while the confirmation sits open (a reload, a\n // second tab). Spending money on a service that is no longer on the list\n // is worse than sending the merchant back to pick again.\n const service = options?.find((option) => option.serviceId === chosen)\n if (!chosen || !service) {\n setConfirming(false)\n setError('A cotação mudou. Escolha o serviço de novo antes de comprar.')\n return\n }\n setBusy(true)\n setError(null)\n try {\n const bought = await carrier?.buy(orderId, chosen)\n // No label id is not a purchase: showing \"etiqueta comprada\" over it\n // would hide a dispatch that never happened.\n if (!bought?.labelId) {\n throw new Error('A transportadora aceitou o pedido mas não devolveu a etiqueta. Tente de novo em instantes.')\n }\n setLabel(bought)\n setConfirming(false)\n setCelebrating(true)\n onShipped()\n } catch (err: unknown) {\n // Stay on the confirmation: the refusal belongs next to the button that\n // caused it, and retrying is one click, not four.\n setError(errorMessage(err))\n } finally {\n setBusy(false)\n }\n }\n\n async function refreshTracking() {\n setBusy(true)\n setError(null)\n try {\n const tracking = await carrier?.track(orderId)\n setLabel((current) => (current ? { ...current, tracking: tracking ?? current.tracking } : current))\n onShipped()\n } catch (err: unknown) {\n setError(errorMessage(err))\n } finally {\n setBusy(false)\n }\n }\n\n async function print() {\n setBusy(true)\n setError(null)\n try {\n const url = (await carrier?.print(orderId)) ?? label?.labelUrl\n if (url) window.open(url, '_blank', 'noopener')\n else setError('A transportadora ainda não liberou o PDF da etiqueta.')\n } catch (err: unknown) {\n setError(errorMessage(err))\n } finally {\n setBusy(false)\n }\n }\n\n // ── Bought: the label, its code, and the two things left to do with it ─────\n if (label?.labelId) {\n return (\n <div\n className={`mt-2 space-y-2 rounded-md border p-3 transition-colors ${\n celebrating ? 'border-emerald-300 bg-emerald-50/60' : 'bg-muted/30'\n }`}\n data-testid=\"carrier-label\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"flex items-center gap-1.5 text-sm font-medium\">\n {celebrating && <CheckCircle2 className=\"h-4 w-4 shrink-0 text-emerald-600\" />}\n Etiqueta comprada\n </span>\n {label.tracking?.code && (\n <span className=\"font-mono text-xs\">{label.tracking.code}</span>\n )}\n </div>\n {celebrating && (\n <p className=\"text-xs text-emerald-800\" role=\"status\" data-testid=\"carrier-bought\">\n Compra concluída. Imprima a etiqueta e cole no pacote — o rastreio passa a chegar sozinho.\n </p>\n )}\n {label.tracking?.status && (\n <p className=\"text-xs text-muted-foreground\">Situação na transportadora: {label.tracking.status}</p>\n )}\n <CarrierError error={error} onFix={() => setFixingSender(true)} />\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" onClick={print} disabled={busy} data-testid=\"carrier-print\">\n <Printer className=\"mr-1.5 h-3.5 w-3.5\" />\n Imprimir etiqueta\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={refreshTracking} disabled={busy} data-testid=\"carrier-track\">\n <RefreshCw className=\"mr-1.5 h-3.5 w-3.5\" />\n Atualizar rastreio\n </Button>\n {label.tracking?.url && (\n <a href={label.tracking.url} target=\"_blank\" rel=\"noreferrer\"\n className=\"inline-flex items-center rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\">\n <ExternalLink className=\"mr-1.5 h-3.5 w-3.5\" />\n Acompanhar\n </a>\n )}\n </div>\n </div>\n )\n }\n\n if (!open) {\n return (\n <button type=\"button\" onClick={() => setOpen(true)} data-testid=\"carrier-open\"\n className=\"mt-2 inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\">\n <Truck className=\"h-3.5 w-3.5\" />\n Comprar etiqueta na {carrier.label}\n </button>\n )\n }\n\n const service = options?.find((option) => option.serviceId === chosen)\n // Confirming a row that is no longer in the quote is not confirming anything:\n // the screen falls back to the picker instead of locking on a ghost.\n const pending = confirming ? service : undefined\n\n return (\n <div className=\"mt-2 space-y-2 rounded-md border bg-muted/30 p-3\" data-testid=\"carrier-buy\">\n {/* The skeleton wears the shape of what is coming — a radio, two lines of\n service and a price — so the block does not jump when the carrier\n answers. */}\n {busy && options === null && (\n <div className=\"space-y-1.5\" data-testid=\"carrier-quoting\" aria-busy=\"true\" aria-label=\"Cotando com a transportadora\">\n {[0, 1].map((row) => (\n <div key={row} className=\"flex items-center gap-2 rounded-md border p-2\">\n <Skeleton className=\"h-4 w-4 shrink-0 rounded-full\" />\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-40\" />\n <Skeleton className=\"h-3 w-16\" />\n </div>\n <Skeleton className=\"h-3.5 w-14\" />\n </div>\n ))}\n </div>\n )}\n\n {options?.length === 0 && (\n <p className=\"text-sm text-muted-foreground\">\n A transportadora não atende este endereço com os dados deste pedido.\n </p>\n )}\n\n {options && options.length > 0 && (\n // Locked while the confirmation is open: the panel below quotes a price,\n // and a radio that still moves makes it a promise about the wrong row.\n <div className={`space-y-1.5 ${pending ? 'pointer-events-none opacity-50' : ''}`}>\n {options.map((option) => (\n <label key={option.serviceId}\n className={`flex cursor-pointer items-center gap-2 rounded-md border p-2 text-sm transition ${\n chosen === option.serviceId ? 'border-primary bg-primary/5' : 'hover:bg-muted/50'\n }`}>\n <input type=\"radio\" name=\"carrier-service\" checked={chosen === option.serviceId}\n disabled={Boolean(pending)}\n onChange={() => setChosen(option.serviceId)} data-testid=\"carrier-service\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{option.carrier} · {option.name}</span>\n {eta(option) && <span className=\"block text-xs text-muted-foreground\">{eta(option)}</span>}\n </span>\n <span className=\"tabular-nums\">{money(option.price)}</span>\n </label>\n ))}\n </div>\n )}\n\n {/* While confirming, the refusal belongs inside the panel, next to the\n button that produced it. */}\n {!pending && <CarrierError error={error} onFix={() => setFixingSender(true)} />}\n\n <SenderLocationModal\n provider={provider}\n open={fixingSender}\n onClose={() => setFixingSender(false)}\n // Back to the picker: the sender changed, so the quote is re-read and\n // the merchant confirms against the new prices, not the old panel.\n onSaved={() => { setFixingSender(false); setConfirming(false); setError(null); void load() }}\n />\n\n {pending ? (\n <div className=\"space-y-2 rounded-md border border-amber-300 bg-amber-50 px-2.5 py-2\"\n role=\"alertdialog\" aria-label=\"Confirmar compra da etiqueta\" data-testid=\"carrier-confirm-panel\">\n <div className=\"flex items-start gap-2\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-600\" />\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <p className=\"text-xs font-medium text-amber-900\">Confirmar compra da etiqueta</p>\n {/* What is being bought, restated: the merchant agrees to this row\n and this price, not to whatever the list happens to show. */}\n <div className=\"flex items-baseline justify-between gap-2 rounded border border-amber-200 bg-white/70 px-2 py-1.5\">\n <span className=\"min-w-0\">\n <span className=\"block truncate text-xs\">{pending.carrier} · {pending.name}</span>\n {eta(pending) && <span className=\"block text-[11px] text-muted-foreground\">{eta(pending)}</span>}\n </span>\n <span className=\"shrink-0 text-sm font-semibold tabular-nums\">{money(pending.price)}</span>\n </div>\n <p className=\"text-[11px] text-amber-900\">\n O valor é debitado do saldo da sua conta na {carrier.label}. A etiqueta sai na hora e o\n rastreio passa a chegar sozinho.\n </p>\n </div>\n </div>\n\n <CarrierError error={error} onFix={() => setFixingSender(true)} />\n\n <div className=\"flex justify-end gap-2\">\n <Button size=\"sm\" variant=\"outline\" onClick={() => { setConfirming(false); setError(null) }}\n disabled={busy} data-testid=\"carrier-confirm-back\">\n Voltar\n </Button>\n <Button size=\"sm\" onClick={buy} disabled={busy} data-testid=\"carrier-confirm\">\n {busy && <Loader2 className=\"mr-1.5 h-3.5 w-3.5 animate-spin\" />}\n {busy ? 'Comprando…' : error ? 'Tentar de novo' : `Comprar ${money(pending.price)}`}\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"flex justify-end gap-2\">\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setOpen(false)} data-testid=\"carrier-close\">\n Fechar\n </Button>\n <Button size=\"sm\" onClick={() => { setError(null); setConfirming(true) }}\n disabled={busy || !chosen} data-testid=\"carrier-buy-start\">\n Selecionar etiqueta\n </Button>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * The carrier's refusal, with the way out when there is one.\n *\n * \"O campo from.phone é obrigatório\" is about the STORE's record, not this\n * order — and the merchant reading it here should not have to go looking for\n * Entrega ▸ Locais to fix it.\n */\nfunction CarrierError({ error, onFix }: { error: string | null; onFix: () => void }) {\n if (!error) return null\n return (\n <div role=\"alert\" data-testid=\"carrier-error\"\n className=\"rounded-md border border-red-200 bg-red-50 px-2.5 py-1.5 text-xs text-red-800\">\n <p>{error}</p>\n {isSenderRefusal(error) && (\n <button type=\"button\" onClick={onFix} data-testid=\"carrier-fix-sender\"\n className=\"mt-1 font-medium underline underline-offset-2\">\n Completar o cadastro do remetente\n </button>\n )}\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport { errorMessage } from '../settings/error-message'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\nimport type { ShopProvider } from '@fayz-ai/shop'\n\n// ---------------------------------------------------------------------------\n// What happens to a shipment AFTER it exists: the tracking code the courier\n// only hands over later, the delivery, and the run that came back.\n//\n// Without these a shipment created without tracking was a dead end on screen —\n// stuck at \"aguardando coleta\" forever, with the merchant's only recourse being\n// the database. Same seam as ShipOrderForm: the provider when it has the\n// method, the RPC when it does not (the merchant console's provider does not).\n// ---------------------------------------------------------------------------\n\ntype Db = {\n rpc?: (fn: string, args: unknown) => Promise<{ error: { message: string } | null }>\n from?: (t: string) => any\n}\n\nexport interface ShipmentActionsProps {\n fulfillmentId: string\n status: string\n hasTracking: boolean\n provider: () => ShopProvider\n onChanged: () => void\n}\n\nexport function ShipmentActions({ fulfillmentId, status, hasTracking, provider, onChanged }: ShipmentActionsProps) {\n const [mode, setMode] = useState<'idle' | 'tracking' | 'cancel'>('idle')\n const [tracking, setTracking] = useState('')\n // A transportadora e o link vêm junto do código, não numa segunda visita: é\n // o mesmo instante em que o lojista tem o papel da coleta na mão. Sem o link,\n // o comprador recebe um código e nenhum lugar onde colar.\n const [trackingUrl, setTrackingUrl] = useState('')\n const [carrier, setCarrier] = useState('')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const db = getSupabaseClientOptional() as Db | null\n if (status === 'cancelled' || status === 'returned') return null\n if (!db && typeof provider().shipFulfillment !== 'function') return null\n\n async function run(action: () => Promise<void>) {\n setBusy(true); setError(null)\n try {\n await action()\n setMode('idle'); setTracking(''); setTrackingUrl(''); setCarrier('')\n onChanged()\n } catch (err: unknown) {\n setError(errorMessage(err))\n } finally { setBusy(false) }\n }\n\n const saveTracking = () => run(async () => {\n const code = tracking.trim()\n if (!code) throw new Error('Informe o código que a transportadora deu.')\n const url = trackingUrl.trim() || null\n const who = carrier.trim() || null\n if (typeof provider().shipFulfillment === 'function') {\n await provider().shipFulfillment?.(fulfillmentId, {\n trackingCode: code,\n trackingUrl: url ?? undefined,\n carrier: who ?? undefined,\n })\n return\n }\n const { error: rpcError } = await db!.rpc!('shop_ship_fulfillment', {\n p_fulfillment_id: fulfillmentId, p_tracking: code, p_tracking_url: url, p_carrier: who,\n })\n if (rpcError) throw new Error(rpcError.message)\n })\n\n // Passa pela FUNÇÃO, como as irmãs (0060). Antes era um UPDATE direto na\n // tabela: dependia de a RLS deixar o navegador escrever `fulfillments`, não\n // conferia se quem clicou é da loja, e reescrevia a hora da entrega a cada\n // clique. Também dava \"entregue\" sem `shipped_at` — e a linha do tempo do\n // comprador pulava do pedido direto para a porta.\n const markDelivered = () => run(async () => {\n if (typeof provider().deliverFulfillment === 'function') {\n await provider().deliverFulfillment?.(fulfillmentId)\n return\n }\n const { error: rpcError } = await db!.rpc!('shop_deliver_fulfillment', {\n p_fulfillment_id: fulfillmentId, p_delivered_at: null,\n })\n if (rpcError) throw new Error(rpcError.message)\n })\n\n const cancelShipment = () => run(async () => {\n if (typeof provider().cancelFulfillment === 'function') {\n await provider().cancelFulfillment?.(fulfillmentId)\n return\n }\n const { error: rpcError } = await db!.rpc!('shop_cancel_fulfillment', {\n p_fulfillment_id: fulfillmentId, p_note: null,\n })\n if (rpcError) throw new Error(rpcError.message)\n })\n\n const link = 'rounded px-1.5 py-0.5 text-[11px] font-medium transition hover:bg-muted'\n\n if (mode === 'tracking') {\n return (\n <div className=\"mt-1.5 space-y-1.5\">\n <input\n value={carrier}\n onChange={(event) => setCarrier(event.target.value)}\n placeholder=\"Transportadora (Correios, motoboy…)\"\n data-testid=\"shipment-carrier-input\"\n className=\"w-full rounded-md border bg-background px-2 py-1 text-xs outline-none focus:border-primary\"\n />\n <input\n value={tracking}\n onChange={(event) => setTracking(event.target.value)}\n placeholder=\"Código de rastreio\"\n data-testid=\"shipment-tracking-input\"\n className=\"w-full rounded-md border bg-background px-2 py-1 text-xs outline-none focus:border-primary\"\n />\n <input\n value={trackingUrl}\n onChange={(event) => setTrackingUrl(event.target.value)}\n placeholder=\"Link de rastreio (opcional)\"\n data-testid=\"shipment-tracking-url-input\"\n className=\"w-full rounded-md border bg-background px-2 py-1 text-xs outline-none focus:border-primary\"\n />\n {error && <p className=\"text-[11px] text-red-700\">{error}</p>}\n <div className=\"flex gap-1.5\">\n <button type=\"button\" onClick={saveTracking} disabled={busy} data-testid=\"shipment-tracking-save\"\n className=\"rounded bg-primary px-2 py-0.5 text-[11px] font-medium text-primary-foreground disabled:opacity-60\">\n {busy ? 'Salvando…' : 'Salvar'}\n </button>\n <button type=\"button\" onClick={() => { setMode('idle'); setError(null) }} className={`border ${link}`}>Voltar</button>\n </div>\n </div>\n )\n }\n\n if (mode === 'cancel') {\n return (\n <div className=\"mt-1.5 space-y-1.5 rounded border border-red-200 bg-red-50 p-1.5\">\n <p className=\"text-[11px] text-red-900\">Cancelar devolve os itens ao estoque.</p>\n {error && <p className=\"text-[11px] text-red-700\">{error}</p>}\n <div className=\"flex gap-1.5\">\n <button type=\"button\" onClick={cancelShipment} disabled={busy} data-testid=\"shipment-cancel-confirm\"\n className=\"rounded bg-red-600 px-2 py-0.5 text-[11px] font-medium text-white disabled:opacity-60\">\n {busy ? 'Cancelando…' : 'Cancelar envio'}\n </button>\n <button type=\"button\" onClick={() => { setMode('idle'); setError(null) }} className={`border bg-background ${link}`}>Voltar</button>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"mt-1.5 flex flex-wrap items-center gap-1.5\">\n {!hasTracking && (\n <button type=\"button\" onClick={() => setMode('tracking')} data-testid=\"shipment-add-tracking\" className={`border ${link}`}>\n Informar rastreio\n </button>\n )}\n {status !== 'delivered' && (\n <button type=\"button\" onClick={markDelivered} disabled={busy} data-testid=\"shipment-deliver\" className={`border ${link}`}>\n {busy ? 'Salvando…' : 'Marcar como entregue'}\n </button>\n )}\n {status !== 'delivered' && (\n <button type=\"button\" onClick={() => setMode('cancel')} data-testid=\"shipment-cancel\" className={`border border-red-200 text-red-700 hover:bg-red-50 ${link}`}>\n Cancelar envio\n </button>\n )}\n {error && <p className=\"w-full text-[11px] text-red-700\">{error}</p>}\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { OrderDetailBlock } from '@fayz-ai/admin'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// \"Onde este pedido já chegou\" — the row of plg_shop_order_links, read as prose.\n//\n// Deliberately generic: it renders whatever links the order HAS rather than\n// asking about a provider by name. That is what makes the invoice appear the day\n// something starts writing it, and the next acquirer appear without this file\n// being edited — the same reason the table has no CHECK on `source`.\n//\n// Read-only on purpose. Re-sending is the connector's own act and belongs to the\n// connector's panel and to the clock; a second trigger buried in the order page\n// would be a second place to keep in step.\n// ---------------------------------------------------------------------------\n\ninterface OrderLink {\n id: string\n source: string\n kind: string\n external_id: string\n external_number: string | null\n url: string | null\n status: string | null\n synced_at: string | null\n}\n\nconst SOURCE_LABEL: Record<string, string> = {\n bling: 'Bling',\n appmax: 'AppMax',\n abacatepay: 'AbacatePay',\n}\n\nconst KIND_LABEL: Record<string, string> = {\n sales_order: 'Pedido de venda',\n payment: 'Cobrança',\n nfe: 'Nota fiscal',\n}\n\nconst STATUS_LABEL: Record<string, string> = {\n filed: 'Registrado',\n pending: 'Aguardando',\n paid: 'Pago',\n failed: 'Falhou',\n refunded: 'Estornado',\n draft: 'Rascunho',\n}\n\nconst dateTime = (iso: string) =>\n new Intl.DateTimeFormat('pt-BR', {\n day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit',\n }).format(new Date(iso))\n\nexport function OrderProviderLinks({ orderId }: { orderId: string }) {\n const [links, setLinks] = useState<OrderLink[] | null>(null)\n\n useEffect(() => {\n let cancelled = false\n const db = getSupabaseClientOptional() as unknown as { from: (t: string) => any } | null\n if (!db) return\n db.from('plg_shop_order_links')\n .select('id,source,kind,external_id,external_number,url,status,synced_at')\n .eq('order_id', orderId)\n // A COBRANÇA não entra aqui: ela vive no bloco de pagamento, junto do\n // valor e da forma. Listar de novo era o mesmo código de Pix duas vezes\n // na mesma tela, e a segunda não acrescentava nada.\n .neq('kind', 'payment')\n .order('created_at', { ascending: true })\n .then(({ data }: { data: OrderLink[] | null }) => {\n if (!cancelled) setLinks(data ?? [])\n })\n return () => { cancelled = true }\n }, [orderId])\n\n // Nothing yet is not worth a block: a store with no ERP and no acquirer would\n // otherwise carry an empty panel on every order forever.\n if (!links || links.length === 0) return null\n\n return (\n <OrderDetailBlock title=\"Nos sistemas conectados\" hint=\"Onde este pedido já chegou\">\n <div className=\"space-y-2 text-sm\" data-testid=\"order-provider-links\">\n {links.map((link) => (\n <div key={link.id} className=\"flex flex-wrap items-baseline justify-between gap-x-3 gap-y-0.5\">\n <span className=\"font-medium\">\n {SOURCE_LABEL[link.source] ?? link.source} · {KIND_LABEL[link.kind] ?? link.kind}\n </span>\n <span className=\"text-muted-foreground\">\n {link.url ? (\n <a href={link.url} target=\"_blank\" rel=\"noreferrer\" className=\"font-mono text-xs text-primary hover:underline\">\n {link.external_number ?? link.external_id}\n </a>\n ) : (\n <span className=\"font-mono text-xs\">{link.external_number ?? link.external_id}</span>\n )}\n {link.status && <span className=\"ml-2 text-xs\">{STATUS_LABEL[link.status] ?? link.status}</span>}\n </span>\n {link.synced_at && (\n <span className=\"w-full text-[11px] text-muted-foreground\">\n atualizado em {dateTime(link.synced_at)}\n </span>\n )}\n </div>\n ))}\n </div>\n </OrderDetailBlock>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Check, Copy, ExternalLink } from 'lucide-react'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Quem cobrou, e com que referência.\n//\n// O bloco de pagamento dizia \"Pix\" e a hora — o suficiente para saber QUE foi\n// pago, e nada para responder à ligação do cliente dizendo que pagou e não\n// recebeu. Falta sempre a mesma coisa: qual provedor, qual cobrança, e o código\n// que dá para colar no suporte deles.\n//\n// Vive dentro do bloco de pagamento de propósito. A mesma informação existia\n// solta em \"Nos sistemas conectados\", três blocos abaixo, onde ninguém procura\n// dinheiro.\n// ---------------------------------------------------------------------------\n\nconst PROVIDER_LABEL: Record<string, string> = {\n abacatepay: 'AbacatePay',\n appmax: 'AppMax',\n mercadopago: 'Mercado Pago',\n stripe: 'Stripe',\n}\n\nconst STATUS_LABEL: Record<string, string> = {\n paid: 'Confirmado',\n pending: 'Aguardando',\n failed: 'Recusado',\n refunded: 'Estornado',\n}\n\ninterface PaymentLink {\n source: string\n external_id: string\n url: string | null\n status: string | null\n}\n\nexport function OrderPaymentDetail({ orderId }: { orderId: string }) {\n const [link, setLink] = useState<PaymentLink | null>(null)\n const [copied, setCopied] = useState(false)\n\n useEffect(() => {\n let cancelled = false\n const db = getSupabaseClientOptional() as unknown as { from: (t: string) => any } | null\n if (!db) return\n db.from('plg_shop_order_links')\n .select('source,external_id,url,status')\n .eq('order_id', orderId)\n .eq('kind', 'payment')\n .order('created_at', { ascending: false })\n .limit(1)\n .then(({ data }: { data: PaymentLink[] | null }) => {\n if (!cancelled) setLink(data?.[0] ?? null)\n })\n return () => { cancelled = true }\n }, [orderId])\n\n // Um pedido pago à mão não tem cobrança de ninguém, e uma linha vazia dizendo\n // isso seria pior que o silêncio.\n if (!link) return null\n\n async function copy() {\n if (!link) return\n try {\n await navigator.clipboard.writeText(link.external_id)\n setCopied(true)\n setTimeout(() => setCopied(false), 2400)\n } catch {\n /* sem área de transferência: o código está na tela para copiar à mão */\n }\n }\n\n return (\n <div data-testid=\"order-payment-detail\" className=\"mt-1 space-y-1.5\">\n <div className=\"flex items-baseline justify-between gap-3 text-sm\">\n <span className=\"text-muted-foreground\">Cobrado por</span>\n <span className=\"font-medium\">\n {PROVIDER_LABEL[link.source] ?? link.source}\n {link.status && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n {STATUS_LABEL[link.status] ?? link.status}\n </span>\n )}\n </span>\n </div>\n <div className=\"flex items-baseline justify-between gap-3 text-sm\">\n <span className=\"text-muted-foreground\">Comprovante</span>\n <span className=\"flex items-center gap-1.5\">\n <code className=\"max-w-[16rem] truncate font-mono text-xs\" title={link.external_id}>\n {link.external_id}\n </code>\n <button\n type=\"button\"\n onClick={copy}\n aria-label=\"Copiar o código da cobrança\"\n data-testid=\"order-payment-copy\"\n className=\"rounded p-1 text-muted-foreground transition hover:bg-muted hover:text-foreground\"\n >\n {copied ? <Check className=\"h-3.5 w-3.5\" /> : <Copy className=\"h-3.5 w-3.5\" />}\n </button>\n {link.url && (\n <a\n href={link.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label=\"Abrir no provedor\"\n className=\"rounded p-1 text-muted-foreground transition hover:bg-muted hover:text-foreground\"\n >\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n )}\n </span>\n </div>\n </div>\n )\n}\n","import { getSupabaseClientOptional } from '@fayz-ai/core'\nimport type { ShopProvider } from '@fayz-ai/shop'\n\n// ---------------------------------------------------------------------------\n// Order actions that more than one screen performs — the order page one at a\n// time, the order list a selection at a time.\n//\n// Cancelling in particular is NEVER a plain status update: it has to give the\n// reserved stock back and close the receivable, and only the RPC does all\n// three. That rule lived inside the detail page; the list would have grown a\n// second, thinner copy of it, and the copies would have drifted the first time\n// the RPC changed.\n// ---------------------------------------------------------------------------\n\n/** Cancels one order through whichever door this store's provider offers. */\nexport async function cancelShopOrder(\n provider: ShopProvider,\n orderId: string,\n reason?: string,\n): Promise<void> {\n if (typeof provider.cancelOrder === 'function') {\n await provider.cancelOrder(orderId, reason)\n return\n }\n // The admin console's provider has no cancelOrder — call the RPC directly.\n const db = getSupabaseClientOptional() as\n | { rpc?: (fn: string, args: unknown) => Promise<{ error: { message: string } | null }> }\n | null\n if (!db?.rpc) throw new Error('Cancelamento indisponível nesta loja.')\n const { error } = await db.rpc('shop_cancel_order', { p_order_id: orderId, p_reason: reason ?? null })\n if (error) throw new Error(error.message)\n}\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { errorMessage } from '../settings/error-message'\nimport {\n adminNavigateTo, PersonLink,\n OrderDetailView as SharedOrderDetailView, OrderDetailSkeleton, OrderDetailBlock, OrderDetailRow,\n type OrderDetailData, type OrderDetailInstallment, type OrderDetailTone,\n} from '@fayz-ai/admin'\nimport { shopCustomerLookup } from './customerLookup'\nimport { ShipOrderForm } from './ShipOrderForm'\nimport { ShipWithCarrier } from './ShipWithCarrier'\nimport { ShipmentActions } from './ShipmentActions'\nimport { OrderProviderLinks } from './OrderProviderLinks'\nimport { OrderPaymentDetail } from './OrderPaymentDetail'\nimport { cancelShopOrder } from './order-actions'\nimport type { Order, ShopProvider } from '@fayz-ai/shop'\nimport { getSupabaseClientOptional, usePluginRuntimeOptional } from '@fayz-ai/core'\n\n/** A shipment as stored in public.fulfillments (0018). */\ntype Fulfillment = {\n id: string\n status: string\n carrier: string | null\n service: string | null\n tracking_code: string | null\n tracking_url: string | null\n shipped_at: string | null\n estimated_delivery_at: string | null\n delivered_at: string | null\n}\n\ntype Bill = {\n id: string\n amount: number\n paid_amount: number | null\n status: string\n due_date: string\n installment_number: number | null\n}\ntype Receivable = {\n balance: { amount: number; paid: number; balance: number; status: string; reference_number: string | null }\n bills: Bill[]\n}\n\nconst money = (v: number, currency = 'BRL') =>\n new Intl.NumberFormat('pt-BR', { style: 'currency', currency }).format(Number(v) || 0)\nconst dateTime = (iso: string) =>\n new Intl.DateTimeFormat('pt-BR', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }).format(new Date(iso))\nconst dateOnly = (iso: string) => new Date(iso).toLocaleDateString('pt-BR')\n\n/**\n * \"Pago em\" — e por que ele às vezes não tem hora.\n *\n * `paid_at` é DERIVADO da data do recibo (`payment_date`, uma DATE), então o\n * que chega é meia-noite UTC. Renderizar isso como data e hora produzia\n * \"12/08/2026, 21:00\" para um Pix pago às 12:54 de 13/08 — hora inventada e\n * ainda um dia atrás, por causa do fuso. Meia-noite exata em UTC é lida como\n * \"só a data\"; qualquer outro instante é um horário de verdade e aparece.\n */\nconst paidAtLabel = (iso: string) => {\n const at = new Date(iso)\n const midnightUtc = at.getUTCHours() === 0 && at.getUTCMinutes() === 0 && at.getUTCSeconds() === 0\n return midnightUtc\n ? new Intl.DateTimeFormat('pt-BR', {\n day: '2-digit', month: '2-digit', year: 'numeric', timeZone: 'UTC',\n }).format(at)\n : dateTime(iso)\n}\n\nconst PAYMENT_LABEL: Record<string, string> = {\n pix: 'Pix', credit_card: 'Cartão de crédito', debit_card: 'Cartão de débito',\n boleto: 'Boleto', cash: 'Dinheiro', other: 'Outro',\n}\n/** Shared with the orders table: one order vocabulary, not two. */\nexport const ORDER_STATUS_LABEL: Record<string, string> = {\n paid: 'Pago', pending: 'Aguardando pagamento', refunded: 'Estornado',\n partially_refunded: 'Estorno parcial', voided: 'Cancelado',\n fulfilled: 'Enviado', unfulfilled: 'Não enviado', partially_fulfilled: 'Envio parcial',\n open: 'Aberto', cancelled: 'Cancelado', archived: 'Arquivado',\n}\n// `pending` is what a bill row carries; `open` is what the balance view derives\n// from it. Both mean the same thing to the merchant, so both get a label —\n// without this the instalment line printed the raw English status.\nconst RECEIVABLE_LABEL: Record<string, string> = {\n open: 'Em aberto', pending: 'Em aberto', partial: 'Parcialmente recebido',\n paid: 'Recebido', overdue: 'Vencido', cancelled: 'Cancelado',\n}\nconst SHIPMENT_LABEL: Record<string, string> = {\n pending: 'Aguardando coleta', in_transit: 'Em trânsito', delivered: 'Entregue',\n failed: 'Falhou', returned: 'Devolvido', cancelled: 'Cancelado',\n}\n\n/** Map a shop/receivable status string to the shared component's tone. */\nfunction toneOf(value: string): OrderDetailTone {\n switch (value) {\n case 'paid': case 'fulfilled': case 'delivered': return 'success'\n case 'pending': case 'partial': case 'partially_fulfilled': case 'open': case 'in_transit': return 'warning'\n case 'refunded': case 'partially_refunded': case 'voided': case 'cancelled': case 'overdue': case 'failed': case 'returned': return 'destructive'\n default: return 'muted'\n }\n}\n\n/** Small inline badge for the shop-specific blocks (Entrega/Histórico). */\nfunction InlineBadge({ value }: { value: string }) {\n const tone = toneOf(value)\n const cls: Record<OrderDetailTone, string> = {\n success: 'bg-emerald-100 text-emerald-800', warning: 'bg-amber-100 text-amber-800',\n destructive: 'bg-red-100 text-red-700', info: 'bg-sky-100 text-sky-800', muted: 'bg-muted text-muted-foreground',\n }\n return <span className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${cls[tone]}`}>{ORDER_STATUS_LABEL[value] ?? value}</span>\n}\n\n/** The three values `plg_shop_orders.status` accepts. */\ntype OrderLifecycle = 'open' | 'cancelled' | 'archived'\n\n/** What the merchant is told before a status change that is not just a click. */\nconst LIFECYCLE_CONFIRM: Record<OrderLifecycle, { cta: string; warning: string }> = {\n cancelled: {\n cta: 'Cancelar pedido',\n warning: 'Cancelar encerra os envios em aberto, devolve o estoque que estava reservado para este pedido e cancela a cobrança que ainda não foi paga.',\n },\n archived: {\n cta: 'Arquivar',\n warning: 'Arquivar tira o pedido do dia a dia sem mudar nada do que já aconteceu. Dá para reabrir depois.',\n },\n // Reopening is only a status change: it does not re-reserve the stock a cancel\n // gave back, nor re-open the charge it closed. Saying so beats a merchant\n // assuming the order came back exactly as it was.\n open: {\n cta: 'Reabrir',\n warning: 'O pedido volta para a lista de abertos. O estoque e a cobrança NÃO voltam sozinhos — se foi cancelado, confira os dois antes de despachar.',\n },\n}\n\nfunction deliveryFromNotes(notes: string | null): string | null {\n if (!notes) return null\n const match = notes.match(/entrega:\\s*(.+)/i)\n return (match?.[1] ?? '').trim() || null\n}\n\n// Cache por id (fora do componente) — trocar de aba remonta a view; sem cache\n// isso refaz o getOrder (skeleton + request) toda vez. Cache-first evita o refetch;\n// \"Registrar recebimento\" atualiza o cache.\nconst shopOrderCache = new Map<string, Order>()\nconst shopShipmentsCache = new Map<string, Fulfillment[]>()\nconst shopReceivableCache = new Map<string, Receivable | null>()\n\nexport function OrderDetailView({ orderId, provider, onBack }: {\n orderId: string\n provider: () => ShopProvider\n onBack: () => void\n}) {\n // A conta a receber SEMPRE existe (o pedido a cria); a tela do Financeiro só\n // existe se o app instalou o plugin. São duas perguntas diferentes.\n const runtime = usePluginRuntimeOptional()\n const hasFinancial = (runtime?.activePlugins ?? []).some((p) => p.id === 'financial')\n\n const [order, setOrder] = useState<Order | null>(() => shopOrderCache.get(orderId) ?? null)\n const [shipments, setShipments] = useState<Fulfillment[]>(() => shopShipmentsCache.get(orderId) ?? [])\n const [loading, setLoading] = useState(() => !shopOrderCache.has(orderId))\n const [error, setError] = useState<string | null>(null)\n const [confirming, setConfirming] = useState(false)\n const [confirmError, setConfirmError] = useState<string | null>(null)\n const [pendingStatus, setPendingStatus] = useState<OrderLifecycle | null>(null)\n const [statusSaving, setStatusSaving] = useState(false)\n const [statusError, setStatusError] = useState<string | null>(null)\n const [cancelReason, setCancelReason] = useState('')\n const [receivable, setReceivable] = useState<Receivable | null>(() => shopReceivableCache.get(orderId) ?? null)\n\n useEffect(() => {\n let cancelled = false\n const cached = shopOrderCache.get(orderId)\n if (cached) { setOrder(cached); setLoading(false); return () => { cancelled = true } } // cache hit → sem request\n setLoading(true); setError(null)\n provider().getOrder(orderId)\n .then((o) => { if (!cancelled) { if (o) shopOrderCache.set(orderId, o); setOrder(o) } })\n .catch((err: unknown) => {\n if (cancelled) return\n // A typo in the URL is not a database failure anyone can act on: 22P02 is\n // \"that is not a uuid\", which for a link means the order does not exist.\n if ((err as { code?: string } | null)?.code === '22P02') { setOrder(null); return }\n setError(errorMessage(err))\n })\n .finally(() => { if (!cancelled) setLoading(false) })\n return () => { cancelled = true }\n }, [orderId, provider])\n\n useEffect(() => {\n let cancelled = false\n const db = getSupabaseClientOptional() as unknown as { from: (t: string) => any } | null\n if (!db) return\n if (shopShipmentsCache.has(orderId)) return () => { cancelled = true } // cache hit → sem request\n db.from('fulfillments').select('*').eq('order_id', orderId).order('created_at', { ascending: false })\n .then(({ data }: { data: Fulfillment[] | null }) => { if (!cancelled) { shopShipmentsCache.set(orderId, data ?? []); setShipments(data ?? []) } })\n return () => { cancelled = true }\n }, [orderId])\n\n // The order does not decide whether it was paid — the receivable does. Keep this\n // hook ABOVE the early returns (hook order must be stable).\n const loadReceivable = useCallback(async (force = false) => {\n const db = getSupabaseClientOptional() as unknown as { from: (t: string) => any } | null\n if (!db) return\n if (force) shopReceivableCache.delete(orderId)\n else if (shopReceivableCache.has(orderId)) { setReceivable(shopReceivableCache.get(orderId) ?? null); return }\n const [balance, bills] = await Promise.all([\n db.from('v_invoice_balances').select('*').eq('invoice_id', orderId).maybeSingle(),\n db.from('plg_financial_movements').select('*').eq('invoice_id', orderId).eq('movement_kind', 'bill').order('installment_number', { ascending: true }),\n ])\n if (!balance?.data) return\n const rec = { balance: balance.data, bills: bills?.data ?? [] }\n shopReceivableCache.set(orderId, rec)\n setReceivable(rec)\n }, [orderId])\n\n useEffect(() => { void loadReceivable() }, [loadReceivable])\n\n if (loading) return <OrderDetailSkeleton />\n if (error) {\n return (\n <div className=\"rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800\">\n <p className=\"font-medium\">Não foi possível carregar o pedido.</p>\n <p className=\"mt-1 text-red-700\">{error}</p>\n </div>\n )\n }\n if (!order) return <div className=\"py-12 text-center text-sm text-muted-foreground\">Pedido não encontrado.</div>\n\n const cur = order.currency\n const delivery = deliveryFromNotes(order.notes)\n const addr = order.shippingAddress\n\n // A new shipment changes the order's fulfillment status and its stock, so\n // both caches have to go — reading either stale would show a merchant an\n // order that is still \"a enviar\" seconds after they shipped it.\n async function reloadShipments() {\n shopShipmentsCache.delete(orderId)\n shopOrderCache.delete(orderId)\n const db = getSupabaseClientOptional() as unknown as { from: (t: string) => any } | null\n if (db) {\n const { data } = await db.from('fulfillments').select('*').eq('order_id', orderId)\n .order('created_at', { ascending: false })\n shopShipmentsCache.set(orderId, data ?? [])\n setShipments(data ?? [])\n }\n const fresh = await provider().getOrder(orderId)\n if (fresh) { shopOrderCache.set(orderId, fresh); setOrder(fresh) }\n }\n\n async function registerReceipt() {\n if (!order) return\n setConfirming(true); setConfirmError(null)\n try {\n const fresh = (await provider().confirmPayment?.(order.id)) ?? (await provider().getOrder(order.id))\n if (fresh) { shopOrderCache.set(order.id, fresh); setOrder(fresh) } // atualiza o cache\n // AFTER the receipt lands, never on a `confirming` dependency: re-reading\n // while the RPC is still in flight cached the pre-payment balance, and the\n // panel then swore the order was unpaid seconds after it had been paid.\n await loadReceivable(true)\n } catch (err: unknown) {\n setConfirmError(errorMessage(err))\n } finally { setConfirming(false) }\n }\n\n async function applyStatus(next: OrderLifecycle) {\n if (!order) return\n setStatusSaving(true); setStatusError(null)\n try {\n if (next === 'cancelled') {\n // Never a raw UPDATE: cancelling has to give the reserved stock back and\n // close the receivable, and only the RPC does all three. Shared with the\n // order list's bulk cancel — see cancelShopOrder.\n await cancelShopOrder(provider(), order.id, cancelReason.trim() || undefined)\n // Cancelling closes shipments and the receivable too — every cache the\n // page holds is stale at once.\n shopOrderCache.delete(order.id)\n shopShipmentsCache.delete(order.id)\n const fresh = await provider().getOrder(order.id)\n if (fresh) { shopOrderCache.set(order.id, fresh); setOrder(fresh) }\n await reloadShipments()\n await loadReceivable(true)\n } else {\n const updated = await provider().updateOrder(order.id, { status: next })\n if (updated) { shopOrderCache.set(order.id, updated); setOrder(updated) }\n }\n setPendingStatus(null); setCancelReason('')\n } catch (err: unknown) {\n setStatusError(errorMessage(err))\n } finally { setStatusSaving(false) }\n }\n\n // Inline two-step, never a dialog: the founder's rule is one layer, and this\n // bar sits on a plain page where a confirm band reads fine.\n const destructive = pendingStatus === 'cancelled'\n const statusActions = pendingStatus ? (\n <div className={`w-full space-y-2 rounded-md border px-3 py-2 ${destructive ? 'border-red-300 bg-red-50' : 'border-amber-300 bg-amber-50'}`}>\n <p className={`text-xs ${destructive ? 'text-red-900' : 'text-amber-900'}`}>{LIFECYCLE_CONFIRM[pendingStatus].warning}</p>\n {destructive && order.financialStatus === 'paid' && (\n <p className=\"text-xs font-medium text-red-900\">\n Este pedido está pago. Cancelar NÃO devolve o dinheiro — o estorno é feito na mão, no Financeiro ou no seu meio de pagamento.\n </p>\n )}\n {destructive && (\n <input\n value={cancelReason}\n onChange={(event) => setCancelReason(event.target.value)}\n placeholder=\"Motivo (opcional) — fica no histórico do pedido\"\n data-testid=\"order-cancel-reason\"\n className=\"w-full rounded-md border bg-background px-2.5 py-1.5 text-sm outline-none focus:border-primary\"\n />\n )}\n {statusError && <p className=\"rounded-md border border-red-200 bg-white px-2.5 py-1.5 text-xs text-red-800\">{statusError}</p>}\n <div className=\"flex gap-2\">\n <button type=\"button\" onClick={() => applyStatus(pendingStatus)} disabled={statusSaving} data-testid=\"order-status-confirm\"\n className={`rounded-md px-3 py-1.5 text-sm font-medium text-white transition disabled:opacity-60 ${destructive ? 'bg-red-600 hover:bg-red-700' : 'bg-primary hover:opacity-90'}`}>\n {statusSaving ? 'Salvando…' : LIFECYCLE_CONFIRM[pendingStatus].cta}\n </button>\n <button type=\"button\" onClick={() => { setPendingStatus(null); setStatusError(null); setCancelReason('') }}\n className=\"rounded-md border bg-background px-3 py-1.5 text-sm font-medium transition hover:bg-muted\">\n Voltar\n </button>\n </div>\n </div>\n ) : (\n <>\n {order.status !== 'open' && (\n <button type=\"button\" onClick={() => setPendingStatus('open')} data-testid=\"order-reopen\"\n className=\"rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\">\n Reabrir pedido\n </button>\n )}\n {order.status === 'open' && (\n <button type=\"button\" onClick={() => setPendingStatus('archived')} data-testid=\"order-archive\"\n className=\"rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\">\n Arquivar\n </button>\n )}\n {order.status !== 'cancelled' && (\n <button type=\"button\" onClick={() => setPendingStatus('cancelled')} data-testid=\"order-cancel\"\n className=\"rounded-md border border-red-200 px-3 py-1.5 text-sm font-medium text-red-700 transition hover:bg-red-50\">\n Cancelar pedido\n </button>\n )}\n {statusError && <p className=\"w-full rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-800\">{statusError}</p>}\n </>\n )\n\n // Every bill becomes a line, including a lone one. The shared block treats an\n // empty schedule as \"no receivable at all\" and prints the empty label — so\n // hiding the single instalment also hid the balance AND the button that\n // registers the payment, on every one-shot order (which is most of them).\n const installments: OrderDetailInstallment[] = (receivable && receivable.bills.length > 0)\n ? receivable.bills.map((b) => ({\n number: b.installment_number ?? 0,\n amount: `${money(Number(b.paid_amount ?? 0), cur)} / ${money(Number(b.amount), cur)}`,\n status: RECEIVABLE_LABEL[b.status] ?? b.status,\n statusTone: toneOf(b.status),\n dueDate: `vence ${dateOnly(b.due_date)}`,\n }))\n : []\n\n const data: OrderDetailData = {\n title: `Pedido #${order.orderNumber}`,\n subtitle: dateTime(order.createdAt),\n badges: [\n { label: ORDER_STATUS_LABEL[order.financialStatus] ?? order.financialStatus, tone: toneOf(order.financialStatus) },\n { label: ORDER_STATUS_LABEL[order.fulfillmentStatus] ?? order.fulfillmentStatus, tone: toneOf(order.fulfillmentStatus) },\n ],\n actions: statusActions,\n customer: { name: order.customerName, email: order.customerEmail },\n customerNode: (\n <div className=\"space-y-1 text-sm\">\n {order.customerId ? (\n <PersonLink\n personId={order.customerId}\n name={order.customerName ?? order.customerEmail ?? 'Cliente'}\n lookup={shopCustomerLookup(provider)}\n kind=\"shop_customer\"\n className=\"font-medium\"\n />\n ) : (\n <p className=\"font-medium\">{order.customerName ?? '—'}</p>\n )}\n {order.customerEmail && <p className=\"text-muted-foreground\">{order.customerEmail}</p>}\n {!order.customerId && <p className=\"text-xs text-muted-foreground\">Compra sem cadastro — não há ficha de cliente para abrir.</p>}\n </div>\n ),\n items: order.items.map((it) => ({\n id: it.id, name: it.name, description: it.sku, imageUrl: it.imageUrl,\n quantity: it.quantity, unitPrice: money(it.unitPrice, cur), total: money(it.total, cur),\n })),\n totals: [\n { label: 'Subtotal', value: money(order.subtotal, cur) },\n ...(order.discountTotal > 0 ? [{ label: `Desconto${order.discountCode ? ` (${order.discountCode})` : ''}`, value: `− ${money(order.discountTotal, cur)}`, muted: true }] : []),\n { label: 'Entrega', value: money(order.shippingTotal, cur) },\n { label: 'Impostos', value: money(order.taxTotal, cur) },\n { label: 'Total', value: money(order.total, cur), strong: true },\n ],\n paymentMethod: order.paymentMethodKind ? (PAYMENT_LABEL[order.paymentMethodKind] ?? order.paymentMethodKind) : undefined,\n paidAt: order.paidAt ? paidAtLabel(order.paidAt) : undefined,\n paymentExtra: <OrderPaymentDetail orderId={order.id} />,\n receivable: receivable ? {\n referenceNumber: receivable.balance.reference_number ?? undefined,\n statusBadge: { label: RECEIVABLE_LABEL[receivable.balance.status] ?? receivable.balance.status, tone: toneOf(receivable.balance.status) },\n rows: [\n { label: 'Faturado', value: money(receivable.balance.amount, cur) },\n { label: 'Recebido', value: money(receivable.balance.paid, cur) },\n { label: 'Saldo', value: money(receivable.balance.balance, cur), strong: true },\n ],\n installments,\n actions: (\n <>\n {receivable.balance.balance > 0 && receivable.balance.status !== 'cancelled' && (\n <button type=\"button\" onClick={registerReceipt} disabled={confirming} data-testid=\"order-register-receipt\"\n className=\"rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground transition hover:opacity-90 disabled:opacity-60\">\n {confirming ? 'Registrando…' : 'Registrar recebimento'}\n </button>\n )}\n {/* Só existe se o Financeiro existir. O botão era incondicional e, num\n app sem o módulo instalado, levava a uma rota que ninguém montou —\n uma porta pintada na parede bem embaixo do registro do dinheiro. */}\n {hasFinancial && (\n <button type=\"button\" onClick={() => adminNavigateTo('/financial')}\n className=\"rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\">\n Abrir no Financeiro\n </button>\n )}\n {confirmError && <p className=\"mt-2 w-full rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-800\">{confirmError}</p>}\n </>\n ),\n emptyLabel: 'Sem conta a receber para este pedido.',\n } : { rows: [], installments: [], emptyLabel: 'Sem conta a receber para este pedido.' },\n extraSections: (\n <>\n <OrderDetailBlock title=\"Entrega\" hint=\"O que a logística precisa\">\n <div className=\"space-y-2 text-sm\">\n {addr ? (\n <div className=\"space-y-0.5\">\n <p>{[addr.street, addr.number].filter(Boolean).join(', ')}{addr.complement ? ` — ${addr.complement}` : ''}</p>\n {addr.district && <p className=\"text-muted-foreground\">{addr.district}</p>}\n <p className=\"text-muted-foreground\">\n {[addr.city, addr.state].filter((v) => v && v !== '—').join('/')}{addr.postal_code ? ` · ${addr.postal_code}` : ''}\n </p>\n {(addr.recipient || addr.phone) && <p className=\"text-xs text-muted-foreground\">{[addr.recipient, addr.phone].filter(Boolean).join(' · ')}</p>}\n </div>\n ) : (\n <p className={delivery ? '' : 'text-muted-foreground'}>{delivery ?? 'Nenhum endereço registrado neste pedido.'}</p>\n )}\n <div className=\"border-t pt-2\">\n <OrderDetailRow label=\"Status\" value={<InlineBadge value={order.fulfillmentStatus} />} />\n {shipments.length === 0 ? (\n <p className=\"mt-1 text-xs text-muted-foreground\">Nenhum envio registrado.</p>\n ) : (\n <div className=\"mt-2 space-y-2\">\n {shipments.map((s) => (\n <div key={s.id} className=\"rounded-md border px-2 py-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-medium\">{[s.carrier, s.service].filter(Boolean).join(' · ') || 'Envio'}</span>\n <span className=\"text-[10px] text-muted-foreground\">{SHIPMENT_LABEL[s.status] ?? s.status}</span>\n </div>\n {s.tracking_code && (\n <p className=\"mt-0.5 font-mono text-xs\">\n {s.tracking_url ? <a href={s.tracking_url} target=\"_blank\" rel=\"noreferrer\" className=\"text-primary hover:underline\">{s.tracking_code}</a> : s.tracking_code}\n </p>\n )}\n <div className=\"mt-1 space-y-0.5 text-[11px] text-muted-foreground\">\n {s.shipped_at && <p>Despachado em {dateTime(s.shipped_at)}</p>}\n {s.estimated_delivery_at && <p>Previsão: {dateTime(s.estimated_delivery_at)}</p>}\n {s.delivered_at && <p>Entregue em {dateTime(s.delivered_at)}</p>}\n </div>\n <ShipmentActions\n fulfillmentId={s.id}\n status={s.status}\n hasTracking={Boolean(s.tracking_code)}\n provider={provider}\n onChanged={reloadShipments}\n />\n </div>\n ))}\n </div>\n )}\n {order.fulfillmentStatus !== 'fulfilled' && (\n <>\n {/* The carrier's own flow when one is connected — buy the\n label, print it, let the tracking arrive by itself. Draws\n nothing when the store dispatches by hand. */}\n <ShipWithCarrier orderId={order.id} provider={provider} onShipped={reloadShipments} />\n <ShipOrderForm orderId={order.id} provider={provider} onShipped={reloadShipments} />\n </>\n )}\n </div>\n </div>\n </OrderDetailBlock>\n\n {/* Draws its own block, or nothing at all: a store with no ERP and no\n acquirer must not carry an empty panel on every order forever. */}\n <OrderProviderLinks orderId={order.id} />\n\n <OrderDetailBlock title=\"Histórico\">\n <div className=\"space-y-1 text-sm\">\n <OrderDetailRow label=\"Criado\" value={dateTime(order.createdAt)} />\n <OrderDetailRow label=\"Atualizado\" value={dateTime(order.updatedAt)} />\n <OrderDetailRow label=\"Situação\" value={<InlineBadge value={order.status} />} />\n </div>\n </OrderDetailBlock>\n\n {order.notes && (\n <OrderDetailBlock title=\"Observações\">\n <p className=\"whitespace-pre-wrap text-sm text-muted-foreground\">{order.notes}</p>\n </OrderDetailBlock>\n )}\n </>\n ),\n onBack,\n backLabel: 'Pedidos',\n }\n\n return <SharedOrderDetailView {...data} />\n}\n\nexport const orderDetailPath = (id: string) => `/shop/orders/${id}`\nexport const goToOrder = (id: string) => adminNavigateTo(orderDetailPath(id))\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n Button, Modal, ModalPortal, ModalOverlay, ModalContent,\n ModalHeader, ModalBody, ModalFooter, ModalTitle,\n} from '@fayz-ai/ui'\nimport { Check, Copy, MessageCircle } from 'lucide-react'\nimport { chargeOutcome } from './new-order-rules'\nimport type { ShopProvider } from '@fayz-ai/shop'\n\n// ---------------------------------------------------------------------------\n// The half-minute after the charge is opened, with the customer still on the\n// line: read the code out, send it on WhatsApp, watch it land.\n//\n// A MODAL over the order, not a page instead of it. The order does not exist\n// yet — it is born when the money lands — so replacing the screen with a QR\n// code threw away the cart the merchant had just built with the customer. Here\n// the cart stays behind the dialog: the Pix expires, they close it, and the\n// same order is settled another way.\n//\n// Polling is the point: nobody should refresh anything to learn the money\n// arrived. Closing does not cancel the charge — the code stays valid, and\n// reopening shows the same one instead of a second Pix.\n// ---------------------------------------------------------------------------\n\nconst POLL_MS = 4000\n\nexport interface NewOrderChargeProps {\n open: boolean\n provider: () => ShopProvider\n sessionId: string\n emv: string\n qrcodeBase64: string | null\n total: number\n currency: string\n customerName: string\n customerPhone: string\n onPaid: (orderId?: string) => void\n onClose: () => void\n}\n\nexport function NewOrderCharge({\n open, provider, sessionId, emv, qrcodeBase64, total, currency,\n customerName, customerPhone, onPaid, onClose,\n}: NewOrderChargeProps) {\n const [state, setState] = useState<'waiting' | 'paid' | 'expired' | 'failed'>('waiting')\n const [copied, setCopied] = useState(false)\n const [checking, setChecking] = useState(false)\n const settled = useRef(false)\n\n const money = new Intl.NumberFormat('pt-BR', { style: 'currency', currency }).format(total)\n\n const check = useCallback(async () => {\n if (settled.current) return\n setChecking(true)\n try {\n const result = await provider().settleCheckoutSession?.(sessionId)\n if (!result) return\n if (result.state === 'paid') {\n settled.current = true\n setState('paid')\n // A beat on the confirmation, then the order it just created.\n setTimeout(() => onPaid(result.orderId ?? undefined), 1200)\n return\n }\n const outcome = chargeOutcome(result.state)\n if (outcome !== 'waiting') {\n settled.current = true\n setState(outcome)\n }\n } finally {\n setChecking(false)\n }\n }, [provider, sessionId, onPaid])\n\n useEffect(() => {\n if (!open) return\n const timer = setInterval(() => { void check() }, POLL_MS)\n return () => clearInterval(timer)\n }, [open, check])\n\n async function copy() {\n try {\n await navigator.clipboard.writeText(emv)\n setCopied(true)\n setTimeout(() => setCopied(false), 2400)\n } catch {\n /* no clipboard: the code is on screen to read out loud */\n }\n }\n\n const whatsapp = customerPhone\n ? `https://wa.me/${customerPhone.length > 11 ? customerPhone : `55${customerPhone}`}?text=${encodeURIComponent(\n `Olá${customerName ? ` ${customerName.split(' ')[0]}` : ''}! Segue o Pix de ${money} para o seu pedido:\\n\\n${emv}`,\n )}`\n : null\n\n return (\n <Modal open={open} onOpenChange={(next) => { if (!next) onClose() }}>\n <ModalPortal>\n <ModalOverlay>\n <ModalContent size=\"lg\" data-testid=\"new-order-charge-modal\">\n <ModalHeader className=\"mb-4\">\n <ModalTitle>Pix de {money}</ModalTitle>\n {state === 'waiting' && (\n <p className=\"text-sm text-muted-foreground\">\n Vale por 15 minutos. O pedido é criado quando o pagamento cair.\n </p>\n )}\n </ModalHeader>\n\n <ModalBody>\n <div className=\"flex flex-col items-center gap-4 sm:flex-row sm:items-start\">\n {qrcodeBase64 && (\n <img\n src={`data:image/png;base64,${qrcodeBase64}`}\n alt=\"QR code do Pix\"\n data-testid=\"new-order-qr\"\n className=\"h-40 w-40 shrink-0 rounded-md border bg-white p-2\"\n />\n )}\n <div className=\"min-w-0 flex-1 space-y-3\">\n <div>\n <p className=\"text-xs font-medium text-muted-foreground\">Pix copia e cola</p>\n <p data-testid=\"new-order-emv\"\n className=\"mt-1 max-h-20 overflow-auto break-all rounded-md border bg-muted/30 p-2 font-mono text-[11px]\">\n {emv}\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" onClick={copy} data-testid=\"new-order-copy\">\n {copied ? <Check className=\"mr-1.5 h-3.5 w-3.5\" /> : <Copy className=\"mr-1.5 h-3.5 w-3.5\" />}\n {copied ? 'Copiado' : 'Copiar código'}\n </Button>\n {whatsapp && (\n <a href={whatsapp} target=\"_blank\" rel=\"noreferrer\" data-testid=\"new-order-whatsapp\"\n className=\"inline-flex items-center rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\">\n <MessageCircle className=\"mr-1.5 h-3.5 w-3.5\" />\n Mandar no WhatsApp\n </a>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"mt-4 rounded-md border bg-muted/30 px-3 py-2 text-sm\">\n {state === 'waiting' && (\n <p className=\"flex items-center gap-2 text-muted-foreground\" data-testid=\"new-order-waiting\">\n <span className=\"h-2 w-2 animate-pulse rounded-full bg-amber-500\" />\n Aguardando o pagamento… a tela confirma sozinha.\n </p>\n )}\n {state === 'paid' && (\n <p className=\"flex items-center gap-2 font-medium text-emerald-700\" data-testid=\"new-order-paid\">\n <Check className=\"h-4 w-4\" /> Pagamento confirmado — abrindo o pedido…\n </p>\n )}\n {(state === 'expired' || state === 'failed') && (\n <p className=\"text-red-700\" data-testid=\"new-order-dead\">\n {state === 'expired'\n ? 'O código expirou sem pagamento. O pedido continua aqui — dá para cobrar de outro jeito.'\n : 'O pagamento não foi concluído. O pedido continua aqui — dá para cobrar de outro jeito.'}\n </p>\n )}\n </div>\n </ModalBody>\n\n <ModalFooter className=\"mt-4 gap-2\">\n {state === 'waiting' && (\n <Button variant=\"outline\" onClick={() => void check()} disabled={checking} data-testid=\"new-order-check\">\n {checking ? 'Conferindo…' : 'Já pagou? Conferir'}\n </Button>\n )}\n <Button variant={state === 'waiting' ? 'ghost' : 'default'} onClick={onClose}\n data-testid=\"new-order-charge-close\">\n {state === 'waiting' ? 'Fechar' : 'Voltar ao pedido'}\n </Button>\n </ModalFooter>\n </ModalContent>\n </ModalOverlay>\n </ModalPortal>\n </Modal>\n )\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n Button, Modal, ModalPortal, ModalOverlay, ModalContent,\n ModalHeader, ModalBody, ModalFooter, ModalTitle, SearchSelect, PhoneField, formatPhone, Thumbnail,\n} from '@fayz-ai/ui'\nimport { OrderFormView, OrderFormBlock, RecordPickerModal } from '@fayz-ai/admin'\nimport { MapPin, Minus, Pencil, Plus, Search, Trash2, X } from 'lucide-react'\nimport { documentDigits, formatDocument, isValidDocument } from '@fayz-ai/shop'\nimport { errorMessage } from '../settings/error-message'\nimport { invalidateProductLists, listProductsDetailed } from '../data/shared'\nimport { isDuplicateEmail, validateNewOrder, type NewOrderEnding } from './new-order-rules'\nimport { NewOrderCharge } from './NewOrderCharge'\nimport type {\n CustomerAddress, Product, ProductVariant, ShopCustomer, ShopProvider, StoreSettings,\n} from '@fayz-ai/shop'\n\n// ---------------------------------------------------------------------------\n// Selling over the phone.\n//\n// The console could read orders and never write one, so a sale taken by phone\n// or over the counter had nowhere to go: the merchant typed it into the\n// storefront as if they were the customer, or it stayed on paper.\n//\n// Same anatomy as the invoice form (OrderFormView): items and money on the wide\n// column, who/where/notes on the narrow one. It opens with two near-empty cards\n// and grows as the call goes — the coupon, the address and the payment details\n// are each one click away, never fields waiting to be filled.\n//\n// Three endings, because that is how the call ends:\n// · charge — a Pix to read out or send on WhatsApp. Goes through the\n// checkout SESSION, so the order is only born when the money\n// lands and an abandoned call leaves nothing behind.\n// · received — the money already arrived (cash, a Pix to the merchant's own\n// key). Placed and settled in one go.\n// · later — pending on the list, for someone to chase.\n//\n// Prices, freight and discount are never sent: the server reprices every line.\n// ---------------------------------------------------------------------------\n\ntype Line = {\n key: string\n productId: string\n name: string\n sku: string | null\n imageUrl: string | null\n unitPrice: number\n quantity: number\n variants: ProductVariant[]\n variantId: string | null\n optionsLabel: string | null\n}\n\ntype CustomerDraft = {\n id: string | null\n name: string\n email: string\n phone: string\n document: string\n}\n\ntype AddressDraft = {\n postalCode: string\n street: string\n number: string\n complement: string\n district: string\n city: string\n state: string\n}\n\nconst EMPTY_CUSTOMER: CustomerDraft = { id: null, name: '', email: '', phone: '', document: '' }\nconst EMPTY_ADDRESS: AddressDraft = {\n postalCode: '', street: '', number: '', complement: '', district: '', city: '', state: '',\n}\n\nconst PAYMENT_METHODS = [\n { id: 'pix', label: 'Pix' },\n { id: 'cash', label: 'Dinheiro' },\n { id: 'credit_card', label: 'Cartão de crédito' },\n { id: 'debit_card', label: 'Cartão de débito' },\n { id: 'boleto', label: 'Boleto' },\n { id: 'other', label: 'Outro' },\n] as const\n\ntype PaymentMethodId = typeof PAYMENT_METHODS[number]['id']\n\n/** Only these can open a charge; the rest of the list is how money arrives. */\nconst CHARGEABLE_PROVIDERS = ['abacatepay']\n\nconst money = (value: number, currency = 'BRL') =>\n new Intl.NumberFormat('pt-BR', { style: 'currency', currency }).format(Number(value) || 0)\n\nconst onlyDigits = (value: string) => value.replace(/\\D/gu, '')\n\nconst maskPostal = (value: string) => {\n const digits = onlyDigits(value).slice(0, 8)\n return digits.length > 5 ? `${digits.slice(0, 5)}-${digits.slice(5)}` : digits\n}\n\nconst fieldClass =\n 'mt-1 w-full rounded-md border bg-background px-2.5 py-1.5 text-sm outline-none focus:border-primary'\n\nfunction Field({ label, hint, children }: { label: string; hint?: string; children: React.ReactNode }) {\n return (\n <label className=\"block\">\n <span className=\"text-xs font-medium text-muted-foreground\">{label}</span>\n {children}\n {hint && <span className=\"mt-0.5 block text-[11px] text-muted-foreground\">{hint}</span>}\n </label>\n )\n}\n\nexport interface NewOrderPageProps {\n provider: () => ShopProvider\n onDone: (orderId?: string) => void\n onCancel: () => void\n}\n\nexport function NewOrderPage({ provider, onDone, onCancel }: NewOrderPageProps) {\n const [lines, setLines] = useState<Line[]>([])\n const [customer, setCustomer] = useState<CustomerDraft>(EMPTY_CUSTOMER)\n const [address, setAddress] = useState<AddressDraft>(EMPTY_ADDRESS)\n const [notes, setNotes] = useState('')\n const [discountCode, setDiscountCode] = useState('')\n const [couponOpen, setCouponOpen] = useState(false)\n const [settling, setSettling] = useState(false)\n const [method, setMethod] = useState<PaymentMethodId>('pix')\n const [reference, setReference] = useState('')\n const [settings, setSettings] = useState<StoreSettings | null>(null)\n const [freight, setFreight] = useState<{ price: number; label: string } | null>(null)\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [session, setSession] = useState<{ sessionId: string; emv: string; qrcode: string | null; total: number } | null>(null)\n const [chargeOpen, setChargeOpen] = useState(false)\n const [editingCustomer, setEditingCustomer] = useState(false)\n\n useEffect(() => {\n let cancelled = false\n provider().getStoreSettings?.()\n .then((value) => { if (!cancelled) setSettings(value ?? null) })\n .catch(() => { /* no policy row: the endings that need no acquirer still work */ })\n return () => { cancelled = true }\n }, [provider])\n\n const acquirer = settings?.paymentProvider ?? null\n const canCharge = Boolean(acquirer && CHARGEABLE_PROVIDERS.includes(acquirer))\n const currency = settings?.currency ?? 'BRL'\n\n const subtotal = useMemo(\n () => lines.reduce((sum, line) => sum + line.unitPrice * line.quantity, 0),\n [lines],\n )\n const postalDigits = onlyDigits(address.postalCode)\n const delivers = postalDigits.length === 8\n const shipping = delivers ? (freight?.price ?? 0) : 0\n\n // Freight comes from the store's own delivery rules, never from this screen:\n // shop_place_order ignores whatever total a client sends.\n const quoteFreight = useCallback(async (postal: string) => {\n if (postal.length !== 8 || subtotal <= 0) { setFreight(null); return }\n try {\n const options = await provider().quoteShipping?.(postal, subtotal)\n const cheapest = (options ?? []).slice().sort((a, b) => a.rate - b.rate)[0]\n setFreight(cheapest ? { price: cheapest.rate, label: cheapest.name || cheapest.carrier || 'Entrega' } : null)\n } catch {\n setFreight(null)\n }\n }, [provider, subtotal])\n\n useEffect(() => { void quoteFreight(postalDigits) }, [postalDigits, quoteFreight])\n\n function addLine(product: Product, variants: ProductVariant[]) {\n const sellable = variants.filter((v) => v.status !== 'archived')\n const only = sellable.length === 1 ? sellable[0] : null\n setLines((current) => {\n const existing = current.find((line) => line.productId === product.id && !line.variants.length)\n if (existing && sellable.length <= 1) {\n return current.map((line) =>\n line.key === existing.key ? { ...line, quantity: line.quantity + 1 } : line)\n }\n return [...current, {\n key: `${product.id}:${current.length}`,\n productId: product.id,\n name: product.name,\n sku: only?.sku ?? product.sku ?? null,\n imageUrl: product.images?.[0]?.url ?? null,\n unitPrice: only?.price ?? product.price,\n quantity: 1,\n variants: sellable.length > 1 ? sellable : [],\n variantId: only?.id ?? null,\n optionsLabel: null,\n }]\n })\n }\n\n const setQuantity = (key: string, quantity: number) =>\n setLines((current) => current\n .map((line) => (line.key === key ? { ...line, quantity: Math.max(0, quantity) } : line))\n .filter((line) => line.quantity > 0))\n\n const pickVariant = (key: string, variantId: string) =>\n setLines((current) => current.map((line) => {\n if (line.key !== key) return line\n const variant = line.variants.find((v) => v.id === variantId)\n return variant\n ? {\n ...line,\n variantId: variant.id,\n sku: variant.sku ?? line.sku,\n unitPrice: variant.price ?? line.unitPrice,\n optionsLabel: Object.values(variant.options ?? {}).join(' / ') || null,\n }\n : line\n }))\n\n const shippingAddress = delivers\n ? {\n postalCode: postalDigits,\n street: address.street.trim(),\n number: address.number.trim() || undefined,\n complement: address.complement.trim() || undefined,\n district: address.district.trim() || undefined,\n city: address.city.trim(),\n state: address.state.trim().toUpperCase(),\n country: 'BR',\n recipient: customer.name.trim() || undefined,\n phone: onlyDigits(customer.phone) || undefined,\n document: onlyDigits(customer.document) || undefined,\n }\n : undefined\n\n function validate(ending: NewOrderEnding): string | null {\n return validateNewOrder({\n lineCount: lines.length,\n unresolvedVariants: lines.filter((line) => line.variants.length > 0 && !line.variantId).length,\n customerName: customer.name,\n customerEmail: customer.email,\n customerPhone: onlyDigits(customer.phone),\n customerDocument: customer.document.trim(),\n documentValid: isValidDocument(customer.document),\n delivers,\n addressComplete: Boolean(address.street.trim() && address.city.trim() && address.state.trim()),\n }, ending)\n }\n\n /**\n * Resolve the customer to a ROW before placing, and never by e-mail alone.\n *\n * shop_place_order stamps `auth_user_id` on a customer it finds or creates by\n * e-mail — which here is the MERCHANT's user. The buyer would then be locked\n * out of their own record (\"customer belongs to another account\") the first\n * time they bought on the storefront. Passing an existing id skips that\n * branch entirely.\n */\n async function resolveCustomerId(): Promise<string | undefined> {\n if (customer.id) return customer.id\n const email = customer.email.trim().toLowerCase()\n const [first, ...rest] = customer.name.trim().split(/\\s+/u)\n if (email) {\n const found = await provider().listCustomers({ search: email, limit: 5 })\n const hit = found.find((c) => (c.email ?? '').toLowerCase() === email)\n if (hit) return hit.id\n }\n const created = await provider().createCustomer({\n firstName: first ?? customer.name.trim(),\n lastName: rest.join(' '),\n email: email || undefined,\n phone: onlyDigits(customer.phone) || undefined,\n })\n return created.id\n }\n\n async function finish(ending: NewOrderEnding) {\n const invalid = validate(ending)\n if (invalid) { setError(invalid); return }\n setSaving(true)\n setError(null)\n try {\n if (ending === 'charge') {\n const opened = await provider().openCheckoutSession?.({\n items: lines.map((line) => ({\n productId: line.productId,\n variantId: line.variantId,\n quantity: line.quantity,\n optionsLabel: line.optionsLabel,\n })),\n customer: { name: customer.name.trim(), email: customer.email.trim().toLowerCase() },\n shippingAddress,\n discountCode: discountCode.trim() || null,\n })\n if (!opened?.charge?.emv) throw new Error('A cobrança foi aberta sem código Pix. Tente de novo.')\n setSession({\n sessionId: opened.sessionId,\n emv: opened.charge.emv,\n qrcode: opened.charge.qrcodeBase64,\n total: opened.total,\n })\n setChargeOpen(true)\n return\n }\n\n const customerId = await resolveCustomerId()\n const order = await provider().placeOrder({\n customerId,\n customer: { name: customer.name.trim(), email: customer.email.trim().toLowerCase() || undefined },\n items: lines.map((line) => ({\n productId: line.productId,\n variantId: line.variantId ?? undefined,\n quantity: line.quantity,\n optionsLabel: line.optionsLabel ?? undefined,\n })),\n shippingAddress,\n discountCode: discountCode.trim() || undefined,\n paymentMethod: ending === 'received' ? method : undefined,\n notes: notes.trim() || undefined,\n })\n\n if (ending === 'received') {\n await provider().confirmPayment?.(order.id, reference.trim() || `manual:${method}`)\n }\n onDone(order.id)\n } catch (err: unknown) {\n setError(errorMessage(err))\n } finally {\n setSaving(false)\n }\n }\n\n const sideSections = (\n <>\n <OrderFormBlock title=\"Cliente\">\n <CustomerPicker\n provider={provider}\n value={customer}\n onChange={setCustomer}\n editing={editingCustomer}\n onEditing={setEditingCustomer}\n />\n </OrderFormBlock>\n\n <OrderFormBlock title=\"Entrega\">\n <DeliveryAddress\n provider={provider}\n customerId={customer.id}\n address={address}\n onChange={setAddress}\n />\n </OrderFormBlock>\n\n <OrderFormBlock title=\"Observações\">\n <textarea\n value={notes}\n onChange={(event) => setNotes(event.target.value)}\n rows={2}\n placeholder=\"Combinado por telefone: entregar depois das 18h…\"\n data-testid=\"new-order-notes\"\n className=\"w-full resize-y rounded-md border bg-background px-2.5 py-1.5 text-sm outline-none focus:border-primary\"\n />\n </OrderFormBlock>\n </>\n )\n\n return (\n <>\n <OrderFormView\n title=\"Novo pedido\"\n parentLabel=\"Pedidos\"\n onBack={onCancel}\n subtitle=\"Venda por telefone, WhatsApp ou balcão\"\n sideSections={sideSections}\n >\n <OrderFormBlock title=\"Produtos\">\n <ProductPicker provider={provider} onPick={addLine} currency={currency} />\n\n {lines.length > 0 && (\n <div className=\"mt-3 divide-y\">\n {lines.map((line) => (\n <div key={line.key} className=\"flex flex-wrap items-center gap-3 py-2\">\n <Thumbnail src={line.imageUrl} size=\"lg\" />\n <div className=\"min-w-[9rem] flex-1\">\n <p className=\"truncate text-sm font-medium\">{line.name}</p>\n {line.variants.length > 0 ? (\n <select\n value={line.variantId ?? ''}\n onChange={(event) => pickVariant(line.key, event.target.value)}\n data-testid=\"new-order-variant\"\n className=\"mt-1 rounded-md border bg-background px-2 py-1 text-xs outline-none focus:border-primary\"\n >\n <option value=\"\">Escolha a variação…</option>\n {line.variants.map((variant) => (\n <option key={variant.id} value={variant.id}>\n {Object.values(variant.options ?? {}).join(' / ') || variant.sku || 'Variação'}\n </option>\n ))}\n </select>\n ) : (\n // The line shows its total; from two units on, the unit\n // price is the number the merchant is asked to repeat.\n <p className=\"truncate text-xs text-muted-foreground\">\n {line.quantity > 1 ? `${line.quantity} × ${money(line.unitPrice, currency)}` : line.sku}\n </p>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n <button type=\"button\" aria-label=\"Menos um\" onClick={() => setQuantity(line.key, line.quantity - 1)}\n className=\"fz-tap flex items-center justify-center rounded-md border p-1.5 transition hover:bg-muted\">\n <Minus className=\"h-3.5 w-3.5\" />\n </button>\n <input\n value={line.quantity}\n onChange={(event) => setQuantity(line.key, Number(onlyDigits(event.target.value) || 0))}\n aria-label=\"Quantidade\"\n data-testid=\"new-order-quantity\"\n className=\"fz-tap w-14 rounded-md border bg-background px-1 py-1.5 text-center text-sm tabular-nums outline-none focus:border-primary\"\n />\n <button type=\"button\" aria-label=\"Mais um\" onClick={() => setQuantity(line.key, line.quantity + 1)}\n className=\"fz-tap flex items-center justify-center rounded-md border p-1.5 transition hover:bg-muted\">\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n <div className=\"ml-auto w-24 shrink-0 text-right text-sm tabular-nums\">\n {money(line.unitPrice * line.quantity, currency)}\n </div>\n <button type=\"button\" aria-label=\"Remover item\" onClick={() => setQuantity(line.key, 0)}\n className=\"fz-tap flex items-center justify-center rounded-md p-1.5 text-muted-foreground transition hover:bg-muted hover:text-foreground\">\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </OrderFormBlock>\n\n <OrderFormBlock title=\"Pagamento\">\n <div className=\"space-y-1.5 text-sm\">\n <div className=\"flex items-center justify-between\">\n <span>Subtotal</span>\n <span className=\"tabular-nums\">{money(subtotal, currency)}</span>\n </div>\n\n <div className=\"flex items-center justify-between gap-3\">\n {couponOpen || discountCode ? (\n <>\n <span className=\"text-muted-foreground\">Cupom</span>\n <input\n value={discountCode}\n onChange={(event) => setDiscountCode(event.target.value.toUpperCase())}\n placeholder=\"CÓDIGO\"\n autoFocus\n data-testid=\"new-order-discount\"\n className=\"w-40 rounded-md border bg-background px-2 py-1 text-right text-sm uppercase outline-none focus:border-primary\"\n />\n </>\n ) : (\n <>\n {/* Muted \"+ add\" rows keep the card empty until it is asked for. */}\n <button type=\"button\" onClick={() => setCouponOpen(true)} data-testid=\"new-order-add-coupon\"\n className=\"text-sm text-muted-foreground underline-offset-2 transition hover:text-foreground hover:underline\">\n Adicionar cupom\n </button>\n <span className=\"tabular-nums text-muted-foreground\">—</span>\n </>\n )}\n </div>\n\n <div className=\"flex items-center justify-between\">\n <span className={delivers ? '' : 'text-muted-foreground'}>\n {delivers ? `Entrega${freight ? ` · ${freight.label}` : ''}` : 'Entrega'}\n </span>\n <span className=\"tabular-nums\">\n {delivers ? money(shipping, currency) : <span className=\"text-muted-foreground\">sem entrega</span>}\n </span>\n </div>\n\n <div className=\"flex items-center justify-between border-t pt-2 text-base\">\n <span className=\"font-medium\">Total</span>\n <span className=\"font-semibold tabular-nums\" data-testid=\"new-order-total\">\n {money(subtotal + shipping, currency)}\n </span>\n </div>\n </div>\n\n {settling && (\n <div className=\"fz-fields fz-fields-2 mt-3 gap-2 rounded-md border bg-muted/30 p-3\">\n <Field label=\"Como recebeu\">\n <select value={method} onChange={(event) => setMethod(event.target.value as PaymentMethodId)}\n data-testid=\"new-order-method\" className={fieldClass}>\n {PAYMENT_METHODS.map((option) => (\n <option key={option.id} value={option.id}>{option.label}</option>\n ))}\n </select>\n </Field>\n <Field label=\"Comprovante\" hint=\"Id da transação, número do recibo — fica no pedido\">\n <input value={reference} onChange={(event) => setReference(event.target.value)}\n placeholder=\"Opcional\" data-testid=\"new-order-reference\" className={fieldClass} />\n </Field>\n </div>\n )}\n\n {error && (\n <div role=\"alert\" data-testid=\"new-order-error\"\n className=\"mt-3 rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800\">\n <p>{error}</p>\n {customer.id && /cliente/iu.test(error) && (\n <button type=\"button\" onClick={() => setEditingCustomer(true)}\n data-testid=\"new-order-fix-customer\"\n className=\"mt-1 font-medium underline underline-offset-2\">\n Editar cadastro de {customer.name}\n </button>\n )}\n </div>\n )}\n\n {/* Under the totals, and only once there is something to charge for. */}\n {lines.length > 0 && (\n <div className=\"mt-4 flex flex-wrap items-center gap-2\">\n {settling ? (\n <>\n <Button onClick={() => void finish('received')} disabled={saving} data-testid=\"new-order-confirm-received\">\n {saving ? 'Criando…' : 'Confirmar pagamento'}\n </Button>\n <Button variant=\"outline\" onClick={() => setSettling(false)}>Voltar</Button>\n </>\n ) : (\n <>\n {canCharge && (\n <Button\n onClick={() => (session ? setChargeOpen(true) : void finish('charge'))}\n disabled={saving}\n data-testid=\"new-order-charge\"\n >\n {saving ? 'Abrindo…' : session ? 'Ver cobrança' : 'Gerar cobrança Pix'}\n </Button>\n )}\n <Button variant={canCharge ? 'outline' : 'default'} onClick={() => setSettling(true)}\n data-testid=\"new-order-received\">\n Já recebi\n </Button>\n <Button variant=\"ghost\" onClick={() => void finish('later')} disabled={saving}\n data-testid=\"new-order-later\">\n Cobrar depois\n </Button>\n </>\n )}\n </div>\n )}\n </OrderFormBlock>\n </OrderFormView>\n\n {/* Over the order, never instead of it: the cart has to survive a Pix that\n nobody paid. */}\n {session && (\n <NewOrderCharge\n open={chargeOpen}\n provider={provider}\n sessionId={session.sessionId}\n emv={session.emv}\n qrcodeBase64={session.qrcode}\n total={session.total}\n currency={currency}\n customerPhone={onlyDigits(customer.phone)}\n customerName={customer.name}\n onPaid={onDone}\n onClose={() => setChargeOpen(false)}\n />\n )}\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Products — the field opens the shared picker, so several items can be ticked\n// in one pass instead of searched one at a time.\n// ---------------------------------------------------------------------------\n\nfunction ProductPicker({ provider, onPick, currency }: {\n provider: () => ShopProvider\n onPick: (product: Product, variants: ProductVariant[]) => void\n currency: string\n}) {\n const [open, setOpen] = useState(false)\n const [fromCache, setFromCache] = useState(false)\n\n const search = useCallback(\n // Same cache funnel as the products page: a catalogue the merchant just\n // browsed answers the picker without a round-trip.\n async (term: string) => {\n const answer = await listProductsDetailed(provider, { search: term || undefined, status: 'active', limit: 20 })\n setFromCache(Boolean(answer.cached || answer.stale))\n return answer.rows\n },\n [provider],\n )\n\n async function add(products: Product[]) {\n for (const product of products) {\n let variants: ProductVariant[] = []\n try {\n variants = (await provider().getProductVariants?.(product.id))?.variants ?? []\n } catch {\n /* a product with no variant table is the ordinary case */\n }\n onPick(product, variants)\n }\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n data-testid=\"new-order-product-search\"\n className=\"fz-tap flex w-full items-center gap-2 rounded-md border bg-background px-2.5 py-2.5 text-left text-sm text-muted-foreground transition hover:border-primary\"\n >\n <Search className=\"h-4 w-4 shrink-0\" />\n Buscar produto por nome ou SKU\n </button>\n\n <RecordPickerModal<Product>\n open={open}\n onClose={() => setOpen(false)}\n title=\"Selecionar produtos\"\n placeholder=\"Buscar produtos\"\n confirmLabel=\"Adicionar\"\n emptyLabel=\"Nenhum produto encontrado.\"\n columns={{ product: 'Produto', meta: 'Estoque', value: 'Preço' }}\n search={search}\n rowKey={(product) => product.id}\n renderRow={(product) => ({\n imageUrl: product.images?.[0]?.url ?? null,\n title: product.name,\n subtitle: product.sku ?? undefined,\n meta: product.inventoryCount ?? 0,\n value: money(product.price, currency),\n })}\n onConfirm={(products) => { void add(products) }}\n onRefresh={invalidateProductLists}\n fromCache={fromCache}\n />\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Customer — one search field, and a modal when the person is new.\n// ---------------------------------------------------------------------------\n\nfunction CustomerPicker({ provider, value, onChange, editing, onEditing }: {\n provider: () => ShopProvider\n value: CustomerDraft\n onChange: (value: CustomerDraft) => void\n editing: boolean\n onEditing: (editing: boolean) => void\n}) {\n const [creating, setCreating] = useState<string | null>(null)\n const setEditing = onEditing\n\n if (value.id) {\n // Everything shown here lives on the CUSTOMER, so editing it edits the\n // record — a CPF typed for one order used to vanish with the order, and the\n // next sale to the same person asked for it again.\n const missing = [\n !value.phone && 'telefone',\n !value.email && 'e-mail',\n !value.document && 'CPF',\n ].filter(Boolean) as string[]\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-start gap-2 rounded-md border bg-muted/30 p-2.5\">\n <div className=\"min-w-0 flex-1 text-sm\">\n <p className=\"truncate font-medium\">{value.name}</p>\n {value.email && <p className=\"truncate text-xs text-muted-foreground\">{value.email}</p>}\n {value.phone && <p className=\"truncate text-xs text-muted-foreground\">{formatPhone(value.phone)}</p>}\n {value.document && (\n <p className=\"truncate text-xs text-muted-foreground\">{formatDocument(value.document)}</p>\n )}\n </div>\n <button type=\"button\" aria-label=\"Trocar cliente\" data-testid=\"new-order-customer-clear\"\n onClick={() => onChange(EMPTY_CUSTOMER)}\n className=\"fz-tap flex items-center justify-center rounded p-1 text-muted-foreground transition hover:bg-muted hover:text-foreground\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <button type=\"button\" onClick={() => setEditing(true)} data-testid=\"new-order-customer-edit\"\n className=\"inline-flex items-center gap-1.5 text-sm text-muted-foreground underline-offset-2 transition hover:text-foreground hover:underline\">\n <Pencil className=\"h-3.5 w-3.5\" />\n Editar cadastro\n </button>\n {missing.length > 0 && (\n <span className=\"text-xs text-muted-foreground\">\n Falta {missing.join(', ')}\n </span>\n )}\n </div>\n\n <CustomerModal\n open={editing}\n customerId={value.id}\n initial={value}\n provider={provider}\n onClose={() => setEditing(false)}\n onSaved={(saved) => {\n onChange({\n id: saved.id,\n name: `${saved.firstName} ${saved.lastName}`.trim(),\n email: saved.email ?? '',\n phone: saved.phone ?? '',\n document: saved.document ?? '',\n })\n setEditing(false)\n }}\n />\n </div>\n )\n }\n\n return (\n <>\n <SearchSelect\n value=\"\"\n placeholder=\"Buscar ou criar cliente\"\n noResultsLabel=\"Nenhum cliente com esse nome.\"\n searchingLabel=\"Buscando…\"\n allowCreate\n createLabel=\"Criar cliente\"\n onCreate={(query) => setCreating(query)}\n onSearch={async (query) => {\n const found = await provider().listCustomers({ search: query || undefined, limit: 6 })\n return found.map((c) => ({\n id: c.id,\n label: `${c.firstName} ${c.lastName}`.trim(),\n subtitle: c.email ?? c.phone ?? undefined,\n data: c,\n }))\n }}\n onChange={(id, option) => {\n const found = option?.data as ShopCustomer | undefined\n if (!found) return\n onChange({\n id,\n name: `${found.firstName} ${found.lastName}`.trim(),\n email: found.email ?? '',\n phone: found.phone ?? '',\n document: found.document ?? '',\n })\n }}\n />\n\n <CustomerModal\n open={creating !== null}\n initialName={creating ?? ''}\n provider={provider}\n onClose={() => setCreating(null)}\n onSaved={(saved) => {\n onChange({\n id: saved.id,\n name: `${saved.firstName} ${saved.lastName}`.trim(),\n email: saved.email ?? '',\n phone: saved.phone ?? '',\n document: saved.document ?? '',\n })\n setCreating(null)\n }}\n />\n </>\n )\n}\n\n/**\n * The customer's record, created or edited — the one form for both.\n *\n * Both ends of it write to `plg_shop_customers`: a CPF typed here is the\n * person's, not this order's, so the next sale to them already has it. The\n * order still freezes its own copy, which is what an invoice issued months\n * later has to quote.\n */\nfunction CustomerModal({ open, initialName, customerId, initial, provider, onClose, onSaved }: {\n open: boolean\n initialName?: string\n /** Set when editing an existing record. */\n customerId?: string\n initial?: { name: string; email: string; phone: string; document: string }\n provider: () => ShopProvider\n onClose: () => void\n onSaved: (customer: ShopCustomer) => void\n}) {\n const [first, setFirst] = useState('')\n const [last, setLast] = useState('')\n const [email, setEmail] = useState('')\n const [phone, setPhone] = useState('')\n const [document, setDocument] = useState('')\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [duplicate, setDuplicate] = useState<ShopCustomer | null>(null)\n\n useEffect(() => {\n if (!open) return\n // Editing starts from the record; creating starts from whatever was typed\n // into the search box, which was the customer's name.\n const [head, ...rest] = String(initial?.name ?? initialName ?? '').trim().split(/\\s+/u)\n setFirst(head ?? '')\n setLast(rest.join(' '))\n setEmail(initial?.email ?? '')\n setPhone(initial?.phone ?? '')\n setDocument(initial?.document ?? '')\n setError(null)\n setDuplicate(null)\n }, [open, initialName, initial])\n\n async function save() {\n if (!first.trim()) { setError('O nome é obrigatório.'); return }\n if (document && !isValidDocument(document)) { setError('Esse CPF/CNPJ não confere.'); return }\n setSaving(true)\n setError(null)\n setDuplicate(null)\n try {\n const fields = {\n firstName: first.trim(),\n lastName: last.trim(),\n email: email.trim().toLowerCase() || undefined,\n phone: onlyDigits(phone) || undefined,\n document: documentDigits(document) || undefined,\n }\n const saved = customerId\n ? await provider().updateCustomer(customerId, fields)\n : await provider().createCustomer(fields)\n onSaved(saved)\n } catch (err: unknown) {\n // A store cannot have two customers on one e-mail, and the database says\n // so in the only language it has: \"duplicate key value violates unique\n // constraint\". For the merchant that is not an error at all — the person\n // is already a customer, and what they want is that record.\n if (isDuplicateEmail(err)) {\n const existing = await provider()\n .listCustomers({ search: email.trim().toLowerCase(), limit: 5 })\n .catch(() => [])\n const hit = existing.find((c) => (c.email ?? '').toLowerCase() === email.trim().toLowerCase())\n if (hit) { setDuplicate(hit); return }\n setError('Já existe um cliente com esse e-mail nesta loja. Procure por ele na busca.')\n return\n }\n setError(errorMessage(err))\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <Modal open={open} onOpenChange={(next) => { if (!next) onClose() }}>\n <ModalPortal>\n <ModalOverlay>\n <ModalContent size=\"lg\">\n <ModalHeader className=\"mb-4\">\n <ModalTitle>{customerId ? 'Cadastro do cliente' : 'Novo cliente'}</ModalTitle>\n </ModalHeader>\n <ModalBody className=\"space-y-3\">\n <div className=\"fz-fields fz-fields-2 gap-3\">\n <Field label=\"Nome\">\n <input value={first} onChange={(e) => setFirst(e.target.value)} autoFocus\n data-testid=\"new-customer-first\" className={fieldClass} />\n </Field>\n <Field label=\"Sobrenome\">\n <input value={last} onChange={(e) => setLast(e.target.value)}\n data-testid=\"new-customer-last\" className={fieldClass} />\n </Field>\n </div>\n <Field label=\"Telefone\">\n <div className=\"mt-1\">\n <PhoneField value={phone} onChange={setPhone} data-testid=\"new-customer-phone\" />\n </div>\n </Field>\n <Field label=\"E-mail\">\n <input type=\"email\" value={email} onChange={(e) => setEmail(e.target.value)}\n data-testid=\"new-customer-email\" className={fieldClass} />\n </Field>\n <Field label=\"CPF / CNPJ\" hint=\"Necessário para cobrança online e para a nota fiscal\">\n <input value={formatDocument(document)} onChange={(e) => setDocument(documentDigits(e.target.value))}\n placeholder=\"000.000.000-00\" data-testid=\"new-customer-document\" className={fieldClass} />\n </Field>\n {duplicate && (\n <div role=\"alert\" data-testid=\"new-customer-duplicate\"\n className=\"rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900\">\n <p><strong>{duplicate.firstName} {duplicate.lastName}</strong> já é cliente com esse e-mail.</p>\n <button type=\"button\" onClick={() => onSaved(duplicate)}\n data-testid=\"new-customer-use-existing\"\n className=\"mt-1 font-medium underline underline-offset-2\">\n Usar este cliente\n </button>\n </div>\n )}\n {error && (\n <p role=\"alert\" className=\"rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800\">\n {error}\n </p>\n )}\n </ModalBody>\n <ModalFooter className=\"mt-4 gap-2\">\n <Button variant=\"outline\" onClick={onClose}>Cancelar</Button>\n <Button onClick={save} disabled={saving} data-testid=\"new-customer-save\">\n {saving ? 'Salvando…' : customerId ? 'Salvar' : 'Criar cliente'}\n </Button>\n </ModalFooter>\n </ModalContent>\n </ModalOverlay>\n </ModalPortal>\n </Modal>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Delivery address — the book first, the form only if asked for.\n//\n// Eight blank fields were the default state of this block, and for a repeat\n// customer every one of them was already known. Saved addresses come first;\n// typing one is a deliberate act behind a button. No address at all is a valid\n// order — that is a counter sale.\n// ---------------------------------------------------------------------------\n\nfunction DeliveryAddress({ provider, customerId, address, onChange }: {\n provider: () => ShopProvider\n customerId: string | null\n address: AddressDraft\n onChange: (address: AddressDraft) => void\n}) {\n const [saved, setSaved] = useState<CustomerAddress[]>([])\n const [chosen, setChosen] = useState<string | null>(null)\n const [editing, setEditing] = useState(false)\n\n const use = useCallback((row: CustomerAddress) => {\n setChosen(row.id)\n setEditing(false)\n onChange({\n postalCode: row.postalCode ?? '',\n street: row.street ?? '',\n number: row.number ?? '',\n complement: row.complement ?? '',\n district: row.district ?? '',\n city: row.city ?? '',\n state: row.state ?? '',\n })\n }, [onChange])\n\n useEffect(() => {\n if (!customerId) { setSaved([]); return }\n let cancelled = false\n provider().listCustomerAddresses?.(customerId)\n .then((rows) => {\n if (cancelled || !rows?.length) return\n setSaved(rows)\n // The default address is what the merchant would have typed anyway.\n use(rows[0])\n })\n .catch(() => { /* no address book: the form is one click away */ })\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [customerId, provider])\n\n const filled = Boolean(address.postalCode && address.street)\n\n if (!editing) {\n return (\n <div className=\"space-y-2\">\n {saved.map((row) => (\n <button\n key={row.id}\n type=\"button\"\n onClick={() => use(row)}\n data-testid=\"new-order-saved-address\"\n className={`block w-full rounded-md border p-2.5 text-left text-sm transition ${\n chosen === row.id ? 'border-primary bg-primary/5' : 'hover:bg-muted/50'\n }`}\n >\n <span className=\"block\">{[row.street, row.number].filter(Boolean).join(', ')}</span>\n <span className=\"block text-xs text-muted-foreground\">\n {[row.district, row.city, row.state].filter(Boolean).join(' · ')}\n {row.postalCode ? ` · ${maskPostal(row.postalCode)}` : ''}\n </span>\n </button>\n ))}\n\n {saved.length === 0 && filled && (\n <div className=\"rounded-md border p-2.5 text-sm\" data-testid=\"new-order-address-summary\">\n <p>{[address.street, address.number].filter(Boolean).join(', ')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {[address.district, address.city, address.state].filter(Boolean).join(' · ')} · {maskPostal(address.postalCode)}\n </p>\n </div>\n )}\n\n {saved.length === 0 && !filled && (\n <p className=\"text-sm text-muted-foreground\">Sem endereço = retirada.</p>\n )}\n\n <button\n type=\"button\"\n onClick={() => setEditing(true)}\n data-testid=\"new-order-add-address\"\n className=\"inline-flex items-center gap-1.5 text-sm text-muted-foreground underline-offset-2 transition hover:text-foreground hover:underline\"\n >\n <MapPin className=\"h-3.5 w-3.5\" />\n {filled ? 'Usar outro endereço' : 'Adicionar endereço'}\n </button>\n </div>\n )\n }\n\n return (\n <div className=\"fz-fields fz-fields-2 gap-2\">\n <div>\n <PostalField\n value={address.postalCode}\n onChange={(postalCode) => onChange({ ...address, postalCode })}\n onResolved={(found) => onChange({ ...address, ...found })}\n />\n </div>\n <div>\n <Field label=\"Número\">\n <input value={address.number} onChange={(e) => onChange({ ...address, number: e.target.value })}\n data-testid=\"new-order-number\" className={fieldClass} />\n </Field>\n </div>\n <div className=\"fz-field-wide\">\n <Field label=\"Rua\">\n <input value={address.street} onChange={(e) => onChange({ ...address, street: e.target.value })}\n data-testid=\"new-order-street\" className={fieldClass} />\n </Field>\n </div>\n <div className=\"fz-field-wide\">\n <Field label=\"Complemento\">\n <input value={address.complement} onChange={(e) => onChange({ ...address, complement: e.target.value })}\n placeholder=\"Apto, bloco, ponto de referência\" className={fieldClass} />\n </Field>\n </div>\n <div className=\"fz-field-wide\">\n <Field label=\"Bairro\">\n <input value={address.district} onChange={(e) => onChange({ ...address, district: e.target.value })}\n className={fieldClass} />\n </Field>\n </div>\n <div>\n <Field label=\"Cidade\">\n <input value={address.city} onChange={(e) => onChange({ ...address, city: e.target.value })}\n className={fieldClass} />\n </Field>\n </div>\n <div>\n <Field label=\"UF\">\n <input value={address.state} maxLength={2}\n onChange={(e) => onChange({ ...address, state: e.target.value.toUpperCase() })}\n className={fieldClass} />\n </Field>\n </div>\n <div className=\"fz-field-wide flex gap-3\">\n <button type=\"button\" onClick={() => setEditing(false)} data-testid=\"new-order-address-done\"\n className=\"text-sm font-medium text-primary underline-offset-2 hover:underline\">\n Pronto\n </button>\n {filled && (\n <button type=\"button\" data-testid=\"new-order-address-clear\"\n onClick={() => { onChange(EMPTY_ADDRESS); setChosen(null); setEditing(false) }}\n className=\"text-sm text-muted-foreground underline-offset-2 hover:underline\">\n Remover entrega\n </button>\n )}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Postal code — typing eight digits fills the rest of the address.\n// ---------------------------------------------------------------------------\n\nfunction PostalField({ value, onChange, onResolved }: {\n value: string\n onChange: (value: string) => void\n onResolved: (address: Partial<AddressDraft>) => void\n}) {\n const [looking, setLooking] = useState(false)\n const [missing, setMissing] = useState(false)\n\n useEffect(() => {\n const digits = onlyDigits(value)\n if (digits.length !== 8) { setMissing(false); return }\n let cancelled = false\n setLooking(true)\n fetch(`https://viacep.com.br/ws/${digits}/json/`)\n .then((response) => response.json())\n .then((found: Record<string, string> & { erro?: boolean }) => {\n if (cancelled) return\n if (found?.erro) { setMissing(true); return }\n setMissing(false)\n onResolved({\n street: found.logradouro || '',\n district: found.bairro || '',\n city: found.localidade || '',\n state: (found.uf || '').toUpperCase(),\n })\n })\n .catch(() => { /* offline: the fields stay typed by hand */ })\n .finally(() => { if (!cancelled) setLooking(false) })\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <Field label=\"CEP\" hint={looking ? 'Buscando…' : missing ? 'CEP não encontrado — preencha à mão' : undefined}>\n <input\n value={maskPostal(value)}\n onChange={(event) => onChange(event.target.value)}\n placeholder=\"00000-000\"\n inputMode=\"numeric\"\n data-testid=\"new-order-postal\"\n className={fieldClass}\n />\n </Field>\n )\n}\n","import React, { useEffect, useState, useCallback, useMemo } from 'react'\nimport { errorMessage } from '../settings/error-message'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { Button, ConfirmDialog, DataTable, toast } from '@fayz-ai/ui'\nimport { CreditCard, Package, ShoppingBag, Wallet, XCircle } from 'lucide-react'\nimport { getShopProvider } from '@fayz-ai/shop'\nimport { useAdminPath, adminNavigateTo, OrderListView, type OrderBulkAction, type OrderListColumn } from '@fayz-ai/admin'\nimport { PersonLink } from '@fayz-ai/admin'\nimport { shopCustomerLookup } from './customerLookup'\nimport { OrderDetailView, ORDER_STATUS_LABEL } from './OrderDetailView'\nimport { NewOrderPage } from './NewOrderPage'\nimport { cancelShopOrder } from './order-actions'\nimport type { Product, Order, ShopCustomer, Discount, ListProductsOptions, ShopProvider } from '@fayz-ai/shop'\n\nexport type ShopProviderResolver = ShopProvider | (() => ShopProvider)\n\nexport interface ShopPageProps {\n provider?: ShopProviderResolver\n}\n\n// ---------------------------------------------------------------------------\n// Shared helpers\n// ---------------------------------------------------------------------------\n\nfunction currency(value: number, code = 'BRL', locale = 'pt-BR') {\n return new Intl.NumberFormat(locale, { style: 'currency', currency: code }).format(value)\n}\n\nfunction badge(label: string, color: string) {\n return (\n <span className={`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${color}`}>\n {label}\n </span>\n )\n}\n\nconst statusColors: Record<string, string> = {\n active: 'bg-emerald-100 text-emerald-800',\n draft: 'bg-gray-100 text-gray-700',\n archived: 'bg-orange-100 text-orange-700',\n open: 'bg-blue-100 text-blue-800',\n cancelled: 'bg-red-100 text-red-700',\n paid: 'bg-emerald-100 text-emerald-800',\n pending: 'bg-yellow-100 text-yellow-800',\n fulfilled: 'bg-emerald-100 text-emerald-800',\n unfulfilled: 'bg-gray-100 text-gray-700',\n 'partially_fulfilled': 'bg-blue-100 text-blue-800',\n}\n\nfunction resolveShopProvider(provider?: ShopProviderResolver): ShopProvider {\n return typeof provider === 'function' ? provider() : provider ?? getShopProvider()\n}\n\n/**\n * Every tab used to load with `.then(setState).finally(stopLoading)` and no\n * catch. Against a pool where the shop provider reads as `anon`, listOrders and\n * listCustomers reject with \"permission denied\" — the rejection escaped React\n * and blanked the whole admin, so a permissions problem looked like a crash.\n * The tab now reports what actually failed and the rest of the shell survives.\n */\nfunction useShopList<T>(load: () => Promise<T[]>, deps: React.DependencyList) {\n const [items, setItems] = useState<T[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n // Bumped by `reload` — an action that writes to these rows has to be able to\n // ask for them again, or the list keeps showing what was true before it ran.\n const [nonce, setNonce] = useState(0)\n\n useEffect(() => {\n let cancelled = false\n setLoading(true)\n setError(null)\n load()\n .then((data) => { if (!cancelled) setItems(data) })\n .catch((err: unknown) => {\n if (!cancelled) setError(errorMessage(err))\n })\n .finally(() => { if (!cancelled) setLoading(false) })\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [...deps, nonce])\n\n return { items, loading, error, reload: useCallback(() => setNonce((n) => n + 1), []) }\n}\n\nfunction ErrorState({ message }: { message: string }) {\n return (\n <div className=\"rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800\">\n <p className=\"font-medium\">Não foi possível carregar estes dados.</p>\n <p className=\"mt-1 text-red-700\">{message}</p>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Products tab\n// ---------------------------------------------------------------------------\n\nfunction ProductsTab({ provider }: ShopPageProps) {\n const [products, setProducts] = useState<Product[]>([])\n const [loading, setLoading] = useState(true)\n const [search, setSearch] = useState('')\n\n const [error, setError] = useState<string | null>(null)\n\n const load = useCallback(async (opts?: ListProductsOptions) => {\n setLoading(true)\n setError(null)\n try {\n const data = await resolveShopProvider(provider).listProducts(opts)\n setProducts(data)\n } catch (err: unknown) {\n setError(errorMessage(err))\n } finally {\n setLoading(false)\n }\n }, [provider])\n\n useEffect(() => { load() }, [load])\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const q = e.target.value\n setSearch(q)\n load(q ? { search: q } : undefined)\n }\n\n const columns = useMemo<ColumnDef<Product, any>[]>(() => [\n { accessorKey: 'name', header: 'Produto', cell: ({ getValue }) => <span className=\"font-medium\">{getValue() as string}</span> },\n { accessorKey: 'sku', header: 'SKU', cell: ({ getValue }) => <span className=\"text-muted-foreground\">{(getValue() as string | undefined) ?? '—'}</span> },\n {\n accessorKey: 'price', header: () => <span className=\"block text-right\">Preço</span>,\n cell: ({ getValue, row }) => <div className=\"text-right\">{currency(getValue() as number, row.original.currency)}</div>,\n },\n {\n accessorKey: 'inventoryCount', header: () => <span className=\"block text-right\">Estoque</span>,\n cell: ({ getValue }) => {\n const count = getValue() as number\n return <div className=\"text-right\"><span className={count === 0 ? 'text-red-600 font-medium' : ''}>{count}</span></div>\n },\n },\n {\n accessorKey: 'status', header: 'Status',\n cell: ({ getValue }) => {\n const status = getValue() as string\n return badge(status, statusColors[status] ?? 'bg-gray-100 text-gray-700')\n },\n },\n ], [])\n\n return (\n <div>\n <div className=\"flex items-center justify-between mb-4\">\n <input\n type=\"search\" value={search} onChange={handleSearch}\n placeholder=\"Buscar produtos...\"\n className=\"border rounded-lg px-3 py-2 text-sm w-64 focus:outline-none focus:ring-2 focus:ring-primary/50\"\n />\n <span className=\"text-sm text-muted-foreground\">{products.length} produtos</span>\n </div>\n\n {error ? (\n <ErrorState message={error} />\n ) : (\n <DataTable\n loading={loading}\n columns={columns}\n data={products}\n variant=\"card\"\n emptyMessage=\"Nenhum produto encontrado.\"\n />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Orders tab\n// ---------------------------------------------------------------------------\n\nfunction OrdersTab({ provider }: ShopPageProps) {\n const { items: orders, loading, error, reload } = useShopList<Order>(\n () => resolveShopProvider(provider).listOrders({ limit: 200 }),\n [provider],\n )\n // Orders the bulk bar asked to cancel, held until the confirm is answered.\n // Cancelling returns stock and closes the receivable — it does not get to\n // happen on a single click the way \"marcar como pago\" does.\n const [cancelTarget, setCancelTarget] = useState<Order[] | null>(null)\n const [bulkBusy, setBulkBusy] = useState(false)\n\n // Já pago não se paga de novo, e pedido cancelado não se recebe: um lote de\n // 10 em que 8 já estão pagos deve dizer \"2 pedidos marcados como pagos\", não\n // disparar 10 chamadas e relatar 8 erros.\n const markPaid = useCallback(async (rows: Order[]) => {\n const targets = rows.filter((o) => o.financialStatus !== 'paid' && o.status !== 'cancelled')\n if (targets.length === 0) {\n toast.error('Nenhum dos pedidos selecionados está aguardando pagamento.')\n return\n }\n const shop = resolveShopProvider(provider)\n if (typeof shop.confirmPayment !== 'function') {\n toast.error('Esta loja não registra recebimento por aqui.')\n return\n }\n setBulkBusy(true)\n let done = 0\n let failed = 0\n for (const order of targets) {\n try {\n await shop.confirmPayment(order.id)\n done++\n } catch (err: unknown) {\n failed++\n console.warn('[shop] confirmPayment failed', order.id, err)\n }\n }\n setBulkBusy(false)\n if (done > 0) toast.success(`${done} pedido(s) marcados como pagos`)\n if (failed > 0) toast.error(`${failed} pedido(s) não puderam ser atualizados`)\n reload()\n }, [provider, reload])\n\n const confirmCancel = useCallback(async () => {\n const targets = (cancelTarget ?? []).filter((o) => o.status !== 'cancelled')\n setBulkBusy(true)\n let done = 0\n let failed = 0\n const shop = resolveShopProvider(provider)\n for (const order of targets) {\n try {\n await cancelShopOrder(shop, order.id)\n done++\n } catch (err: unknown) {\n failed++\n console.warn('[shop] cancelOrder failed', order.id, err)\n }\n }\n setBulkBusy(false)\n setCancelTarget(null)\n if (done > 0) toast.success(`${done} pedido(s) cancelados`)\n if (failed > 0) toast.error(`${failed} pedido(s) não puderam ser cancelados`)\n reload()\n }, [cancelTarget, provider, reload])\n\n const bulkActions = useMemo<OrderBulkAction<Order>[]>(() => [\n {\n id: 'mark-paid',\n label: 'Marcar como pago',\n icon: CreditCard,\n disabled: bulkBusy,\n onSelect: markPaid,\n },\n {\n id: 'cancel',\n label: 'Cancelar pedidos',\n icon: XCircle,\n destructive: true,\n overflow: true,\n disabled: bulkBusy,\n onSelect: (rows) => setCancelTarget(rows),\n },\n ], [bulkBusy, markPaid])\n\n const columns = useMemo<OrderListColumn<Order>[]>(() => [\n { key: 'orderNumber', header: 'Pedido', render: (o) => <span className=\"font-medium\">#{o.orderNumber}</span> },\n {\n key: 'customer', header: 'Cliente',\n // Links to the customer record. The row itself opens the order, so the\n // link stops the click from doing both.\n render: (o) => {\n const label = o.customerName ?? o.customerEmail ?? '—'\n if (!o.customerId) return <span>{label}</span>\n return (\n <PersonLink\n personId={o.customerId}\n name={label}\n lookup={shopCustomerLookup(() => resolveShopProvider(provider))}\n kind=\"shop_customer\"\n />\n )\n },\n },\n { key: 'total', header: 'Total', align: 'right', render: (o) => <span className=\"font-medium\">{currency(o.total, o.currency)}</span> },\n {\n key: 'financialStatus', header: 'Pagamento',\n render: (o) => badge(ORDER_STATUS_LABEL[o.financialStatus] ?? o.financialStatus, statusColors[o.financialStatus] ?? 'bg-gray-100 text-gray-700'),\n },\n {\n key: 'fulfillmentStatus', header: 'Entrega',\n render: (o) => {\n // A cancelled or archived order is not \"não enviado\" waiting to be\n // picked — it is out of the flow, and the list said nothing about it.\n if (o.status && o.status !== 'open') {\n return badge(ORDER_STATUS_LABEL[o.status] ?? o.status, statusColors[o.status] ?? 'bg-gray-100 text-gray-700')\n }\n // ENTREGUE é derivado dos envios, não um quarto valor de\n // `fulfillment_status` — um pedido que sai em duas caixas e só uma\n // chegou continua \"enviado\", que é a verdade.\n const shipments = (o.shipments ?? []).filter((s) => s.status !== 'cancelled')\n if (shipments.length > 0 && shipments.every((s) => s.status === 'delivered')) {\n return badge('Entregue', 'bg-emerald-100 text-emerald-800')\n }\n return badge(ORDER_STATUS_LABEL[o.fulfillmentStatus] ?? o.fulfillmentStatus, statusColors[o.fulfillmentStatus] ?? 'bg-gray-100 text-gray-700')\n },\n },\n {\n key: 'createdAt', header: 'Data',\n render: (o) => {\n // Time matters operationally: two orders on the same day are picked,\n // packed and settled in the order they arrived.\n const d = new Date(o.createdAt)\n return (\n <span className=\"whitespace-nowrap text-muted-foreground\">\n {d.toLocaleDateString('pt-BR')}\n <span className=\"ml-1.5 text-xs opacity-70\">{d.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })}</span>\n </span>\n )\n },\n },\n ], [provider])\n\n const stats = useMemo(() => {\n const live = orders.filter((o) => o.status !== 'cancelled')\n const delivered = (o: Order) => {\n const shipments = (o.shipments ?? []).filter((s) => s.status !== 'cancelled')\n return shipments.length > 0 && shipments.every((s) => s.status === 'delivered')\n }\n const toShip = live.filter((o) => o.fulfillmentStatus !== 'fulfilled' && !delivered(o))\n const toReceive = live.filter((o) => o.financialStatus === 'pending')\n const billed = live.filter((o) => o.financialStatus === 'paid').reduce((sum, o) => sum + o.total, 0)\n return [\n { label: 'Pedidos', value: String(live.length), icon: ShoppingBag },\n { label: 'A enviar', value: String(toShip.length), icon: Package },\n { label: 'A receber', value: String(toReceive.length), icon: CreditCard },\n { label: 'Recebido', value: currency(billed), icon: Wallet, hint: 'Soma dos pedidos pagos nesta lista' },\n ]\n }, [orders])\n\n if (error) return <ErrorState message={error} />\n\n return (\n <>\n <OrderListView<Order>\n actions={(\n <Button onClick={() => adminNavigateTo('/orders/new')} data-testid=\"orders-create\">\n + Criar pedido\n </Button>\n )}\n stats={stats}\n columns={columns}\n rows={orders}\n loading={loading}\n empty=\"Nenhum pedido ainda. Vendeu por telefone? Crie o pedido aqui.\"\n searchText={(o) => [o.orderNumber, o.customerName, o.customerEmail].filter(Boolean).join(' ')}\n searchPlaceholder=\"Buscar por número, cliente ou e-mail…\"\n onRowClick={(row) => adminNavigateTo(`/orders/${row.id}`)}\n bulkActions={bulkActions}\n />\n <ConfirmDialog\n open={cancelTarget !== null}\n variant=\"destructive\"\n loading={bulkBusy}\n title={`Cancelar ${cancelTarget?.length ?? 0} pedido(s)?`}\n description=\"O estoque reservado volta para a loja e o recebimento é encerrado. Não dá para desfazer.\"\n confirmLabel=\"Cancelar pedidos\"\n cancelLabel=\"Voltar\"\n onCancel={() => { if (!bulkBusy) setCancelTarget(null) }}\n onConfirm={confirmCancel}\n />\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Customers tab\n// ---------------------------------------------------------------------------\n\nfunction CustomersTab({ provider }: ShopPageProps) {\n const { items: customers, loading, error } = useShopList<ShopCustomer>(\n () => resolveShopProvider(provider).listCustomers({ limit: 50 }),\n [provider],\n )\n\n const columns = useMemo<ColumnDef<ShopCustomer, any>[]>(() => [\n {\n id: 'name', accessorFn: (c) => `${c.firstName} ${c.lastName}`, header: 'Nome',\n cell: ({ row }) => <span className=\"font-medium\">{row.original.firstName} {row.original.lastName}</span>,\n },\n { accessorKey: 'email', header: 'Email', cell: ({ getValue }) => <span className=\"text-muted-foreground\">{(getValue() as string | undefined) ?? '—'}</span> },\n { accessorKey: 'phone', header: 'Telefone', cell: ({ getValue }) => <span className=\"text-muted-foreground\">{(getValue() as string | undefined) ?? '—'}</span> },\n {\n accessorKey: 'ordersCount', header: () => <span className=\"block text-right\">Pedidos</span>,\n cell: ({ getValue }) => <div className=\"text-right\">{getValue() as number}</div>,\n },\n {\n accessorKey: 'totalSpent', header: () => <span className=\"block text-right\">Total Gasto</span>,\n cell: ({ getValue }) => <div className=\"text-right\">{currency(getValue() as number)}</div>,\n },\n ], [])\n\n return (\n <div>\n {error ? (\n <ErrorState message={error} />\n ) : (\n <DataTable\n loading={loading}\n columns={columns}\n data={customers}\n variant=\"card\"\n emptyMessage=\"Nenhum cliente ainda.\"\n />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Discounts tab\n// ---------------------------------------------------------------------------\n\nfunction DiscountsTab({ provider }: ShopPageProps) {\n const { items: discounts, loading, error } = useShopList<Discount>(\n () => resolveShopProvider(provider).listDiscounts({ limit: 50 }),\n [provider],\n )\n\n const columns = useMemo<ColumnDef<Discount, any>[]>(() => [\n { accessorKey: 'title', header: 'Título', cell: ({ getValue }) => <span className=\"font-medium\">{getValue() as string}</span> },\n { accessorKey: 'code', header: 'Código', cell: ({ getValue }) => <span className=\"font-mono text-sm\">{(getValue() as string | undefined) ?? '—'}</span> },\n { accessorKey: 'type', header: 'Tipo', cell: ({ getValue }) => <span className=\"text-muted-foreground\">{getValue() as string}</span> },\n {\n accessorKey: 'value', header: () => <span className=\"block text-right\">Valor</span>,\n cell: ({ row }) => <div className=\"text-right\">{row.original.type === 'percentage' ? `${row.original.value}%` : currency(row.original.value)}</div>,\n },\n {\n id: 'usos', accessorKey: 'timesUsed', header: () => <span className=\"block text-right\">Usos</span>,\n cell: ({ row }) => <div className=\"text-right\">{row.original.timesUsed}{row.original.usageLimit ? ` / ${row.original.usageLimit}` : ''}</div>,\n },\n {\n accessorKey: 'status', header: 'Status',\n cell: ({ getValue }) => {\n const status = getValue() as string\n return badge(status, statusColors[status] ?? 'bg-gray-100 text-gray-700')\n },\n },\n ], [])\n\n return (\n <div>\n {error ? (\n <ErrorState message={error} />\n ) : (\n <DataTable\n loading={loading}\n columns={columns}\n data={discounts}\n variant=\"card\"\n emptyMessage=\"Nenhum desconto cadastrado.\"\n />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main page\n// ---------------------------------------------------------------------------\n\nconst TABS = [\n { id: 'products', label: 'Produtos' },\n { id: 'orders', label: 'Pedidos' },\n { id: 'customers', label: 'Clientes' },\n { id: 'discounts', label: 'Descontos' },\n] as const\n\ntype TabId = typeof TABS[number]['id']\n\nconst TAB_COPY: Record<TabId, { title: string; subtitle: string }> = {\n products: { title: 'Produtos', subtitle: 'Catálogo da loja: preço, estoque e status.' },\n orders: { title: 'Pedidos', subtitle: 'Pedidos recebidos, pagamento e entrega.' },\n customers: { title: 'Clientes', subtitle: 'Quem comprou, quanto e com que frequência.' },\n discounts: { title: 'Descontos', subtitle: 'Cupons, regras de uso e desempenho.' },\n}\n\n/**\n * `section` pins the page to one area, which is how the sidebar routes\n * /shop/products, /shop/orders, … as separate entries. Without it the page\n * keeps its own tab bar — the single-route behaviour, still used by /shop.\n */\nexport const ShopPage: React.FC<ShopPageProps & { section?: TabId }> = ({ provider, section }) => {\n const [tab, setTab] = useState<TabId>(section ?? 'products')\n const active = section ?? tab\n\n // /orders/<id> renders the detail. Orders deliberately do not go through\n // createCrudPage: an order is not an editable record, it is a document with\n // items, money and a shipment attached.\n //\n // O caminho é /orders e não /shop/orders desde que a loja passou a ter rotas\n // de topo: casar o prefixo antigo aqui é como o clique na linha deixava de\n // abrir o detalhe.\n const path = useAdminPath()\n const orderId = section === 'orders' ? path.match(/^\\/orders\\/([^/]+)$/)?.[1] : undefined\n\n // Before the id branch: /orders/new is a screen, not an order whose number\n // happens to be \"new\".\n if (section === 'orders' && orderId === 'new') {\n return (\n <NewOrderPage\n provider={() => resolveShopProvider(provider)}\n onDone={(id) => adminNavigateTo(id ? `/orders/${id}` : '/orders')}\n onCancel={() => adminNavigateTo('/orders')}\n />\n )\n }\n\n if (orderId) {\n return (\n <div className=\"max-w-7xl\">\n <OrderDetailView\n orderId={orderId}\n provider={() => resolveShopProvider(provider)}\n onBack={() => adminNavigateTo('/orders')}\n />\n </div>\n )\n }\n const copy = section ? TAB_COPY[section] : { title: 'Loja', subtitle: 'Gerencie produtos, pedidos, clientes e descontos.' }\n\n return (\n // No padding of its own: AdminShell already wraps every page in `p-3 md:p-6`,\n // and a second p-6 here sat the orders list lower and wider than every CRUD\n // screen next to it.\n <div>\n {/* Orders follows the CRUD lists: the shell bar already names the page, so\n repeating it here was the title twice, 60px apart. */}\n {section !== 'orders' && (\n <div className=\"mb-6\">\n <h1 className=\"text-2xl font-semibold\">{copy.title}</h1>\n <p className=\"text-muted-foreground mt-1\">{copy.subtitle}</p>\n </div>\n )}\n\n {!section && (\n <div className=\"border-b mb-6\">\n <nav className=\"flex gap-1\">\n {TABS.map(t => (\n <button\n key={t.id}\n onClick={() => setTab(t.id)}\n className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${\n tab === t.id\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n }`}\n >\n {t.label}\n </button>\n ))}\n </nav>\n </div>\n )}\n\n {active === 'products' && <ProductsTab provider={provider} />}\n {active === 'orders' && <OrdersTab provider={provider} />}\n {active === 'customers' && <CustomersTab provider={provider} />}\n {active === 'discounts' && <DiscountsTab provider={provider} />}\n </div>\n )\n}\n\nShopPage.displayName = 'ShopPage'\n"]}