@fayz-ai/plugin-shop 0.8.1 → 0.8.3

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.
@@ -197,16 +197,6 @@ function OrderDetailView({
197
197
  cancelled = true;
198
198
  };
199
199
  }, [orderId]);
200
- if (loading) return /* @__PURE__ */ jsxRuntime.jsx(OrderDetailSkeleton, {});
201
- if (error) {
202
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800", children: [
203
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium", children: "N\xE3o foi poss\xEDvel carregar o pedido." }),
204
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-red-700", children: error })
205
- ] });
206
- }
207
- if (!order) return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-12 text-center text-sm text-muted-foreground", children: "Pedido n\xE3o encontrado." });
208
- const delivery = deliveryFromNotes(order.notes);
209
- const addr = order.shippingAddress;
210
200
  react.useEffect(() => {
211
201
  let cancelled = false;
212
202
  const db = core.getSupabaseClientOptional();
@@ -223,6 +213,16 @@ function OrderDetailView({
223
213
  cancelled = true;
224
214
  };
225
215
  }, [orderId, confirming]);
216
+ if (loading) return /* @__PURE__ */ jsxRuntime.jsx(OrderDetailSkeleton, {});
217
+ if (error) {
218
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800", children: [
219
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium", children: "N\xE3o foi poss\xEDvel carregar o pedido." }),
220
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-red-700", children: error })
221
+ ] });
222
+ }
223
+ if (!order) return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-12 text-center text-sm text-muted-foreground", children: "Pedido n\xE3o encontrado." });
224
+ const delivery = deliveryFromNotes(order.notes);
225
+ const addr = order.shippingAddress;
226
226
  async function registerReceipt() {
227
227
  if (!order) return;
228
228
  setConfirming(true);
@@ -741,5 +741,5 @@ var ShopPage = ({ provider, section }) => {
741
741
  ShopPage.displayName = "ShopPage";
742
742
 
743
743
  exports.ShopPage = ShopPage;
744
- //# sourceMappingURL=ShopPage-JF2SQBKO.cjs.map
745
- //# sourceMappingURL=ShopPage-JF2SQBKO.cjs.map
744
+ //# sourceMappingURL=ShopPage-ALBPZAEW.cjs.map
745
+ //# sourceMappingURL=ShopPage-ALBPZAEW.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/views/customerLookup.ts","../src/views/OrderDetailView.tsx","../src/ShopPage.tsx"],"names":["currency","jsx","Card","jsxs","CardContent","Skeleton","useState","useEffect","getSupabaseClientOptional","adminNavigateTo","PersonLink","Fragment","getShopProvider","useCallback","useMemo","DataTable","useAdminPath"],"mappings":"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","file":"ShopPage-JF2SQBKO.cjs","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"]}
1
+ {"version":3,"sources":["../src/views/customerLookup.ts","../src/views/OrderDetailView.tsx","../src/ShopPage.tsx"],"names":["currency","jsx","Card","jsxs","CardContent","Skeleton","useState","useEffect","getSupabaseClientOptional","adminNavigateTo","PersonLink","Fragment","getShopProvider","useCallback","useMemo","DataTable","useAdminPath"],"mappings":"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","file":"ShopPage-ALBPZAEW.cjs","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 /**\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 * NOTE: this hook must stay ABOVE the early returns below (loading/error/!order)\n * — a hook placed after a conditional return changes the hook order between\n * renders (React \"change in the order of Hooks\" error).\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 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 * 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"]}
@@ -195,16 +195,6 @@ function OrderDetailView({
195
195
  cancelled = true;
196
196
  };
197
197
  }, [orderId]);
