@burdenoff/microfe-devportal 2026.915.12 → 2026.916.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/devportal/DevportalRoutes.d.ts.map +1 -1
- package/dist/devportal/DevportalRoutes.js +131 -126
- package/dist/devportal/DevportalRoutes.js.map +1 -1
- package/dist/devportal/pages/OrganizationDetailPage.d.ts.map +1 -1
- package/dist/devportal/pages/OrganizationDetailPage.js +532 -524
- package/dist/devportal/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationsPage.d.ts.map +1 -1
- package/dist/devportal/pages/OrganizationsPage.js +79 -93
- package/dist/devportal/pages/OrganizationsPage.js.map +1 -1
- package/dist/devportal/pages/RevenueDashboardPage.d.ts.map +1 -1
- package/dist/devportal/pages/RevenueDashboardPage.js +196 -203
- package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -1
- package/dist/devportal/pages/SellerOrdersPage.d.ts.map +1 -1
- package/dist/devportal/pages/SellerOrdersPage.js +100 -106
- package/dist/devportal/pages/SellerOrdersPage.js.map +1 -1
- package/dist/devportal/utils/currency.d.ts +2 -0
- package/dist/devportal/utils/currency.d.ts.map +1 -0
- package/dist/devportal/utils/currency.js +12 -0
- package/dist/devportal/utils/currency.js.map +1 -0
- package/dist/generated/global-operations.js +51 -44
- package/dist/generated/global-operations.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SellerOrdersPage.js","names":[],"sources":["../../../src/devportal/pages/SellerOrdersPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useEffect, useState, useMemo, useCallback } from \"react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport {\n ShoppingBag,\n Loader2,\n AlertCircle,\n Package,\n ChevronDown,\n Flag,\n CheckCircle2,\n} from \"lucide-react\";\nimport { PageLayout } from \"../components/PageLayout\";\nimport { EmptyState } from \"../components/EmptyState\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { PermissionGuard, ReportOrderIssueModal } from \"../components\";\nimport type { OrderIssueCategory } from \"../components/ReportOrderIssueModal\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype SaleStatus =\n | \"PENDING\"\n | \"COMPLETED\"\n | \"REFUNDED\"\n | \"PARTIAL_REFUND\"\n | \"DISPUTED\"\n | \"CHARGEBACK\"\n | \"CANCELLED\";\n\ninterface OrgSummary {\n id: string;\n name: string;\n slug: string;\n kind: \"DIGITAL\" | \"PHYSICAL\";\n}\n\ninterface SellerOrder {\n id: string;\n storeOrderId: string | null;\n storeProductId: string | null;\n grossAmount: number;\n netAmount: number;\n platformFee: number;\n currency: string;\n status: SaleStatus;\n buyerUserId: string;\n purchasedAt: string;\n refundAmount: number | null;\n refundedAt: string | null;\n refundReason: string | null;\n discountAmount: number | null;\n taxAmount: number | null;\n}\n\ninterface IssueFlag {\n id: string;\n category: OrderIssueCategory;\n note: string | null;\n status: \"OPEN\" | \"RESOLVED\";\n raisedByOrgId: string;\n createdAt: string;\n}\n\nconst ISSUE_CATEGORY_LABELS: Record<OrderIssueCategory, string> = {\n OUT_OF_STOCK: \"Out of stock\",\n CANNOT_FULFILL: \"Cannot fulfill\",\n WRONG_ADDRESS: \"Wrong address\",\n OTHER: \"Other\",\n};\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst STATUS_STYLES: Record<SaleStatus, { label: string; className: string }> =\n {\n PENDING: {\n label: \"Pending\",\n className: \"text-status-warning-text bg-status-warning-bg-subtle\",\n },\n COMPLETED: {\n label: \"Completed\",\n className: \"text-status-success-text bg-status-success-bg-subtle\",\n },\n REFUNDED: {\n label: \"Refunded\",\n className: \"text-status-error-text bg-status-error-bg/10\",\n },\n PARTIAL_REFUND: {\n label: \"Partial Refund\",\n className: \"text-status-warning-text bg-status-warning-bg-subtle\",\n },\n DISPUTED: {\n label: \"Disputed\",\n className: \"text-status-error-text bg-status-error-bg/10\",\n },\n CHARGEBACK: {\n label: \"Chargeback\",\n className: \"text-status-error-text bg-status-error-bg/10\",\n },\n CANCELLED: {\n label: \"Cancelled\",\n className: \"text-text-muted bg-bg-muted\",\n },\n };\n\nconst STATUS_FILTER_OPTIONS: { value: SaleStatus | \"\"; label: string }[] = [\n { value: \"\", label: \"All Orders\" },\n { value: \"PENDING\", label: \"Pending\" },\n { value: \"COMPLETED\", label: \"Completed\" },\n { value: \"REFUNDED\", label: \"Refunded\" },\n { value: \"PARTIAL_REFUND\", label: \"Partial Refund\" },\n { value: \"DISPUTED\", label: \"Disputed\" },\n { value: \"CANCELLED\", label: \"Cancelled\" },\n];\n\n// ---------------------------------------------------------------------------\n// GraphQL\n// ---------------------------------------------------------------------------\n\nconst ORGS_QUERY = `\n query SellerOrdersOrgs {\n myDeveloperOrganizations {\n id\n name\n slug\n kind\n }\n }\n`;\n\nconst ORDERS_QUERY = `\n query SellerOrders($organizationId: ID!, $status: SaleStatus, $limit: Int, $offset: Int) {\n developerOrgSales(\n organizationId: $organizationId\n status: $status\n limit: $limit\n offset: $offset\n ) {\n totalCount\n edges {\n node {\n id\n storeOrderId\n storeProductId\n grossAmount\n netAmount\n platformFee\n currency\n status\n buyerUserId\n purchasedAt\n refundAmount\n refundedAt\n refundReason\n discountAmount\n taxAmount\n }\n }\n pageInfo { hasNextPage hasPreviousPage }\n }\n }\n`;\n\nconst RESOLVE_ORDER_ISSUE_MUTATION = `\n mutation ResolveOrderIssue($id: ID!, $organizationId: ID) {\n resolveOrderIssueFlag(id: $id, organizationId: $organizationId) {\n id\n status\n }\n }\n`;\n\nconst ISSUE_FLAG_FIELDS = `id category note status raisedByOrgId createdAt`;\n\n/**\n * One `orderIssueFlags` call per visible physical order, batched into a\n * single request via GraphQL field aliasing — avoids N network round-trips\n * for a page of up to 25 orders.\n */\nfunction buildIssueFlagsBatchQuery(orderIds: string[]): string {\n const fields = orderIds\n .map(\n (id, i) =>\n `f${i}: orderIssueFlags(orderId: ${JSON.stringify(id)}) { ${ISSUE_FLAG_FIELDS} }`,\n )\n .join(\"\\n \");\n return `query SellerOrderIssueFlags {\\n ${fields}\\n }`;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction formatCurrency(amount: number, currency: string): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: currency || \"USD\",\n minimumFractionDigits: 2,\n }).format(amount);\n}\n\nfunction formatDate(iso: string): string {\n return new Date(iso).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction shortOrderId(id: string | null, fallback: string): string {\n if (id) return `#${id.slice(0, 8).toUpperCase()}`;\n return `#${fallback.slice(0, 8).toUpperCase()}`;\n}\n\n// ---------------------------------------------------------------------------\n// Page\n// ---------------------------------------------------------------------------\n\nexport const SellerOrdersPage: FC = () => {\n const { apiGatewayUrl, authToken } = useDevportal();\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const gqlUrl = apiGatewayUrl ?? \"/global/graphql\";\n\n const [orgsLoading, setOrgsLoading] = useState(true);\n const [orgs, setOrgs] = useState<OrgSummary[]>([]);\n const [selectedOrgId, setSelectedOrgId] = useState<string | null>(null);\n\n const [ordersLoading, setOrdersLoading] = useState(false);\n const [orders, setOrders] = useState<SellerOrder[]>([]);\n const [totalCount, setTotalCount] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [retryToken, setRetryToken] = useState(0);\n\n const [statusFilter, setStatusFilter] = useState<SaleStatus | \"\">(\"\");\n const [page, setPage] = useState(0);\n const PAGE_SIZE = 25;\n\n const headers = useMemo(\n () => ({\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${authToken ?? \"\"}`,\n }),\n [authToken],\n );\n\n // Fetch orgs on mount\n useEffect(() => {\n let cancelled = false;\n setOrgsLoading(true);\n\n const run = async () => {\n try {\n const res = await fetch(gqlUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ query: ORGS_QUERY }),\n });\n const json = (await res.json()) as {\n data?: { myDeveloperOrganizations?: OrgSummary[] };\n };\n if (cancelled) return;\n // Seller portal only ever shows PHYSICAL-kind orgs — see\n // DeveloperOrgKind (BOFF-7285).\n const fetched = (json.data?.myDeveloperOrganizations ?? []).filter(\n (org) => org.kind === \"PHYSICAL\",\n );\n setOrgs(fetched);\n if (fetched.length > 0) setSelectedOrgId(fetched[0]!.id);\n } catch {\n // leave orgs empty\n } finally {\n if (!cancelled) setOrgsLoading(false);\n }\n };\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [gqlUrl, headers]);\n\n // Fetch orders when org/filter/page changes\n useEffect(() => {\n if (!selectedOrgId) return;\n let cancelled = false;\n setOrdersLoading(true);\n setError(null);\n\n const run = async () => {\n try {\n const variables: Record<string, unknown> = {\n organizationId: selectedOrgId,\n limit: PAGE_SIZE,\n offset: page * PAGE_SIZE,\n };\n if (statusFilter) variables.status = statusFilter;\n\n const res = await fetch(gqlUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ query: ORDERS_QUERY, variables }),\n });\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const json = (await res.json()) as {\n data?: {\n developerOrgSales?: {\n totalCount: number;\n edges: {\n node: Omit<SellerOrder, \"status\"> & { status: string };\n }[];\n };\n };\n errors?: { message: string }[];\n };\n if (cancelled) return;\n if (json.errors?.length) {\n throw new Error(json.errors[0]?.message ?? \"GraphQL error\");\n }\n const conn = json.data?.developerOrgSales;\n setTotalCount(conn?.totalCount ?? 0);\n // Show all orders; physical-product ones have storeProductId set\n setOrders(\n (conn?.edges ?? []).map((e) => ({\n ...e.node,\n status: e.node.status as SaleStatus,\n })),\n );\n } catch (err) {\n if (!cancelled)\n setError(\n err instanceof Error ? err.message : \"Failed to load orders\",\n );\n } finally {\n if (!cancelled) setOrdersLoading(false);\n }\n };\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [selectedOrgId, statusFilter, page, gqlUrl, headers, retryToken]);\n\n // Physical product orders (storeProductId set) vs digital\n const physicalOrders = useMemo(\n () => orders.filter((o) => o.storeProductId !== null),\n [orders],\n );\n\n // Seller-reported issue flags for the currently visible physical orders,\n // keyed by storeOrderId. Fetched as one batched (aliased) request.\n const [issueFlagsByOrderId, setIssueFlagsByOrderId] = useState<\n Record<string, IssueFlag[]>\n >({});\n const [reportModalOrderId, setReportModalOrderId] = useState<string | null>(\n null,\n );\n const [resolvingFlagId, setResolvingFlagId] = useState<string | null>(null);\n\n const visibleStoreOrderIds = useMemo(\n () =>\n physicalOrders\n .map((o) => o.storeOrderId)\n .filter((id): id is string => id !== null),\n [physicalOrders],\n );\n\n const fetchIssueFlags = useCallback(async () => {\n if (visibleStoreOrderIds.length === 0) {\n setIssueFlagsByOrderId({});\n return;\n }\n try {\n const res = await fetch(gqlUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n query: buildIssueFlagsBatchQuery(visibleStoreOrderIds),\n }),\n });\n const json = (await res.json()) as {\n data?: Record<string, IssueFlag[]>;\n };\n const next: Record<string, IssueFlag[]> = {};\n visibleStoreOrderIds.forEach((id, i) => {\n next[id] = json.data?.[`f${i}`] ?? [];\n });\n setIssueFlagsByOrderId(next);\n } catch {\n // Non-critical — the orders table itself still renders fine without flags\n }\n }, [gqlUrl, headers, visibleStoreOrderIds]);\n\n useEffect(() => {\n void fetchIssueFlags();\n }, [fetchIssueFlags]);\n\n const handleResolveFlag = async (flagId: string, organizationId: string) => {\n setResolvingFlagId(flagId);\n try {\n await fetch(gqlUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n query: RESOLVE_ORDER_ISSUE_MUTATION,\n variables: { id: flagId, organizationId },\n }),\n });\n await fetchIssueFlags();\n } finally {\n setResolvingFlagId(null);\n }\n };\n\n const stats = useMemo(() => {\n const all = physicalOrders;\n return {\n total: totalCount,\n pending: all.filter((o) => o.status === \"PENDING\").length,\n completed: all.filter((o) => o.status === \"COMPLETED\").length,\n refunded: all.filter(\n (o) => o.status === \"REFUNDED\" || o.status === \"PARTIAL_REFUND\",\n ).length,\n };\n }, [physicalOrders, totalCount]);\n\n if (orgsLoading) {\n return (\n <PageLayout title={tr(\"devportal.orders\", \"Orders\")}>\n <div className=\"flex items-center justify-center py-20\">\n <Loader2 className=\"h-8 w-8 animate-spin text-text-secondary\" />\n </div>\n </PageLayout>\n );\n }\n\n if (orgs.length === 0) {\n return (\n <PageLayout\n title={tr(\"devportal.orders\", \"Orders\")}\n description={tr(\n \"devportal.ordersDesc\",\n \"Orders placed by customers for your physical items.\",\n )}\n >\n <EmptyState\n illustration=\"empty-generic\"\n icon={<ShoppingBag size={32} />}\n title={tr(\"devportal.noOrgForOrders\", \"No organization yet\")}\n description={tr(\n \"devportal.createOrgToSell\",\n \"Create a developer organization to start selling physical products and receive orders.\",\n )}\n />\n </PageLayout>\n );\n }\n\n return (\n <PermissionGuard authOnly>\n <PageLayout\n title={tr(\"devportal.orders\", \"Orders\")}\n description={tr(\n \"devportal.ordersDesc\",\n \"Orders placed by customers for your physical items.\",\n )}\n >\n {/* Controls row */}\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-6\">\n {/* Org picker (shown only when multiple orgs) */}\n {orgs.length > 1 && (\n <div className=\"relative\">\n <select\n value={selectedOrgId ?? \"\"}\n onChange={(e) => {\n setSelectedOrgId(e.target.value);\n setPage(0);\n }}\n className=\"appearance-none rounded-md border border-border-seam bg-bg-surface pl-3 pr-8 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-primary\"\n >\n {orgs.map((org) => (\n <option key={org.id} value={org.id}>\n {org.name}\n </option>\n ))}\n </select>\n <ChevronDown\n size={14}\n className=\"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-text-muted\"\n />\n </div>\n )}\n\n {/* Status filter */}\n <div className=\"relative\">\n <select\n value={statusFilter}\n onChange={(e) => {\n setStatusFilter(e.target.value as SaleStatus | \"\");\n setPage(0);\n }}\n className=\"appearance-none rounded-md border border-border-seam bg-bg-surface pl-3 pr-8 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-primary\"\n >\n {STATUS_FILTER_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n <ChevronDown\n size={14}\n className=\"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-text-muted\"\n />\n </div>\n </div>\n\n {/* Stats row */}\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4 mb-6\">\n {[\n { label: \"Total Orders\", value: stats.total },\n {\n label: \"Pending\",\n value: stats.pending,\n color: \"text-status-warning-text\",\n },\n {\n label: \"Completed\",\n value: stats.completed,\n color: \"text-status-success-text\",\n },\n {\n label: \"Refunded\",\n value: stats.refunded,\n color: \"text-status-error-text\",\n },\n ].map((s) => (\n <div\n key={s.label}\n className=\"rounded-lg border border-border-seam bg-bg-surface px-4 py-3\"\n >\n <p className={`text-xs ${s.color ?? \"text-text-secondary\"}`}>\n {s.label}\n </p>\n <p className=\"mt-1 text-xl font-semibold tabular-nums\">\n {ordersLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-text-secondary\" />\n ) : (\n s.value\n )}\n </p>\n </div>\n ))}\n </div>\n\n {/* Error */}\n {error && (\n <div className=\"mb-4 flex items-center gap-3 rounded-lg border border-status-error-border/50 bg-status-error-bg/10 px-4 py-3 text-sm\">\n <AlertCircle\n size={16}\n className=\"shrink-0 text-status-error-text\"\n />\n <span className=\"text-status-error-text\">{error}</span>\n <button\n onClick={() => setRetryToken((n) => n + 1)}\n className=\"ml-auto text-xs font-medium text-status-error-text underline\"\n >\n Retry\n </button>\n </div>\n )}\n\n {/* Orders table */}\n {ordersLoading ? (\n <div className=\"flex items-center justify-center py-16\">\n <Loader2 className=\"h-6 w-6 animate-spin text-text-secondary\" />\n </div>\n ) : physicalOrders.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Package size={32} />}\n title={\n statusFilter\n ? tr(\n \"devportal.noOrdersForFilter\",\n \"No orders match this filter\",\n )\n : tr(\"devportal.noOrdersYet\", \"No orders yet\")\n }\n description={\n statusFilter\n ? tr(\n \"devportal.tryDifferentFilter\",\n \"Try selecting a different status filter\",\n )\n : tr(\n \"devportal.ordersWillAppear\",\n \"Orders placed for your physical items will appear here once customers make purchases.\",\n )\n }\n />\n ) : (\n <>\n <div className=\"overflow-x-auto rounded-lg border border-border-seam\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-seam bg-bg-sunken\">\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Order\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Product ID\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Buyer\n </th>\n <th className=\"px-4 py-3 text-right font-medium text-text-secondary\">\n Gross\n </th>\n <th className=\"px-4 py-3 text-right font-medium text-text-secondary\">\n Your Earnings\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Date\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Fulfillment Issue\n </th>\n </tr>\n </thead>\n <tbody>\n {physicalOrders.map((order) => {\n const badge =\n STATUS_STYLES[order.status] ?? STATUS_STYLES.PENDING;\n const flags = order.storeOrderId\n ? (issueFlagsByOrderId[order.storeOrderId] ?? [])\n : [];\n const openFlag = flags.find((f) => f.status === \"OPEN\");\n return (\n <tr\n key={order.id}\n className=\"border-b border-border-subtle last:border-0 hover:bg-bg-sunken/50 transition-colors\"\n >\n <td className=\"px-4 py-3\">\n <span className=\"font-mono text-xs font-semibold text-text-primary\">\n {shortOrderId(order.storeOrderId, order.id)}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"font-mono text-xs text-text-secondary\">\n {order.storeProductId\n ? `…${order.storeProductId.slice(-8)}`\n : \"—\"}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"font-mono text-xs text-text-secondary\">\n {`…${order.buyerUserId.slice(-8)}`}\n </span>\n </td>\n <td className=\"px-4 py-3 text-right tabular-nums text-text-primary\">\n {formatCurrency(order.grossAmount, order.currency)}\n </td>\n <td className=\"px-4 py-3 text-right tabular-nums text-status-success-text\">\n {formatCurrency(order.netAmount, order.currency)}\n </td>\n <td className=\"px-4 py-3\">\n <span\n className={`rounded-full px-2.5 py-0.5 text-xs font-medium ${badge.className}`}\n >\n {badge.label}\n </span>\n {order.refundAmount != null &&\n order.refundAmount > 0 && (\n <p className=\"mt-0.5 text-[11px] text-status-error-text\">\n Refunded{\" \"}\n {formatCurrency(\n order.refundAmount,\n order.currency,\n )}\n </p>\n )}\n </td>\n <td className=\"px-4 py-3 text-xs text-text-secondary whitespace-nowrap\">\n {formatDate(order.purchasedAt)}\n </td>\n <td className=\"px-4 py-3\">\n {!order.storeOrderId ? (\n <span className=\"text-xs text-text-muted\">—</span>\n ) : openFlag ? (\n <div className=\"flex items-center gap-2\">\n <span\n title={openFlag.note ?? undefined}\n className=\"flex items-center gap-1 rounded-full bg-status-warning-bg-subtle px-2.5 py-0.5 text-xs font-medium text-status-warning-text\"\n >\n <Flag size={11} />\n {ISSUE_CATEGORY_LABELS[openFlag.category]}\n </span>\n {openFlag.raisedByOrgId === selectedOrgId && (\n <button\n onClick={() =>\n void handleResolveFlag(\n openFlag.id,\n openFlag.raisedByOrgId,\n )\n }\n disabled={resolvingFlagId === openFlag.id}\n className=\"text-xs font-medium text-text-secondary underline hover:text-text-primary disabled:opacity-50\"\n >\n {resolvingFlagId === openFlag.id ? (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Mark Resolved\"\n )}\n </button>\n )}\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n {flags.length > 0 && (\n <span\n title=\"Previously reported and resolved\"\n className=\"flex items-center gap-1 text-xs text-status-success-text\"\n >\n <CheckCircle2 size={11} />\n Resolved\n </span>\n )}\n <button\n onClick={() =>\n setReportModalOrderId(order.storeOrderId)\n }\n className=\"text-xs font-medium text-text-secondary underline hover:text-text-primary\"\n >\n Report Issue\n </button>\n </div>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {totalCount > PAGE_SIZE && (\n <div className=\"mt-4 flex items-center justify-between text-sm\">\n <span className=\"text-text-secondary\">\n Showing {page * PAGE_SIZE + 1}–\n {Math.min((page + 1) * PAGE_SIZE, totalCount)} of {totalCount}\n </span>\n <div className=\"flex items-center gap-2\">\n <button\n disabled={page === 0}\n onClick={() => setPage((p) => p - 1)}\n className=\"rounded-md border border-border-seam px-3 py-1.5 text-xs font-medium text-text-secondary hover:bg-bg-sunken disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n >\n Previous\n </button>\n <button\n disabled={(page + 1) * PAGE_SIZE >= totalCount}\n onClick={() => setPage((p) => p + 1)}\n className=\"rounded-md border border-border-seam px-3 py-1.5 text-xs font-medium text-text-secondary hover:bg-bg-sunken disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n >\n Next\n </button>\n </div>\n </div>\n )}\n </>\n )}\n </PageLayout>\n\n {selectedOrgId && (\n <ReportOrderIssueModal\n open={reportModalOrderId !== null}\n onOpenChange={(open) => {\n if (!open) setReportModalOrderId(null);\n }}\n orderId={reportModalOrderId ?? \"\"}\n organizationId={selectedOrgId}\n gqlUrl={gqlUrl}\n headers={headers}\n onReported={() => void fetchIssueFlags()}\n />\n )}\n </PermissionGuard>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SellerOrdersPage.js","names":[],"sources":["../../../src/devportal/pages/SellerOrdersPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useEffect, useState, useMemo, useCallback } from \"react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport {\n ShoppingBag,\n Loader2,\n AlertCircle,\n Package,\n ChevronDown,\n Flag,\n CheckCircle2,\n} from \"lucide-react\";\nimport { PageLayout } from \"../components/PageLayout\";\nimport { EmptyState } from \"../components/EmptyState\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { PermissionGuard, ReportOrderIssueModal } from \"../components\";\nimport type { OrderIssueCategory } from \"../components/ReportOrderIssueModal\";\nimport { formatCurrency } from \"../utils/currency\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype SaleStatus =\n | \"PENDING\"\n | \"COMPLETED\"\n | \"REFUNDED\"\n | \"PARTIAL_REFUND\"\n | \"DISPUTED\"\n | \"CHARGEBACK\"\n | \"CANCELLED\";\n\ninterface OrgSummary {\n id: string;\n name: string;\n slug: string;\n kind: \"DIGITAL\" | \"PHYSICAL\";\n}\n\ninterface SellerOrder {\n id: string;\n storeOrderId: string | null;\n storeProductId: string | null;\n grossAmount: number;\n netAmount: number;\n platformFee: number;\n currency: string;\n status: SaleStatus;\n buyerUserId: string;\n purchasedAt: string;\n refundAmount: number | null;\n refundedAt: string | null;\n refundReason: string | null;\n discountAmount: number | null;\n taxAmount: number | null;\n}\n\ninterface IssueFlag {\n id: string;\n category: OrderIssueCategory;\n note: string | null;\n status: \"OPEN\" | \"RESOLVED\";\n raisedByOrgId: string;\n createdAt: string;\n}\n\nconst ISSUE_CATEGORY_LABELS: Record<OrderIssueCategory, string> = {\n OUT_OF_STOCK: \"Out of stock\",\n CANNOT_FULFILL: \"Cannot fulfill\",\n WRONG_ADDRESS: \"Wrong address\",\n OTHER: \"Other\",\n};\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst STATUS_STYLES: Record<SaleStatus, { label: string; className: string }> =\n {\n PENDING: {\n label: \"Pending\",\n className: \"text-status-warning-text bg-status-warning-bg-subtle\",\n },\n COMPLETED: {\n label: \"Completed\",\n className: \"text-status-success-text bg-status-success-bg-subtle\",\n },\n REFUNDED: {\n label: \"Refunded\",\n className: \"text-status-error-text bg-status-error-bg/10\",\n },\n PARTIAL_REFUND: {\n label: \"Partial Refund\",\n className: \"text-status-warning-text bg-status-warning-bg-subtle\",\n },\n DISPUTED: {\n label: \"Disputed\",\n className: \"text-status-error-text bg-status-error-bg/10\",\n },\n CHARGEBACK: {\n label: \"Chargeback\",\n className: \"text-status-error-text bg-status-error-bg/10\",\n },\n CANCELLED: {\n label: \"Cancelled\",\n className: \"text-text-muted bg-bg-muted\",\n },\n };\n\nconst STATUS_FILTER_OPTIONS: { value: SaleStatus | \"\"; label: string }[] = [\n { value: \"\", label: \"All Orders\" },\n { value: \"PENDING\", label: \"Pending\" },\n { value: \"COMPLETED\", label: \"Completed\" },\n { value: \"REFUNDED\", label: \"Refunded\" },\n { value: \"PARTIAL_REFUND\", label: \"Partial Refund\" },\n { value: \"DISPUTED\", label: \"Disputed\" },\n { value: \"CANCELLED\", label: \"Cancelled\" },\n];\n\n// ---------------------------------------------------------------------------\n// GraphQL\n// ---------------------------------------------------------------------------\n\nconst ORGS_QUERY = `\n query SellerOrdersOrgs {\n myDeveloperOrganizations {\n id\n name\n slug\n kind\n }\n }\n`;\n\nconst ORDERS_QUERY = `\n query SellerOrders($organizationId: ID!, $status: SaleStatus, $limit: Int, $offset: Int) {\n developerOrgSales(\n organizationId: $organizationId\n status: $status\n limit: $limit\n offset: $offset\n ) {\n totalCount\n edges {\n node {\n id\n storeOrderId\n storeProductId\n grossAmount\n netAmount\n platformFee\n currency\n status\n buyerUserId\n purchasedAt\n refundAmount\n refundedAt\n refundReason\n discountAmount\n taxAmount\n }\n }\n pageInfo { hasNextPage hasPreviousPage }\n }\n }\n`;\n\nconst RESOLVE_ORDER_ISSUE_MUTATION = `\n mutation ResolveOrderIssue($id: ID!, $organizationId: ID) {\n resolveOrderIssueFlag(id: $id, organizationId: $organizationId) {\n id\n status\n }\n }\n`;\n\nconst ISSUE_FLAG_FIELDS = `id category note status raisedByOrgId createdAt`;\n\n/**\n * One `orderIssueFlags` call per visible physical order, batched into a\n * single request via GraphQL field aliasing — avoids N network round-trips\n * for a page of up to 25 orders.\n */\nfunction buildIssueFlagsBatchQuery(orderIds: string[]): string {\n const fields = orderIds\n .map(\n (id, i) =>\n `f${i}: orderIssueFlags(orderId: ${JSON.stringify(id)}) { ${ISSUE_FLAG_FIELDS} }`,\n )\n .join(\"\\n \");\n return `query SellerOrderIssueFlags {\\n ${fields}\\n }`;\n}\n\nfunction formatDate(iso: string): string {\n return new Date(iso).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction shortOrderId(id: string | null, fallback: string): string {\n if (id) return `#${id.slice(0, 8).toUpperCase()}`;\n return `#${fallback.slice(0, 8).toUpperCase()}`;\n}\n\n// ---------------------------------------------------------------------------\n// Page\n// ---------------------------------------------------------------------------\n\nexport const SellerOrdersPage: FC = () => {\n const { apiGatewayUrl, authToken } = useDevportal();\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const gqlUrl = apiGatewayUrl ?? \"/global/graphql\";\n\n const [orgsLoading, setOrgsLoading] = useState(true);\n const [orgs, setOrgs] = useState<OrgSummary[]>([]);\n const [selectedOrgId, setSelectedOrgId] = useState<string | null>(null);\n\n const [ordersLoading, setOrdersLoading] = useState(false);\n const [orders, setOrders] = useState<SellerOrder[]>([]);\n const [totalCount, setTotalCount] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [retryToken, setRetryToken] = useState(0);\n\n const [statusFilter, setStatusFilter] = useState<SaleStatus | \"\">(\"\");\n const [page, setPage] = useState(0);\n const PAGE_SIZE = 25;\n\n const headers = useMemo(\n () => ({\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${authToken ?? \"\"}`,\n }),\n [authToken],\n );\n\n // Fetch orgs on mount\n useEffect(() => {\n let cancelled = false;\n setOrgsLoading(true);\n\n const run = async () => {\n try {\n const res = await fetch(gqlUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ query: ORGS_QUERY }),\n });\n const json = (await res.json()) as {\n data?: { myDeveloperOrganizations?: OrgSummary[] };\n };\n if (cancelled) return;\n // Seller portal only ever shows PHYSICAL-kind orgs — see\n // DeveloperOrgKind (BOFF-7285).\n const fetched = (json.data?.myDeveloperOrganizations ?? []).filter(\n (org) => org.kind === \"PHYSICAL\",\n );\n setOrgs(fetched);\n if (fetched.length > 0) setSelectedOrgId(fetched[0]!.id);\n } catch {\n // leave orgs empty\n } finally {\n if (!cancelled) setOrgsLoading(false);\n }\n };\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [gqlUrl, headers]);\n\n // Fetch orders when org/filter/page changes\n useEffect(() => {\n if (!selectedOrgId) return;\n let cancelled = false;\n setOrdersLoading(true);\n setError(null);\n\n const run = async () => {\n try {\n const variables: Record<string, unknown> = {\n organizationId: selectedOrgId,\n limit: PAGE_SIZE,\n offset: page * PAGE_SIZE,\n };\n if (statusFilter) variables.status = statusFilter;\n\n const res = await fetch(gqlUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ query: ORDERS_QUERY, variables }),\n });\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const json = (await res.json()) as {\n data?: {\n developerOrgSales?: {\n totalCount: number;\n edges: {\n node: Omit<SellerOrder, \"status\"> & { status: string };\n }[];\n };\n };\n errors?: { message: string }[];\n };\n if (cancelled) return;\n if (json.errors?.length) {\n throw new Error(json.errors[0]?.message ?? \"GraphQL error\");\n }\n const conn = json.data?.developerOrgSales;\n setTotalCount(conn?.totalCount ?? 0);\n // Show all orders; physical-product ones have storeProductId set\n setOrders(\n (conn?.edges ?? []).map((e) => ({\n ...e.node,\n status: e.node.status as SaleStatus,\n })),\n );\n } catch (err) {\n if (!cancelled)\n setError(\n err instanceof Error ? err.message : \"Failed to load orders\",\n );\n } finally {\n if (!cancelled) setOrdersLoading(false);\n }\n };\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [selectedOrgId, statusFilter, page, gqlUrl, headers, retryToken]);\n\n // Physical product orders (storeProductId set) vs digital\n const physicalOrders = useMemo(\n () => orders.filter((o) => o.storeProductId !== null),\n [orders],\n );\n\n // Seller-reported issue flags for the currently visible physical orders,\n // keyed by storeOrderId. Fetched as one batched (aliased) request.\n const [issueFlagsByOrderId, setIssueFlagsByOrderId] = useState<\n Record<string, IssueFlag[]>\n >({});\n const [reportModalOrderId, setReportModalOrderId] = useState<string | null>(\n null,\n );\n const [resolvingFlagId, setResolvingFlagId] = useState<string | null>(null);\n\n const visibleStoreOrderIds = useMemo(\n () =>\n physicalOrders\n .map((o) => o.storeOrderId)\n .filter((id): id is string => id !== null),\n [physicalOrders],\n );\n\n const fetchIssueFlags = useCallback(async () => {\n if (visibleStoreOrderIds.length === 0) {\n setIssueFlagsByOrderId({});\n return;\n }\n try {\n const res = await fetch(gqlUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n query: buildIssueFlagsBatchQuery(visibleStoreOrderIds),\n }),\n });\n const json = (await res.json()) as {\n data?: Record<string, IssueFlag[]>;\n };\n const next: Record<string, IssueFlag[]> = {};\n visibleStoreOrderIds.forEach((id, i) => {\n next[id] = json.data?.[`f${i}`] ?? [];\n });\n setIssueFlagsByOrderId(next);\n } catch {\n // Non-critical — the orders table itself still renders fine without flags\n }\n }, [gqlUrl, headers, visibleStoreOrderIds]);\n\n useEffect(() => {\n void fetchIssueFlags();\n }, [fetchIssueFlags]);\n\n const handleResolveFlag = async (flagId: string, organizationId: string) => {\n setResolvingFlagId(flagId);\n try {\n await fetch(gqlUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n query: RESOLVE_ORDER_ISSUE_MUTATION,\n variables: { id: flagId, organizationId },\n }),\n });\n await fetchIssueFlags();\n } finally {\n setResolvingFlagId(null);\n }\n };\n\n const stats = useMemo(() => {\n const all = physicalOrders;\n return {\n total: totalCount,\n pending: all.filter((o) => o.status === \"PENDING\").length,\n completed: all.filter((o) => o.status === \"COMPLETED\").length,\n refunded: all.filter(\n (o) => o.status === \"REFUNDED\" || o.status === \"PARTIAL_REFUND\",\n ).length,\n };\n }, [physicalOrders, totalCount]);\n\n if (orgsLoading) {\n return (\n <PageLayout title={tr(\"devportal.orders\", \"Orders\")}>\n <div className=\"flex items-center justify-center py-20\">\n <Loader2 className=\"h-8 w-8 animate-spin text-text-secondary\" />\n </div>\n </PageLayout>\n );\n }\n\n if (orgs.length === 0) {\n return (\n <PageLayout\n title={tr(\"devportal.orders\", \"Orders\")}\n description={tr(\n \"devportal.ordersDesc\",\n \"Orders placed by customers for your physical items.\",\n )}\n >\n <EmptyState\n illustration=\"empty-generic\"\n icon={<ShoppingBag size={32} />}\n title={tr(\"devportal.noOrgForOrders\", \"No organization yet\")}\n description={tr(\n \"devportal.createOrgToSell\",\n \"Create a developer organization to start selling physical products and receive orders.\",\n )}\n />\n </PageLayout>\n );\n }\n\n return (\n <PermissionGuard authOnly>\n <PageLayout\n title={tr(\"devportal.orders\", \"Orders\")}\n description={tr(\n \"devportal.ordersDesc\",\n \"Orders placed by customers for your physical items.\",\n )}\n >\n {/* Controls row */}\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-6\">\n {/* Org picker (shown only when multiple orgs) */}\n {orgs.length > 1 && (\n <div className=\"relative\">\n <select\n value={selectedOrgId ?? \"\"}\n onChange={(e) => {\n setSelectedOrgId(e.target.value);\n setPage(0);\n }}\n className=\"appearance-none rounded-md border border-border-seam bg-bg-surface pl-3 pr-8 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-primary\"\n >\n {orgs.map((org) => (\n <option key={org.id} value={org.id}>\n {org.name}\n </option>\n ))}\n </select>\n <ChevronDown\n size={14}\n className=\"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-text-muted\"\n />\n </div>\n )}\n\n {/* Status filter */}\n <div className=\"relative\">\n <select\n value={statusFilter}\n onChange={(e) => {\n setStatusFilter(e.target.value as SaleStatus | \"\");\n setPage(0);\n }}\n className=\"appearance-none rounded-md border border-border-seam bg-bg-surface pl-3 pr-8 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-primary\"\n >\n {STATUS_FILTER_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n <ChevronDown\n size={14}\n className=\"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-text-muted\"\n />\n </div>\n </div>\n\n {/* Stats row */}\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4 mb-6\">\n {[\n { label: \"Total Orders\", value: stats.total },\n {\n label: \"Pending\",\n value: stats.pending,\n color: \"text-status-warning-text\",\n },\n {\n label: \"Completed\",\n value: stats.completed,\n color: \"text-status-success-text\",\n },\n {\n label: \"Refunded\",\n value: stats.refunded,\n color: \"text-status-error-text\",\n },\n ].map((s) => (\n <div\n key={s.label}\n className=\"rounded-lg border border-border-seam bg-bg-surface px-4 py-3\"\n >\n <p className={`text-xs ${s.color ?? \"text-text-secondary\"}`}>\n {s.label}\n </p>\n <p className=\"mt-1 text-xl font-semibold tabular-nums\">\n {ordersLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-text-secondary\" />\n ) : (\n s.value\n )}\n </p>\n </div>\n ))}\n </div>\n\n {/* Error */}\n {error && (\n <div className=\"mb-4 flex items-center gap-3 rounded-lg border border-status-error-border/50 bg-status-error-bg/10 px-4 py-3 text-sm\">\n <AlertCircle\n size={16}\n className=\"shrink-0 text-status-error-text\"\n />\n <span className=\"text-status-error-text\">{error}</span>\n <button\n onClick={() => setRetryToken((n) => n + 1)}\n className=\"ml-auto text-xs font-medium text-status-error-text underline\"\n >\n Retry\n </button>\n </div>\n )}\n\n {/* Orders table */}\n {ordersLoading ? (\n <div className=\"flex items-center justify-center py-16\">\n <Loader2 className=\"h-6 w-6 animate-spin text-text-secondary\" />\n </div>\n ) : physicalOrders.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Package size={32} />}\n title={\n statusFilter\n ? tr(\n \"devportal.noOrdersForFilter\",\n \"No orders match this filter\",\n )\n : tr(\"devportal.noOrdersYet\", \"No orders yet\")\n }\n description={\n statusFilter\n ? tr(\n \"devportal.tryDifferentFilter\",\n \"Try selecting a different status filter\",\n )\n : tr(\n \"devportal.ordersWillAppear\",\n \"Orders placed for your physical items will appear here once customers make purchases.\",\n )\n }\n />\n ) : (\n <>\n <div className=\"overflow-x-auto rounded-lg border border-border-seam\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-seam bg-bg-sunken\">\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Order\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Product ID\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Buyer\n </th>\n <th className=\"px-4 py-3 text-right font-medium text-text-secondary\">\n Gross\n </th>\n <th className=\"px-4 py-3 text-right font-medium text-text-secondary\">\n Your Earnings\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Date\n </th>\n <th className=\"px-4 py-3 text-left font-medium text-text-secondary\">\n Fulfillment Issue\n </th>\n </tr>\n </thead>\n <tbody>\n {physicalOrders.map((order) => {\n const badge =\n STATUS_STYLES[order.status] ?? STATUS_STYLES.PENDING;\n const flags = order.storeOrderId\n ? (issueFlagsByOrderId[order.storeOrderId] ?? [])\n : [];\n const openFlag = flags.find((f) => f.status === \"OPEN\");\n return (\n <tr\n key={order.id}\n className=\"border-b border-border-subtle last:border-0 hover:bg-bg-sunken/50 transition-colors\"\n >\n <td className=\"px-4 py-3\">\n <span className=\"font-mono text-xs font-semibold text-text-primary\">\n {shortOrderId(order.storeOrderId, order.id)}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"font-mono text-xs text-text-secondary\">\n {order.storeProductId\n ? `…${order.storeProductId.slice(-8)}`\n : \"—\"}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"font-mono text-xs text-text-secondary\">\n {`…${order.buyerUserId.slice(-8)}`}\n </span>\n </td>\n <td className=\"px-4 py-3 text-right tabular-nums text-text-primary\">\n {formatCurrency(order.grossAmount, order.currency)}\n </td>\n <td className=\"px-4 py-3 text-right tabular-nums text-status-success-text\">\n {formatCurrency(order.netAmount, order.currency)}\n </td>\n <td className=\"px-4 py-3\">\n <span\n className={`rounded-full px-2.5 py-0.5 text-xs font-medium ${badge.className}`}\n >\n {badge.label}\n </span>\n {order.refundAmount != null &&\n order.refundAmount > 0 && (\n <p className=\"mt-0.5 text-[11px] text-status-error-text\">\n Refunded{\" \"}\n {formatCurrency(\n order.refundAmount,\n order.currency,\n )}\n </p>\n )}\n </td>\n <td className=\"px-4 py-3 text-xs text-text-secondary whitespace-nowrap\">\n {formatDate(order.purchasedAt)}\n </td>\n <td className=\"px-4 py-3\">\n {!order.storeOrderId ? (\n <span className=\"text-xs text-text-muted\">—</span>\n ) : openFlag ? (\n <div className=\"flex items-center gap-2\">\n <span\n title={openFlag.note ?? undefined}\n className=\"flex items-center gap-1 rounded-full bg-status-warning-bg-subtle px-2.5 py-0.5 text-xs font-medium text-status-warning-text\"\n >\n <Flag size={11} />\n {ISSUE_CATEGORY_LABELS[openFlag.category]}\n </span>\n {openFlag.raisedByOrgId === selectedOrgId && (\n <button\n onClick={() =>\n void handleResolveFlag(\n openFlag.id,\n openFlag.raisedByOrgId,\n )\n }\n disabled={resolvingFlagId === openFlag.id}\n className=\"text-xs font-medium text-text-secondary underline hover:text-text-primary disabled:opacity-50\"\n >\n {resolvingFlagId === openFlag.id ? (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Mark Resolved\"\n )}\n </button>\n )}\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n {flags.length > 0 && (\n <span\n title=\"Previously reported and resolved\"\n className=\"flex items-center gap-1 text-xs text-status-success-text\"\n >\n <CheckCircle2 size={11} />\n Resolved\n </span>\n )}\n <button\n onClick={() =>\n setReportModalOrderId(order.storeOrderId)\n }\n className=\"text-xs font-medium text-text-secondary underline hover:text-text-primary\"\n >\n Report Issue\n </button>\n </div>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {totalCount > PAGE_SIZE && (\n <div className=\"mt-4 flex items-center justify-between text-sm\">\n <span className=\"text-text-secondary\">\n Showing {page * PAGE_SIZE + 1}–\n {Math.min((page + 1) * PAGE_SIZE, totalCount)} of {totalCount}\n </span>\n <div className=\"flex items-center gap-2\">\n <button\n disabled={page === 0}\n onClick={() => setPage((p) => p - 1)}\n className=\"rounded-md border border-border-seam px-3 py-1.5 text-xs font-medium text-text-secondary hover:bg-bg-sunken disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n >\n Previous\n </button>\n <button\n disabled={(page + 1) * PAGE_SIZE >= totalCount}\n onClick={() => setPage((p) => p + 1)}\n className=\"rounded-md border border-border-seam px-3 py-1.5 text-xs font-medium text-text-secondary hover:bg-bg-sunken disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n >\n Next\n </button>\n </div>\n </div>\n )}\n </>\n )}\n </PageLayout>\n\n {selectedOrgId && (\n <ReportOrderIssueModal\n open={reportModalOrderId !== null}\n onOpenChange={(open) => {\n if (!open) setReportModalOrderId(null);\n }}\n orderId={reportModalOrderId ?? \"\"}\n organizationId={selectedOrgId}\n gqlUrl={gqlUrl}\n headers={headers}\n onReported={() => void fetchIssueFlags()}\n />\n )}\n </PermissionGuard>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currency.d.ts","sourceRoot":"","sources":["../../../src/devportal/utils/currency.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMvE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/devportal/utils/currency.ts
|
|
2
|
+
function e(e, t) {
|
|
3
|
+
return new Intl.NumberFormat("en-US", {
|
|
4
|
+
style: "currency",
|
|
5
|
+
currency: t || "USD",
|
|
6
|
+
minimumFractionDigits: 2
|
|
7
|
+
}).format(e);
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { e as formatCurrency };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=currency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currency.js","names":[],"sources":["../../../src/devportal/utils/currency.ts"],"sourcesContent":["export function formatCurrency(amount: number, currency: string): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: currency || \"USD\",\n minimumFractionDigits: 2,\n }).format(amount);\n}\n"],"mappings":";AAAA,SAAgB,EAAe,GAAgB,GAA0B;AACvE,QAAO,IAAI,KAAK,aAAa,SAAS;EACpC,OAAO;EACP,UAAU,KAAY;EACtB,uBAAuB;EACxB,CAAC,CAAC,OAAO,EAAO"}
|
|
@@ -1964,7 +1964,7 @@ function $t(e) {
|
|
|
1964
1964
|
};
|
|
1965
1965
|
return t.useMutation(Qt, r);
|
|
1966
1966
|
}
|
|
1967
|
-
e`
|
|
1967
|
+
var en = e`
|
|
1968
1968
|
query GetRevenueSummary($organizationId: ID!, $period: String!) {
|
|
1969
1969
|
developerOrgRevenueSummary(organizationId: $organizationId, period: $period) {
|
|
1970
1970
|
period
|
|
@@ -1992,7 +1992,14 @@ e`
|
|
|
1992
1992
|
}
|
|
1993
1993
|
}
|
|
1994
1994
|
`;
|
|
1995
|
-
|
|
1995
|
+
function tn(e) {
|
|
1996
|
+
let r = {
|
|
1997
|
+
...n,
|
|
1998
|
+
...e
|
|
1999
|
+
};
|
|
2000
|
+
return t.useQuery(en, r);
|
|
2001
|
+
}
|
|
2002
|
+
var nn = e`
|
|
1996
2003
|
query GetRevenueDashboardData($organizationId: ID!, $period: String!, $startDate: DateTime, $endDate: DateTime, $salesLimit: Int, $salesOffset: Int, $payoutsLimit: Int, $payoutsOffset: Int) {
|
|
1997
2004
|
developerOrgRevenueSummary(organizationId: $organizationId, period: $period) {
|
|
1998
2005
|
period
|
|
@@ -2072,12 +2079,12 @@ var en = e`
|
|
|
2072
2079
|
${g}
|
|
2073
2080
|
${p}
|
|
2074
2081
|
${m}`;
|
|
2075
|
-
function
|
|
2082
|
+
function rn(e) {
|
|
2076
2083
|
let r = {
|
|
2077
2084
|
...n,
|
|
2078
2085
|
...e
|
|
2079
2086
|
};
|
|
2080
|
-
return t.useQuery(
|
|
2087
|
+
return t.useQuery(nn, r);
|
|
2081
2088
|
}
|
|
2082
2089
|
e`
|
|
2083
2090
|
query GetRevenueAnalytics($organizationId: ID!, $period: String!, $startDate: DateTime, $endDate: DateTime) {
|
|
@@ -2170,19 +2177,19 @@ e`
|
|
|
2170
2177
|
${m}
|
|
2171
2178
|
${h}
|
|
2172
2179
|
${p}`;
|
|
2173
|
-
var
|
|
2180
|
+
var an = e`
|
|
2174
2181
|
query GetPaymentMethods($organizationId: ID!) {
|
|
2175
2182
|
developerOrgPaymentMethods(organizationId: $organizationId) {
|
|
2176
2183
|
...PaymentMethodFields
|
|
2177
2184
|
}
|
|
2178
2185
|
}
|
|
2179
2186
|
${h}`;
|
|
2180
|
-
function
|
|
2187
|
+
function on(e) {
|
|
2181
2188
|
let r = {
|
|
2182
2189
|
...n,
|
|
2183
2190
|
...e
|
|
2184
2191
|
};
|
|
2185
|
-
return t.useQuery(
|
|
2192
|
+
return t.useQuery(an, r);
|
|
2186
2193
|
}
|
|
2187
2194
|
e`
|
|
2188
2195
|
query GetPaymentMethod($id: ID!) {
|
|
@@ -2191,19 +2198,19 @@ e`
|
|
|
2191
2198
|
}
|
|
2192
2199
|
}
|
|
2193
2200
|
${h}`;
|
|
2194
|
-
var
|
|
2201
|
+
var sn = e`
|
|
2195
2202
|
mutation AddPaymentMethod($organizationId: ID!, $input: AddPaymentMethodInput!) {
|
|
2196
2203
|
addDeveloperOrgPaymentMethod(organizationId: $organizationId, input: $input) {
|
|
2197
2204
|
...PaymentMethodFields
|
|
2198
2205
|
}
|
|
2199
2206
|
}
|
|
2200
2207
|
${h}`;
|
|
2201
|
-
function
|
|
2208
|
+
function cn(e) {
|
|
2202
2209
|
let r = {
|
|
2203
2210
|
...n,
|
|
2204
2211
|
...e
|
|
2205
2212
|
};
|
|
2206
|
-
return t.useMutation(
|
|
2213
|
+
return t.useMutation(sn, r);
|
|
2207
2214
|
}
|
|
2208
2215
|
e`
|
|
2209
2216
|
mutation UpdatePaymentMethod($id: ID!, $input: UpdatePaymentMethodInput!) {
|
|
@@ -2234,7 +2241,7 @@ e`
|
|
|
2234
2241
|
}
|
|
2235
2242
|
}
|
|
2236
2243
|
${h}`;
|
|
2237
|
-
var
|
|
2244
|
+
var $ = e`
|
|
2238
2245
|
mutation RequestPayout($organizationId: ID!, $paymentMethodId: ID!) {
|
|
2239
2246
|
requestPayout(
|
|
2240
2247
|
organizationId: $organizationId
|
|
@@ -2244,12 +2251,12 @@ var sn = e`
|
|
|
2244
2251
|
}
|
|
2245
2252
|
}
|
|
2246
2253
|
${m}`;
|
|
2247
|
-
function
|
|
2254
|
+
function ln(e) {
|
|
2248
2255
|
let r = {
|
|
2249
2256
|
...n,
|
|
2250
2257
|
...e
|
|
2251
2258
|
};
|
|
2252
|
-
return t.useMutation(
|
|
2259
|
+
return t.useMutation($, r);
|
|
2253
2260
|
}
|
|
2254
2261
|
e`
|
|
2255
2262
|
mutation CancelPayout($id: ID!, $reason: String) {
|
|
@@ -2264,7 +2271,7 @@ e`
|
|
|
2264
2271
|
}
|
|
2265
2272
|
}
|
|
2266
2273
|
${p}`;
|
|
2267
|
-
var
|
|
2274
|
+
var un = e`
|
|
2268
2275
|
query GetDeveloperPortalSettingsOverview {
|
|
2269
2276
|
myDeveloperProfile {
|
|
2270
2277
|
...DeveloperProfileFields
|
|
@@ -2295,14 +2302,14 @@ var $ = e`
|
|
|
2295
2302
|
}
|
|
2296
2303
|
}
|
|
2297
2304
|
${f}`;
|
|
2298
|
-
function
|
|
2305
|
+
function dn(e) {
|
|
2299
2306
|
let r = {
|
|
2300
2307
|
...n,
|
|
2301
2308
|
...e
|
|
2302
2309
|
};
|
|
2303
|
-
return t.useQuery(
|
|
2310
|
+
return t.useQuery(un, r);
|
|
2304
2311
|
}
|
|
2305
|
-
var
|
|
2312
|
+
var fn = e`
|
|
2306
2313
|
mutation ShareWorkflow($id: ID!) {
|
|
2307
2314
|
shareWorkflow(id: $id) {
|
|
2308
2315
|
id
|
|
@@ -2312,14 +2319,14 @@ var un = e`
|
|
|
2312
2319
|
}
|
|
2313
2320
|
}
|
|
2314
2321
|
`;
|
|
2315
|
-
function
|
|
2322
|
+
function pn(e) {
|
|
2316
2323
|
let r = {
|
|
2317
2324
|
...n,
|
|
2318
2325
|
...e
|
|
2319
2326
|
};
|
|
2320
|
-
return t.useMutation(
|
|
2327
|
+
return t.useMutation(fn, r);
|
|
2321
2328
|
}
|
|
2322
|
-
var
|
|
2329
|
+
var mn = e`
|
|
2323
2330
|
mutation UnshareWorkflow($id: ID!) {
|
|
2324
2331
|
unshareWorkflow(id: $id) {
|
|
2325
2332
|
id
|
|
@@ -2328,42 +2335,42 @@ var fn = e`
|
|
|
2328
2335
|
}
|
|
2329
2336
|
}
|
|
2330
2337
|
`;
|
|
2331
|
-
function
|
|
2338
|
+
function hn(e) {
|
|
2332
2339
|
let r = {
|
|
2333
2340
|
...n,
|
|
2334
2341
|
...e
|
|
2335
2342
|
};
|
|
2336
|
-
return t.useMutation(
|
|
2343
|
+
return t.useMutation(mn, r);
|
|
2337
2344
|
}
|
|
2338
|
-
var
|
|
2345
|
+
var gn = e`
|
|
2339
2346
|
query GetWebhooks($applicationId: ID!) {
|
|
2340
2347
|
webhooks(applicationId: $applicationId) {
|
|
2341
2348
|
...DevportalWebhookFields
|
|
2342
2349
|
}
|
|
2343
2350
|
}
|
|
2344
2351
|
${_}`;
|
|
2345
|
-
function
|
|
2352
|
+
function _n(e) {
|
|
2346
2353
|
let r = {
|
|
2347
2354
|
...n,
|
|
2348
2355
|
...e
|
|
2349
2356
|
};
|
|
2350
|
-
return t.useQuery(
|
|
2357
|
+
return t.useQuery(gn, r);
|
|
2351
2358
|
}
|
|
2352
|
-
var
|
|
2359
|
+
var vn = e`
|
|
2353
2360
|
query GetWebhook($id: ID!) {
|
|
2354
2361
|
webhook(id: $id) {
|
|
2355
2362
|
...DevportalWebhookFields
|
|
2356
2363
|
}
|
|
2357
2364
|
}
|
|
2358
2365
|
${_}`;
|
|
2359
|
-
function
|
|
2366
|
+
function yn(e) {
|
|
2360
2367
|
let r = {
|
|
2361
2368
|
...n,
|
|
2362
2369
|
...e
|
|
2363
2370
|
};
|
|
2364
|
-
return t.useQuery(
|
|
2371
|
+
return t.useQuery(vn, r);
|
|
2365
2372
|
}
|
|
2366
|
-
var
|
|
2373
|
+
var bn = e`
|
|
2367
2374
|
query GetWebhookDetail($id: ID!, $limit: Int, $offset: Int) {
|
|
2368
2375
|
webhook(id: $id) {
|
|
2369
2376
|
...DevportalWebhookFields
|
|
@@ -2383,12 +2390,12 @@ var vn = e`
|
|
|
2383
2390
|
}
|
|
2384
2391
|
${_}
|
|
2385
2392
|
${v}`;
|
|
2386
|
-
function
|
|
2393
|
+
function xn(e) {
|
|
2387
2394
|
let r = {
|
|
2388
2395
|
...n,
|
|
2389
2396
|
...e
|
|
2390
2397
|
};
|
|
2391
|
-
return t.useQuery(
|
|
2398
|
+
return t.useQuery(bn, r);
|
|
2392
2399
|
}
|
|
2393
2400
|
e`
|
|
2394
2401
|
query GetWebhookDeliveries($webhookId: ID!, $limit: Int, $offset: Int) {
|
|
@@ -2412,7 +2419,7 @@ e`
|
|
|
2412
2419
|
}
|
|
2413
2420
|
}
|
|
2414
2421
|
${v}`;
|
|
2415
|
-
var
|
|
2422
|
+
var Sn = e`
|
|
2416
2423
|
mutation CreateWebhook($applicationId: ID!, $input: CreateWebhookInput!) {
|
|
2417
2424
|
createWebhook(applicationId: $applicationId, input: $input) {
|
|
2418
2425
|
secret
|
|
@@ -2422,40 +2429,40 @@ var bn = e`
|
|
|
2422
2429
|
}
|
|
2423
2430
|
}
|
|
2424
2431
|
${_}`;
|
|
2425
|
-
function
|
|
2432
|
+
function Cn(e) {
|
|
2426
2433
|
let r = {
|
|
2427
2434
|
...n,
|
|
2428
2435
|
...e
|
|
2429
2436
|
};
|
|
2430
|
-
return t.useMutation(
|
|
2437
|
+
return t.useMutation(Sn, r);
|
|
2431
2438
|
}
|
|
2432
|
-
var
|
|
2439
|
+
var wn = e`
|
|
2433
2440
|
mutation UpdateWebhook($id: ID!, $input: UpdateWebhookInput!) {
|
|
2434
2441
|
updateWebhook(id: $id, input: $input) {
|
|
2435
2442
|
...DevportalWebhookFields
|
|
2436
2443
|
}
|
|
2437
2444
|
}
|
|
2438
2445
|
${_}`;
|
|
2439
|
-
function
|
|
2446
|
+
function Tn(e) {
|
|
2440
2447
|
let r = {
|
|
2441
2448
|
...n,
|
|
2442
2449
|
...e
|
|
2443
2450
|
};
|
|
2444
|
-
return t.useMutation(
|
|
2451
|
+
return t.useMutation(wn, r);
|
|
2445
2452
|
}
|
|
2446
|
-
var
|
|
2453
|
+
var En = e`
|
|
2447
2454
|
mutation DeleteWebhook($id: ID!) {
|
|
2448
2455
|
deleteWebhook(id: $id)
|
|
2449
2456
|
}
|
|
2450
2457
|
`;
|
|
2451
|
-
function
|
|
2458
|
+
function Dn(e) {
|
|
2452
2459
|
let r = {
|
|
2453
2460
|
...n,
|
|
2454
2461
|
...e
|
|
2455
2462
|
};
|
|
2456
|
-
return t.useMutation(
|
|
2463
|
+
return t.useMutation(En, r);
|
|
2457
2464
|
}
|
|
2458
|
-
var
|
|
2465
|
+
var On = e`
|
|
2459
2466
|
mutation TestWebhook($id: ID!, $eventType: String!) {
|
|
2460
2467
|
testWebhook(id: $id, eventType: $eventType) {
|
|
2461
2468
|
success
|
|
@@ -2465,14 +2472,14 @@ var En = e`
|
|
|
2465
2472
|
}
|
|
2466
2473
|
}
|
|
2467
2474
|
`;
|
|
2468
|
-
function
|
|
2475
|
+
function kn(e) {
|
|
2469
2476
|
let r = {
|
|
2470
2477
|
...n,
|
|
2471
2478
|
...e
|
|
2472
2479
|
};
|
|
2473
|
-
return t.useMutation(
|
|
2480
|
+
return t.useMutation(On, r);
|
|
2474
2481
|
}
|
|
2475
2482
|
//#endregion
|
|
2476
|
-
export { bt as AcceptInvitationDocument,
|
|
2483
|
+
export { bt as AcceptInvitationDocument, sn as AddPaymentMethodDocument, a as AppInstallationFieldsFragmentDoc, r as ApplicationFieldsFragmentDoc, ee as ApplicationScopeFieldsFragmentDoc, i as ApplicationVersionFieldsFragmentDoc, j as ApproveApplicationDocument, L as ApproveApplicationVersionDocument, te as AuditLogFieldsFragmentDoc, o as AuthAppFieldsFragmentDoc, d as BillingAccountFieldsFragmentDoc, wt as CancelInvitationDocument, H as CompleteAppOAuthDocument, w as CreateApplicationDocument, N as CreateApplicationVersionDocument, Z as CreateAuthAppDocument, Wt as CreateBillingAccountDocument, ut as CreateOrganizationDocument, ft as CreateSellerOrganizationDocument, Sn as CreateWebhookDocument, Y as CurrentUserAppsDocument, We as CurrentUserDelegationsDocument, Ke as CurrentUserGrantedDelegationsDocument, Re as DeactivateAppDocument, D as DeactivateApplicationDocument, s as DelegationFieldsFragmentDoc, E as DeleteApplicationDocument, gt as DeleteOrganizationDocument, En as DeleteWebhookDocument, I as DeprecateApplicationVersionDocument, f as DeveloperProfileFieldsFragmentDoc, _ as DevportalWebhookFieldsFragmentDoc, K as GenerateApiKeyDocument, ne as GetAnalyticsDashboardOptionsDocument, y as GetApplicationAnalyticsDashboardDocument, C as GetApplicationAnalyticsDocument, Xt as GetApplicationAuditLogsDocument, x as GetApplicationDocument, U as GetApplicationForReviewDocument, S as GetApplicationVersionsDocument, b as GetApplicationsDocument, W as GetApplicationsWithPendingVersionsDocument, X as GetAuthAppDocument, Kt as GetBillingAccountsByOrgDocument, un as GetDeveloperPortalSettingsOverviewDocument, He as GetDevportalDashboardBootstrapDocument, ct as GetInvitationByTokenDocument, Jt as GetMyDeveloperProfileDocument, Qe as GetMyOrganizationsDocument, nt as GetOrganizationDocument, ot as GetOrganizationInvitationsDocument, it as GetOrganizationMembersDocument, et as GetOrganizationsDocument, an as GetPaymentMethodsDocument, nn as GetRevenueDashboardDataDocument, en as GetRevenueSummaryDocument, bn as GetWebhookDetailDocument, vn as GetWebhookDocument, gn as GetWebhooksDocument, V as GetWorkspaceInstallationDocument, Je as GrantDelegationDocument, z as InstallApplicationDocument, vt as InviteMemberDocument, Ht as LinkDevOrgBillingAccountDocument, G as MyApiKeysDocument, u as OrgInvitationFieldsFragmentDoc, l as OrgMemberFieldsFragmentDoc, c as OrganizationFieldsFragmentDoc, h as PaymentMethodFieldsFragmentDoc, m as PayoutFieldsFragmentDoc, F as PublishApplicationVersionDocument, Rt as ReactivateMemberDocument, M as RejectApplicationDocument, R as RejectApplicationVersionDocument, St as RejectInvitationDocument, Pt as RemoveMemberDocument, $ as RequestPayoutDocument, Et as ResendInvitationDocument, g as RevenueAnalyticsFieldsFragmentDoc, q as RevokeApiKeyAuthDocument, Xe as RevokeDelegationDocument, J as RotateApiKeyAuthDocument, Be as RotateAppSecretDocument, O as RotateApplicationSigningSecretDocument, p as SaleFieldsFragmentDoc, fn as ShareWorkflowDocument, k as SubmitApplicationDocument, A as SubmitApplicationForReviewDocument, It as SuspendMemberDocument, On as TestWebhookDocument, Bt as TransferOwnershipDocument, B as UninstallApplicationDocument, mn as UnshareWorkflowDocument, T as UpdateApplicationDocument, P as UpdateApplicationVersionDocument, Q as UpdateAuthAppDocument, Qt as UpdateDeveloperProfileDocument, Mt as UpdateMemberRoleDocument, At as UpdateOrgLegalInfoDocument, Ot as UpdateOrgTaxInfoDocument, mt as UpdateOrganizationDocument, wn as UpdateWebhookDocument, v as WebhookDeliveryFieldsFragmentDoc, xt as useAcceptInvitationMutation, cn as useAddPaymentMethodMutation, ge as useApproveApplicationMutation, Se as useApproveApplicationVersionMutation, Tt as useCancelInvitationMutation, De as useCompleteAppOAuthMutation, le as useCreateApplicationMutation, ve as useCreateApplicationVersionMutation, Ie as useCreateAuthAppMutation, Gt as useCreateBillingAccountMutation, dt as useCreateOrganizationMutation, pt as useCreateSellerOrganizationMutation, Cn as useCreateWebhookMutation, Pe as useCurrentUserAppsQuery, Ge as useCurrentUserDelegationsQuery, qe as useCurrentUserGrantedDelegationsQuery, ze as useDeactivateAppMutation, fe as useDeactivateApplicationMutation, de as useDeleteApplicationMutation, _t as useDeleteOrganizationMutation, Dn as useDeleteWebhookMutation, xe as useDeprecateApplicationVersionMutation, je as useGenerateApiKeyMutation, re as useGetAnalyticsDashboardOptionsQuery, ie as useGetApplicationAnalyticsDashboardQuery, ce as useGetApplicationAnalyticsQuery, Zt as useGetApplicationAuditLogsQuery, Oe as useGetApplicationForReviewQuery, oe as useGetApplicationQuery, se as useGetApplicationVersionsQuery, ae as useGetApplicationsQuery, ke as useGetApplicationsWithPendingVersionsQuery, Fe as useGetAuthAppQuery, qt as useGetBillingAccountsByOrgQuery, dn as useGetDeveloperPortalSettingsOverviewQuery, Ue as useGetDevportalDashboardBootstrapQuery, lt as useGetInvitationByTokenQuery, Yt as useGetMyDeveloperProfileQuery, $e as useGetMyOrganizationsQuery, st as useGetOrganizationInvitationsQuery, at as useGetOrganizationMembersQuery, rt as useGetOrganizationQuery, tt as useGetOrganizationsQuery, on as useGetPaymentMethodsQuery, rn as useGetRevenueDashboardDataQuery, tn as useGetRevenueSummaryQuery, xn as useGetWebhookDetailQuery, yn as useGetWebhookQuery, _n as useGetWebhooksQuery, Ee as useGetWorkspaceInstallationQuery, Ye as useGrantDelegationMutation, we as useInstallApplicationMutation, yt as useInviteMemberMutation, Ut as useLinkDevOrgBillingAccountMutation, Ae as useMyApiKeysQuery, be as usePublishApplicationVersionMutation, zt as useReactivateMemberMutation, _e as useRejectApplicationMutation, Ce as useRejectApplicationVersionMutation, Ct as useRejectInvitationMutation, Ft as useRemoveMemberMutation, ln as useRequestPayoutMutation, Dt as useResendInvitationMutation, Me as useRevokeApiKeyAuthMutation, Ze as useRevokeDelegationMutation, Ne as useRotateApiKeyAuthMutation, Ve as useRotateAppSecretMutation, pe as useRotateApplicationSigningSecretMutation, pn as useShareWorkflowMutation, he as useSubmitApplicationForReviewMutation, me as useSubmitApplicationMutation, Lt as useSuspendMemberMutation, kn as useTestWebhookMutation, Vt as useTransferOwnershipMutation, Te as useUninstallApplicationMutation, hn as useUnshareWorkflowMutation, ue as useUpdateApplicationMutation, ye as useUpdateApplicationVersionMutation, Le as useUpdateAuthAppMutation, $t as useUpdateDeveloperProfileMutation, Nt as useUpdateMemberRoleMutation, jt as useUpdateOrgLegalInfoMutation, kt as useUpdateOrgTaxInfoMutation, ht as useUpdateOrganizationMutation, Tn as useUpdateWebhookMutation };
|
|
2477
2484
|
|
|
2478
2485
|
//# sourceMappingURL=global-operations.js.map
|