@fayz-ai/plugin-shop 0.2.5 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/ShopPage-HCLXMN7Q.js +743 -0
  2. package/dist/ShopPage-HCLXMN7Q.js.map +1 -0
  3. package/dist/ShopPage-JF2SQBKO.cjs +745 -0
  4. package/dist/ShopPage-JF2SQBKO.cjs.map +1 -0
  5. package/dist/ShopPage.d.ts +23 -1
  6. package/dist/ShopPage.d.ts.map +1 -1
  7. package/dist/data/customerDataProvider.d.ts +5 -0
  8. package/dist/data/customerDataProvider.d.ts.map +1 -0
  9. package/dist/data/discountDataProvider.d.ts +5 -0
  10. package/dist/data/discountDataProvider.d.ts.map +1 -0
  11. package/dist/data/productDataProvider.d.ts +6 -0
  12. package/dist/data/productDataProvider.d.ts.map +1 -0
  13. package/dist/data/shared.d.ts +12 -0
  14. package/dist/data/shared.d.ts.map +1 -0
  15. package/dist/data/shippingZoneDataProvider.d.ts +13 -0
  16. package/dist/data/shippingZoneDataProvider.d.ts.map +1 -0
  17. package/dist/index.cjs +986 -26
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +987 -27
  22. package/dist/index.js.map +1 -1
  23. package/dist/views/OrderDetailView.d.ts +10 -0
  24. package/dist/views/OrderDetailView.d.ts.map +1 -0
  25. package/dist/views/ProductImagesTab.d.ts +19 -0
  26. package/dist/views/ProductImagesTab.d.ts.map +1 -0
  27. package/dist/views/customerEntity.d.ts +4 -0
  28. package/dist/views/customerEntity.d.ts.map +1 -0
  29. package/dist/views/customerLookup.d.ts +22 -0
  30. package/dist/views/customerLookup.d.ts.map +1 -0
  31. package/dist/views/discountEntity.d.ts +4 -0
  32. package/dist/views/discountEntity.d.ts.map +1 -0
  33. package/dist/views/productEntity.d.ts +6 -0
  34. package/dist/views/productEntity.d.ts.map +1 -0
  35. package/dist/views/shippingZoneEntity.d.ts +4 -0
  36. package/dist/views/shippingZoneEntity.d.ts.map +1 -0
  37. package/package.json +8 -5
  38. package/src/ShopPage.tsx +156 -54
  39. package/src/data/customerDataProvider.ts +31 -0
  40. package/src/data/discountDataProvider.ts +42 -0
  41. package/src/data/productDataProvider.ts +54 -0
  42. package/src/data/shared.ts +42 -0
  43. package/src/data/shippingZoneDataProvider.ts +49 -0
  44. package/src/index.ts +104 -12
  45. package/src/views/OrderDetailView.tsx +575 -0
  46. package/src/views/ProductImagesTab.tsx +183 -0
  47. package/src/views/customerEntity.tsx +110 -0
  48. package/src/views/customerLookup.ts +31 -0
  49. package/src/views/discountEntity.tsx +137 -0
  50. package/src/views/productEntity.tsx +229 -0
  51. package/src/views/shippingZoneEntity.tsx +123 -0
  52. package/dist/ShopPage-65PPVKBD.js +0 -271
  53. package/dist/ShopPage-65PPVKBD.js.map +0 -1
  54. package/dist/ShopPage-PG5GKOZU.cjs +0 -273
  55. package/dist/ShopPage-PG5GKOZU.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/views/customerLookup.ts","../src/views/OrderDetailView.tsx","../src/ShopPage.tsx"],"names":["currency","jsx","useState","useEffect","jsxs","PersonLink","adminNavigateTo"],"mappings":"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","file":"ShopPage-HCLXMN7Q.js","sourcesContent":["import type { ShopProvider } from '@fayz-ai/shop'\n\n/**\n * Feeds the shared PersonLink popover from the shop's own customer table.\n * The default lookup reads the `person` archetype (`people`), where a shop\n * customer does not exist — so without this the card would come up empty.\n */\nexport function shopCustomerLookup(provider: () => ShopProvider) {\n return {\n async getById(id: string) {\n const c = await provider().getCustomer(id)\n if (!c) return null\n const name = [c.firstName, c.lastName].filter(Boolean).join(' ')\n return {\n id: c.id,\n label: name || c.email || 'Cliente',\n subtitle: c.email ?? undefined,\n group: 'shop_customer',\n // PersonLink reads contact fields off `data`, so the keys must match the\n // shape it expects (email/phone), not our camelCase type.\n data: {\n email: c.email ?? undefined,\n phone: c.phone ?? undefined,\n kind: 'shop_customer',\n orders_count: c.ordersCount,\n total_spent: c.totalSpent,\n },\n }\n },\n }\n}\n","import React, { useEffect, useState } from 'react'\nimport { Card, CardContent, Skeleton } from '@fayz-ai/ui'\nimport { adminNavigateTo } from '@fayz-ai/saas'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { shopCustomerLookup } from './customerLookup'\nimport type { Order, ShopProvider } from '@fayz-ai/shop'\nimport { getSupabaseClientOptional } 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\n/**\n * The receivable this order raised, as the financial plugin models it: bills are\n * obligations (plg_financial_movements, movement_kind='bill') and\n * v_invoice_balances derives what is billed, paid and still owed.\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 RECEIVABLE_LABEL: Record<string, string> = {\n open: 'Em aberto', partial: 'Parcialmente recebido', paid: 'Recebido',\n overdue: 'Vencido', cancelled: 'Cancelado',\n}\nconst RECEIVABLE_TONE: Record<string, string> = {\n open: 'bg-blue-100 text-blue-800', partial: 'bg-yellow-100 text-yellow-800',\n paid: 'bg-emerald-100 text-emerald-800', overdue: 'bg-red-100 text-red-700',\n cancelled: 'bg-gray-100 text-gray-700',\n}\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// ---------------------------------------------------------------------------\n// Order detail — modelled on what a merchant actually needs to act on an order:\n// what was bought, whether the money arrived, and where it has to go. The three\n// blocks mirror the three downstream systems (catalogue, financial, logistics)\n// so the page doubles as the integration surface.\n//\n// Fields the schema cannot supply yet are shown as explicit gaps rather than\n// omitted, because \"no tracking code\" and \"tracking code not modelled\" are very\n// different problems for whoever picks this up.\n// ---------------------------------------------------------------------------\n\nconst money = (v: number, currency = 'BRL') =>\n new Intl.NumberFormat('pt-BR', { style: 'currency', currency }).format(Number(v) || 0)\n\nconst dateTime = (iso: string) =>\n new Intl.DateTimeFormat('pt-BR', {\n day: '2-digit', month: '2-digit', year: 'numeric',\n hour: '2-digit', minute: '2-digit',\n }).format(new Date(iso))\n\nconst TONE: Record<string, string> = {\n paid: 'bg-emerald-100 text-emerald-800',\n pending: 'bg-yellow-100 text-yellow-800',\n refunded: 'bg-orange-100 text-orange-700',\n partially_refunded: 'bg-orange-100 text-orange-700',\n voided: 'bg-gray-100 text-gray-700',\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 open: 'bg-blue-100 text-blue-800',\n cancelled: 'bg-red-100 text-red-700',\n archived: 'bg-gray-100 text-gray-700',\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\nconst 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\nfunction Badge({ value }: { value: string }) {\n return (\n <span className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${TONE[value] ?? TONE.open}`}>\n {LABEL[value] ?? value}\n </span>\n )\n}\n\nfunction Block({ title, hint, children }: { title: string; hint?: string; children: React.ReactNode }) {\n return (\n <Card>\n <CardContent className=\"pt-4\">\n <h3 className=\"text-sm font-semibold\">{title}</h3>\n {hint && <p className=\"mt-0.5 text-xs text-muted-foreground\">{hint}</p>}\n <div className=\"mt-3\">{children}</div>\n </CardContent>\n </Card>\n )\n}\n\nfunction Row({ label, value, strong }: { label: string; value: React.ReactNode; strong?: boolean }) {\n return (\n <div className={`flex items-baseline justify-between gap-4 py-1 ${strong ? 'font-semibold' : ''}`}>\n <span className={strong ? '' : 'text-muted-foreground'}>{label}</span>\n <span className=\"tabular-nums\">{value}</span>\n </div>\n )\n}\n\n/**\n * The buyer's address currently travels as free text in `notes`, prefixed\n * \"Entrega:\" by the storefront checkout (workflows/checkout.ts). There is no\n * structured address column on plg_shop_orders, so logistics has to read this\n * string. Parsed here so the merchant at least sees it as an address.\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/**\n * Mirrors the loaded layout (header, two-column grid, same block order) so the\n * page doesn't reflow when the order arrives.\n */\nfunction BlockSkeleton({ rows }: { rows: number }) {\n return (\n <Card>\n <CardContent className=\"pt-4\">\n <Skeleton className=\"h-4 w-28\" />\n <div className=\"mt-4 space-y-2.5\">\n {Array.from({ length: rows }).map((_, i) => (\n <Skeleton key={i} className={`h-3 ${i % 3 === 2 ? 'w-1/2' : i % 3 === 1 ? 'w-2/3' : 'w-full'}`} />\n ))}\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction OrderDetailSkeleton() {\n return (\n <div className=\"space-y-4\" aria-busy=\"true\" aria-live=\"polite\">\n <Skeleton className=\"h-4 w-20\" />\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <Skeleton className=\"h-8 w-48\" />\n <Skeleton className=\"h-5 w-20 rounded-full\" />\n <Skeleton className=\"h-5 w-24 rounded-full\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"space-y-4 lg:col-span-2\">\n <Card>\n <CardContent className=\"pt-4\">\n <Skeleton className=\"h-4 w-16\" />\n <Skeleton className=\"mt-1.5 h-3 w-24\" />\n <div className=\"mt-3 divide-y\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 py-2\">\n <Skeleton className=\"h-10 w-10 shrink-0 rounded\" />\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-2/5\" />\n <Skeleton className=\"h-2.5 w-20\" />\n </div>\n <Skeleton className=\"h-3 w-24\" />\n <Skeleton className=\"h-3 w-16\" />\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n <BlockSkeleton rows={6} />\n </div>\n\n <div className=\"space-y-4\">\n <BlockSkeleton rows={2} />\n <BlockSkeleton rows={4} />\n <BlockSkeleton rows={3} />\n </div>\n </div>\n </div>\n )\n}\n\nexport function OrderDetailView({\n orderId,\n provider,\n onBack,\n}: {\n orderId: string\n provider: () => ShopProvider\n onBack: () => void\n}) {\n const [order, setOrder] = useState<Order | null>(null)\n const [shipments, setShipments] = useState<Fulfillment[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [confirming, setConfirming] = useState(false)\n const [confirmError, setConfirmError] = useState<string | null>(null)\n const [receivable, setReceivable] = useState<Receivable | null>(null)\n\n useEffect(() => {\n let cancelled = false\n setLoading(true)\n setError(null)\n provider().getOrder(orderId)\n .then((o) => { if (!cancelled) setOrder(o) })\n .catch((err: unknown) => {\n if (!cancelled) setError(err instanceof Error ? err.message : String(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 db.from('fulfillments')\n .select('*')\n .eq('order_id', orderId)\n .order('created_at', { ascending: false })\n .then(({ data }: { data: Fulfillment[] | null }) => {\n if (!cancelled) setShipments(data ?? [])\n })\n return () => { cancelled = true }\n }, [orderId])\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 delivery = deliveryFromNotes(order.notes)\n const addr = order.shippingAddress\n\n /**\n * Load the receivable this order raised.\n *\n * The order does not decide whether it was paid — the receivable does. It is\n * created by the financial plugin's own fn_invoice_from_order the moment the\n * order is placed, and plg_shop_orders.financial_status is derived from it, so\n * this panel is the money and the badge above is a consequence of it.\n */\n useEffect(() => {\n let cancelled = false\n const db = getSupabaseClientOptional() as unknown as { from: (t: string) => any } | null\n if (!db) return\n void (async () => {\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('*')\n .eq('invoice_id', orderId).eq('movement_kind', 'bill')\n .order('installment_number', { ascending: true }),\n ])\n if (cancelled || !balance?.data) return\n setReceivable({ balance: balance.data, bills: bills?.data ?? [] })\n })()\n return () => { cancelled = true }\n }, [orderId, confirming])\n\n /**\n * Register the receipt. This used to be \"Marcar como pago\" — a button that\n * flipped an enum, which is an assertion about money with no counterpart\n * anywhere: no receivable, no due date, no instalment, no bank, no fee.\n *\n * It now writes `payment` movements against the open instalments, which is\n * what the Financeiro reads, and the order's status follows from that.\n */\n async function registerReceipt() {\n if (!order) return\n setConfirming(true)\n setConfirmError(null)\n try {\n const updated = await provider().confirmPayment?.(order.id)\n if (updated) setOrder(updated)\n else setOrder(await provider().getOrder(order.id))\n } catch (err: unknown) {\n setConfirmError(err instanceof Error ? err.message : String(err))\n } finally {\n setConfirming(false)\n }\n }\n\n return (\n <div className=\"space-y-4\">\n <button onClick={onBack} className=\"text-sm text-muted-foreground hover:text-foreground\">\n ← Pedidos\n </button>\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-2xl font-semibold\">Pedido #{order.orderNumber}</h1>\n <Badge value={order.financialStatus} />\n <Badge value={order.fulfillmentStatus} />\n <span className=\"text-sm text-muted-foreground\">{dateTime(order.createdAt)}</span>\n </div>\n {confirmError && (\n <p className=\"rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800\">\n Não foi possível confirmar o pagamento: {confirmError}\n </p>\n )}\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"space-y-4 lg:col-span-2\">\n <Block title=\"Itens\" hint={`${order.items.length} item(ns)`}>\n <div className=\"divide-y\">\n {order.items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-3 py-2\">\n {item.imageUrl\n ? <img src={item.imageUrl} alt=\"\" className=\"h-10 w-10 shrink-0 rounded object-cover\" />\n : <div className=\"h-10 w-10 shrink-0 rounded bg-muted\" />}\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium\">{item.name}</p>\n {item.sku && <p className=\"text-xs text-muted-foreground\">{item.sku}</p>}\n </div>\n <span className=\"text-sm text-muted-foreground\">\n {item.quantity} × {money(item.unitPrice, order.currency)}\n </span>\n <span className=\"w-24 text-right text-sm font-medium tabular-nums\">\n {money(item.total, order.currency)}\n </span>\n </div>\n ))}\n </div>\n </Block>\n\n <Block title=\"Pagamento\" hint=\"O que o financeiro precisa conciliar\">\n <div className=\"text-sm\">\n <Row label=\"Subtotal\" value={money(order.subtotal, order.currency)} />\n {order.discountTotal > 0 && (\n <Row\n label={`Desconto${order.discountCode ? ` (${order.discountCode})` : ''}`}\n value={`− ${money(order.discountTotal, order.currency)}`}\n />\n )}\n <Row label=\"Entrega\" value={money(order.shippingTotal, order.currency)} />\n <Row label=\"Impostos\" value={money(order.taxTotal, order.currency)} />\n <div className=\"mt-2 border-t pt-2\">\n <Row label=\"Total\" value={money(order.total, order.currency)} strong />\n </div>\n <div className=\"mt-3 border-t pt-2\">\n <Row label=\"Forma de pagamento\" value={PAYMENT_LABEL[order.paymentMethodKind ?? ''] ?? '—'} />\n {order.paidAt && <Row label=\"Pago em\" value={dateTime(order.paidAt)} />}\n </div>\n {!order.paymentMethodKind && (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Este pedido é anterior ao registro de forma de pagamento.\n </p>\n )}\n </div>\n </Block>\n\n {/*\n The receivable, which is where the money actually lives. This block\n replaced a \"Marcar como pago\" button: that flipped an enum and left\n no receivable, no due date, no instalment and nothing for the\n Financeiro to reconcile. financial_status above is now DERIVED from\n what is shown here, so the two cannot disagree.\n */}\n <Block\n title=\"Contas a receber\"\n hint=\"Criado automaticamente quando o pedido foi feito — o mesmo registro que o Financeiro lê\"\n >\n {!receivable ? (\n <p className=\"text-sm text-muted-foreground\">\n Sem conta a receber para este pedido.\n </p>\n ) : (\n <div className=\"text-sm\">\n <div className=\"mb-3 flex flex-wrap items-center gap-2\">\n <span className=\"font-mono font-semibold\">\n {receivable.balance.reference_number ?? '—'}\n </span>\n <span className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${\n RECEIVABLE_TONE[receivable.balance.status] ?? RECEIVABLE_TONE.open}`}>\n {RECEIVABLE_LABEL[receivable.balance.status] ?? receivable.balance.status}\n </span>\n </div>\n\n <Row label=\"Faturado\" value={money(receivable.balance.amount, order.currency)} />\n <Row label=\"Recebido\" value={money(receivable.balance.paid, order.currency)} />\n <div className=\"mt-2 border-t pt-2\">\n <Row label=\"Saldo\" value={money(receivable.balance.balance, order.currency)} strong />\n </div>\n\n {receivable.bills.length > 1 && (\n <ul className=\"mt-3 space-y-1 border-t pt-2 text-xs\">\n {receivable.bills.map((bill) => (\n <li key={bill.id} className=\"flex items-baseline justify-between gap-3\">\n <span className=\"text-muted-foreground\">\n Parcela {bill.installment_number} · vence {new Date(bill.due_date).toLocaleDateString('pt-BR')}\n </span>\n <span className=\"tabular-nums\">\n {money(Number(bill.paid_amount ?? 0), order.currency)} / {money(Number(bill.amount), order.currency)}\n </span>\n </li>\n ))}\n </ul>\n )}\n\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {receivable.balance.balance > 0 && receivable.balance.status !== 'cancelled' && (\n <button\n type=\"button\"\n onClick={registerReceipt}\n disabled={confirming}\n 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 >\n {confirming ? 'Registrando…' : 'Registrar recebimento'}\n </button>\n )}\n {/* The full flow — banco, maquininha, taxa, caixa — is the\n Financeiro's own screen. Duplicating it here would be a\n second answer to the same question. */}\n <button\n type=\"button\"\n onClick={() => adminNavigateTo('/financial')}\n className=\"rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\"\n >\n Abrir no Financeiro\n </button>\n </div>\n\n {confirmError && (\n <p className=\"mt-2 rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-800\">\n {confirmError}\n </p>\n )}\n </div>\n )}\n </Block>\n </div>\n\n <div className=\"space-y-4\">\n <Block title=\"Cliente\">\n <div className=\"space-y-1 text-sm\">\n {/* Links to the customer record so the operator can see history,\n contact details and other orders without leaving the flow. */}\n {order.customerId ? (\n <PersonLink\n personId={order.customerId}\n name={order.customerName ?? order.customerEmail ?? 'Cliente'}\n lookup={shopCustomerLookup(provider)}\n profileHref={`#/shop/customers/${order.customerId}`}\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 && (\n <p className=\"text-xs text-muted-foreground\">\n Compra sem cadastro — não há ficha de cliente para abrir.\n </p>\n )}\n </div>\n </Block>\n\n <Block 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('/')}\n {addr.postal_code ? ` · ${addr.postal_code}` : ''}\n </p>\n {(addr.recipient || addr.phone) && (\n <p className=\"text-xs text-muted-foreground\">\n {[addr.recipient, addr.phone].filter(Boolean).join(' · ')}\n </p>\n )}\n </div>\n ) : (\n <>\n <p className={delivery ? '' : 'text-muted-foreground'}>\n {delivery ?? 'Nenhum endereço registrado neste pedido.'}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Pedido anterior ao endereço estruturado — só existe o texto livre das\n observações, sem CEP, número ou bairro separáveis.\n </p>\n </>\n )}\n <div className=\"border-t pt-2\">\n <Row label=\"Status\" value={<Badge value={order.fulfillmentStatus} />} />\n\n {shipments.length === 0 ? (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Nenhum envio registrado. Ao despachar, informe transportadora e código\n de rastreio — o status do pedido é calculado a partir dos envios.\n </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\">\n {[s.carrier, s.service].filter(Boolean).join(' · ') || 'Envio'}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n {SHIPMENT_LABEL[s.status] ?? s.status}\n </span>\n </div>\n {s.tracking_code && (\n <p className=\"mt-0.5 font-mono text-xs\">\n {s.tracking_url\n ? <a href={s.tracking_url} target=\"_blank\" rel=\"noreferrer\" className=\"text-primary hover:underline\">{s.tracking_code}</a>\n : 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 </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </Block>\n\n <Block title=\"Histórico\">\n <div className=\"space-y-1 text-sm\">\n <Row label=\"Criado\" value={dateTime(order.createdAt)} />\n <Row label=\"Atualizado\" value={dateTime(order.updatedAt)} />\n <Row label=\"Situação\" value={<Badge value={order.status} />} />\n </div>\n </Block>\n\n {order.notes && (\n <Block title=\"Observações\">\n <p className=\"whitespace-pre-wrap text-sm text-muted-foreground\">{order.notes}</p>\n </Block>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport const orderDetailPath = (id: string) => `/shop/orders/${id}`\nexport const goToOrder = (id: string) => adminNavigateTo(orderDetailPath(id))\n","import React, { useEffect, useState, useCallback, useMemo } from 'react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable } from '@fayz-ai/ui'\nimport { getShopProvider } from '@fayz-ai/shop'\nimport { useAdminPath, adminNavigateTo } from '@fayz-ai/saas'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { shopCustomerLookup } from './views/customerLookup'\nimport { OrderDetailView } from './views/OrderDetailView'\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\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(err instanceof Error ? err.message : String(err))\n })\n .finally(() => { if (!cancelled) setLoading(false) })\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n\n return { items, loading, error }\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(err instanceof Error ? err.message : String(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 } = useShopList<Order>(\n () => resolveShopProvider(provider).listOrders({ limit: 50 }),\n [provider],\n )\n\n const columns = useMemo<ColumnDef<Order, any>[]>(() => [\n { accessorKey: 'orderNumber', header: 'Pedido', cell: ({ getValue }) => <span className=\"font-medium\">#{getValue() as string}</span> },\n {\n id: 'customer', accessorFn: (o) => o.customerName ?? o.customerEmail ?? '—', header: 'Cliente',\n // Links to the customer record. stopPropagation because the row itself\n // opens the order — without it the click would do both.\n cell: ({ getValue, row }) => {\n const label = getValue() as string\n const id = row.original.customerId\n if (!id) return <span>{label}</span>\n return (\n <PersonLink\n personId={id}\n name={label}\n lookup={shopCustomerLookup(() => resolveShopProvider(provider))}\n profileHref={`#/shop/customers/${id}`}\n />\n )\n },\n },\n {\n accessorKey: 'total', header: () => <span className=\"block text-right\">Total</span>,\n cell: ({ getValue, row }) => <div className=\"text-right font-medium\">{currency(getValue() as number, row.original.currency)}</div>,\n },\n {\n accessorKey: 'financialStatus', header: 'Pagamento',\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 accessorKey: 'fulfillmentStatus', header: 'Entrega',\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 accessorKey: 'createdAt', header: 'Data',\n cell: ({ getValue }) => {\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(getValue() as string)\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 ], [])\n\n return (\n <div>\n {error ? (\n <ErrorState message={error} />\n ) : (\n <DataTable\n loading={loading}\n columns={columns}\n data={orders}\n variant=\"card\"\n emptyMessage=\"Nenhum pedido ainda.\"\n onRowClick={(row: Order) => adminNavigateTo(`/shop/orders/${row.id}`)}\n />\n )}\n </div>\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 // /shop/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 const path = useAdminPath()\n const orderId = section === 'orders' ? path.match(/^\\/shop\\/orders\\/([^/]+)$/)?.[1] : undefined\n if (orderId) {\n return (\n <div className=\"p-6 max-w-7xl mx-auto\">\n <OrderDetailView\n orderId={orderId}\n provider={() => resolveShopProvider(provider)}\n onBack={() => adminNavigateTo('/shop/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 <div className=\"p-6 max-w-7xl mx-auto\">\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 {!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"]}