198
- if (loading) return /* @__PURE__ */ jsx(OrderDetailSkeleton, {});
199
- if (error) {
200
- return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800", children: [
201
- /* @__PURE__ */ jsx("p", { className: "font-medium", children: "N\xE3o foi poss\xEDvel carregar o pedido." }),
202
- /* @__PURE__ */ jsx("p", { className: "mt-1 text-red-700", children: error })
203
- ] });
204
- }
205
- if (!order) return /* @__PURE__ */ jsx("div", { className: "py-12 text-center text-sm text-muted-foreground", children: "Pedido n\xE3o encontrado." });
206
- const delivery = deliveryFromNotes(order.notes);
207
- const addr = order.shippingAddress;
208
198
  useEffect(() => {
209
199
  let cancelled = false;
210
200
  const db = getSupabaseClientOptional();
@@ -221,6 +211,16 @@ function OrderDetailView({
221
211
  cancelled = true;
222
212
  };
223
213
  }, [orderId, confirming]);
214
+ if (loading) return /* @__PURE__ */ jsx(OrderDetailSkeleton, {});
215
+ if (error) {
216
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800", children: [
217
+ /* @__PURE__ */ jsx("p", { className: "font-medium", children: "N\xE3o foi poss\xEDvel carregar o pedido." }),
218
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-red-700", children: error })
219
+ ] });
220
+ }
221
+ if (!order) return /* @__PURE__ */ jsx("div", { className: "py-12 text-center text-sm text-muted-foreground", children: "Pedido n\xE3o encontrado." });
222
+ const delivery = deliveryFromNotes(order.notes);
223
+ const addr = order.shippingAddress;
224
224
  async function registerReceipt() {
225
225
  if (!order) return;
226
226
  setConfirming(true);
@@ -739,5 +739,5 @@ var ShopPage = ({ provider, section }) => {
739
739
  ShopPage.displayName = "ShopPage";
740
740
 
741
741
  export { ShopPage };
742
- //# sourceMappingURL=ShopPage-HCLXMN7Q.js.map
743
- //# sourceMappingURL=ShopPage-HCLXMN7Q.js.map
742
+ //# sourceMappingURL=ShopPage-TVNY74FF.js.map
743
+ //# sourceMappingURL=ShopPage-TVNY74FF.js.map
@@ -1 +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"]}
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-TVNY74FF.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 /**\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 * NOTE: this hook must stay ABOVE the early returns below (loading/error/!order)\n * — a hook placed after a conditional return changes the hook order between\n * renders (React \"change in the order of Hooks\" error).\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 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 * 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"]}
package/dist/index.cjs CHANGED
@@ -1031,7 +1031,7 @@ function ShopSettings({ currency }) {
1031
1031
  }
1032
1032
 
1033
1033
  // src/index.ts
1034
- var ShopPage = React2__default.default.lazy(() => import('./ShopPage-JF2SQBKO.cjs').then((m) => ({ default: m.ShopPage })));
1034
+ var ShopPage = React2__default.default.lazy(() => import('./ShopPage-ALBPZAEW.cjs').then((m) => ({ default: m.ShopPage })));
1035
1035
  function createShopPlugin(options) {
1036
1036
  const curr = { code: "BRL", locale: "pt-BR", symbol: "R$", ...options?.currency };
1037
1037
  shop.setShopTenantResolver(() => saas.useOrganizationStore.getState().currentOrg?.id);
package/dist/index.js CHANGED
@@ -1025,7 +1025,7 @@ function ShopSettings({ currency }) {
1025
1025
  }
1026
1026
 
1027
1027
  // src/index.ts
1028
- var ShopPage = React2.lazy(() => import('./ShopPage-HCLXMN7Q.js').then((m) => ({ default: m.ShopPage })));
1028
+ var ShopPage = React2.lazy(() => import('./ShopPage-TVNY74FF.js').then((m) => ({ default: m.ShopPage })));
1029
1029
  function createShopPlugin(options) {
1030
1030
  const curr = { code: "BRL", locale: "pt-BR", symbol: "R$", ...options?.currency };
1031
1031
  setShopTenantResolver(() => useOrganizationStore.getState().currentOrg?.id);
@@ -1 +1 @@
1
- {"version":3,"file":"OrderDetailView.d.ts","sourceRoot":"","sources":["../../src/views/OrderDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAKlD,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,eAAe,CAAA;AAyMxD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,MAAM,GACP,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,YAAY,CAAA;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,qBAqWA;AAED,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM,WAAyB,CAAA;AACnE,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,SAAyC,CAAA"}
1
+ {"version":3,"file":"OrderDetailView.d.ts","sourceRoot":"","sources":["../../src/views/OrderDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAKlD,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,eAAe,CAAA;AAyMxD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,MAAM,GACP,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,YAAY,CAAA;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,qBAyWA;AAED,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM,WAAyB,CAAA;AACnE,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,SAAyC,CAAA"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "fayz": {
4
4
  "status": "preview"
5
5
  },
6
- "version": "0.8.1",
6
+ "version": "0.8.3",
7
7
  "description": "[experimental] Fayz SDK — plugin-shop plugin",
8
8
  "type": "module",
9
9
  "main": "./dist/index.cjs",
@@ -29,10 +29,10 @@
29
29
  "@tanstack/react-table": "^8.20.0",
30
30
  "lucide-react": "^0.400.0",
31
31
  "zustand": "^4.5.0",
32
- "@fayz-ai/core": "^0.8.2",
33
- "@fayz-ai/saas": "^0.8.2",
34
- "@fayz-ai/ui": "^0.8.1",
35
- "@fayz-ai/shop": "^0.8.2"
32
+ "@fayz-ai/core": "^0.8.3",
33
+ "@fayz-ai/saas": "^0.8.3",
34
+ "@fayz-ai/shop": "^0.8.3",
35
+ "@fayz-ai/ui": "^0.8.3"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/react": "^18.3.0",
@@ -248,20 +248,6 @@ export function OrderDetailView({
248
248
  return () => { cancelled = true }
249
249
  }, [orderId])
250
250
 
251
- if (loading) return <OrderDetailSkeleton />
252
- if (error) {
253
- return (
254
- <div className="rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800">
255
- <p className="font-medium">Não foi possível carregar o pedido.</p>
256
- <p className="mt-1 text-red-700">{error}</p>
257
- </div>
258
- )
259
- }
260
- if (!order) return <div className="py-12 text-center text-sm text-muted-foreground">Pedido não encontrado.</div>
261
-
262
- const delivery = deliveryFromNotes(order.notes)
263
- const addr = order.shippingAddress
264
-
265
251
  /**
266
252
  * Load the receivable this order raised.
267
253
  *
@@ -269,6 +255,10 @@ export function OrderDetailView({
269
255
  * created by the financial plugin's own fn_invoice_from_order the moment the
270
256
  * order is placed, and plg_shop_orders.financial_status is derived from it, so
271
257
  * this panel is the money and the badge above is a consequence of it.
258
+ *
259
+ * NOTE: this hook must stay ABOVE the early returns below (loading/error/!order)
260
+ * — a hook placed after a conditional return changes the hook order between
261
+ * renders (React "change in the order of Hooks" error).
272
262
  */
273
263
  useEffect(() => {
274
264
  let cancelled = false
@@ -287,6 +277,20 @@ export function OrderDetailView({
287
277
  return () => { cancelled = true }
288
278
  }, [orderId, confirming])
289
279
 
280
+ if (loading) return <OrderDetailSkeleton />
281
+ if (error) {
282
+ return (
283
+ <div className="rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800">
284
+ <p className="font-medium">Não foi possível carregar o pedido.</p>
285
+ <p className="mt-1 text-red-700">{error}</p>
286
+ </div>
287
+ )
288
+ }
289
+ if (!order) return <div className="py-12 text-center text-sm text-muted-foreground">Pedido não encontrado.</div>
290
+
291
+ const delivery = deliveryFromNotes(order.notes)
292
+ const addr = order.shippingAddress
293
+
290
294
  /**
291
295
  * Register the receipt. This used to be "Marcar como pago" — a button that
292
296
  * flipped an enum, which is an assertion about money with no counterpart