@rovela-ai/sdk 0.3.22 → 0.3.27
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/admin/api/index.d.ts +4 -0
- package/dist/admin/api/index.d.ts.map +1 -1
- package/dist/admin/api/index.js +6 -0
- package/dist/admin/api/index.js.map +1 -1
- package/dist/admin/api/products-bulk.d.ts +38 -0
- package/dist/admin/api/products-bulk.d.ts.map +1 -0
- package/dist/admin/api/products-bulk.js +135 -0
- package/dist/admin/api/products-bulk.js.map +1 -0
- package/dist/admin/api/products-stats.d.ts +34 -0
- package/dist/admin/api/products-stats.d.ts.map +1 -0
- package/dist/admin/api/products-stats.js +43 -0
- package/dist/admin/api/products-stats.js.map +1 -0
- package/dist/admin/api/products.d.ts.map +1 -1
- package/dist/admin/api/products.js +42 -5
- package/dist/admin/api/products.js.map +1 -1
- package/dist/admin/api/setup-guide.d.ts +78 -0
- package/dist/admin/api/setup-guide.d.ts.map +1 -0
- package/dist/admin/api/setup-guide.js +218 -0
- package/dist/admin/api/setup-guide.js.map +1 -0
- package/dist/admin/api/stats.d.ts +3 -0
- package/dist/admin/api/stats.d.ts.map +1 -1
- package/dist/admin/api/stats.js +20 -5
- package/dist/admin/api/stats.js.map +1 -1
- package/dist/admin/components/AdminLayout.d.ts.map +1 -1
- package/dist/admin/components/AdminLayout.js +5 -2
- package/dist/admin/components/AdminLayout.js.map +1 -1
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +13 -0
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/LowStockAlert.d.ts.map +1 -1
- package/dist/admin/components/LowStockAlert.js +1 -1
- package/dist/admin/components/LowStockAlert.js.map +1 -1
- package/dist/admin/components/OrderStatusChart.d.ts.map +1 -1
- package/dist/admin/components/OrderStatusChart.js +7 -1
- package/dist/admin/components/OrderStatusChart.js.map +1 -1
- package/dist/admin/components/PeriodSelector.d.ts +9 -0
- package/dist/admin/components/PeriodSelector.d.ts.map +1 -0
- package/dist/admin/components/PeriodSelector.js +19 -0
- package/dist/admin/components/PeriodSelector.js.map +1 -0
- package/dist/admin/components/PrimaryMetricsRow.d.ts +11 -0
- package/dist/admin/components/PrimaryMetricsRow.d.ts.map +1 -0
- package/dist/admin/components/PrimaryMetricsRow.js +73 -0
- package/dist/admin/components/PrimaryMetricsRow.js.map +1 -0
- package/dist/admin/components/ProductTable.d.ts +2 -1
- package/dist/admin/components/ProductTable.d.ts.map +1 -1
- package/dist/admin/components/ProductTable.js +284 -33
- package/dist/admin/components/ProductTable.js.map +1 -1
- package/dist/admin/components/RevenueChart.d.ts.map +1 -1
- package/dist/admin/components/RevenueChart.js +4 -1
- package/dist/admin/components/RevenueChart.js.map +1 -1
- package/dist/admin/components/SecondaryMetricsRow.d.ts +14 -0
- package/dist/admin/components/SecondaryMetricsRow.d.ts.map +1 -0
- package/dist/admin/components/SecondaryMetricsRow.js +45 -0
- package/dist/admin/components/SecondaryMetricsRow.js.map +1 -0
- package/dist/admin/components/SetupGuide.d.ts +4 -0
- package/dist/admin/components/SetupGuide.d.ts.map +1 -0
- package/dist/admin/components/SetupGuide.js +238 -0
- package/dist/admin/components/SetupGuide.js.map +1 -0
- package/dist/admin/components/index.d.ts +7 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +4 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/hooks/index.d.ts +3 -0
- package/dist/admin/hooks/index.d.ts.map +1 -1
- package/dist/admin/hooks/index.js +2 -0
- package/dist/admin/hooks/index.js.map +1 -1
- package/dist/admin/hooks/useAdminProductMetrics.d.ts +3 -0
- package/dist/admin/hooks/useAdminProductMetrics.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminProductMetrics.js +32 -0
- package/dist/admin/hooks/useAdminProductMetrics.js.map +1 -0
- package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -1
- package/dist/admin/hooks/useAdminProducts.js +19 -0
- package/dist/admin/hooks/useAdminProducts.js.map +1 -1
- package/dist/admin/hooks/useAdminStats.d.ts +7 -1
- package/dist/admin/hooks/useAdminStats.d.ts.map +1 -1
- package/dist/admin/hooks/useAdminStats.js +31 -2
- package/dist/admin/hooks/useAdminStats.js.map +1 -1
- package/dist/admin/hooks/useSetupGuide.d.ts +45 -0
- package/dist/admin/hooks/useSetupGuide.d.ts.map +1 -0
- package/dist/admin/hooks/useSetupGuide.js +57 -0
- package/dist/admin/hooks/useSetupGuide.js.map +1 -0
- package/dist/admin/index.d.ts +5 -5
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +5 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/server/admin-session.d.ts +37 -0
- package/dist/admin/server/admin-session.d.ts.map +1 -1
- package/dist/admin/server/admin-session.js +43 -0
- package/dist/admin/server/admin-session.js.map +1 -1
- package/dist/admin/server/index.d.ts +1 -1
- package/dist/admin/server/index.d.ts.map +1 -1
- package/dist/admin/server/index.js +1 -1
- package/dist/admin/server/index.js.map +1 -1
- package/dist/admin/styles/admin-theme.css +599 -8
- package/dist/admin/types.d.ts +108 -0
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/core/db/index.d.ts +2 -2
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +3 -1
- package/dist/core/db/index.js.map +1 -1
- package/dist/core/db/queries.d.ts +190 -26
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +394 -10
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.d.ts +34 -3
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +19 -1
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/server/index.d.ts +2 -1
- package/dist/core/server/index.d.ts.map +1 -1
- package/dist/core/server/index.js +3 -1
- package/dist/core/server/index.js.map +1 -1
- package/package.json +9 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* @rovela/sdk/admin/components/PrimaryMetricsRow
|
|
5
|
+
*
|
|
6
|
+
* Four primary metric cards with period-vs-prior-period deltas. Drives the
|
|
7
|
+
* top-of-dashboard KPI row. The four cards are the merchant's daily-watched
|
|
8
|
+
* numbers:
|
|
9
|
+
*
|
|
10
|
+
* - Revenue
|
|
11
|
+
* - Orders
|
|
12
|
+
* - AOV (average order value)
|
|
13
|
+
* - Refund rate
|
|
14
|
+
*
|
|
15
|
+
* Customers + Products live in the secondary row — they're context numbers,
|
|
16
|
+
* not action drivers. Best seller lives in the secondary row too because
|
|
17
|
+
* its shape (a name) doesn't fit the delta-pill rhythm.
|
|
18
|
+
*
|
|
19
|
+
* Refund rate is the only metric where DOWN is good. The delta badge is
|
|
20
|
+
* inverted for refund rate so a falling refund rate shows green.
|
|
21
|
+
*/
|
|
22
|
+
import { ArrowDownRight, ArrowUpRight, DollarSign, ShoppingBag, Wallet, AlertTriangle } from 'lucide-react';
|
|
23
|
+
// =============================================================================
|
|
24
|
+
// Delta Badge
|
|
25
|
+
// =============================================================================
|
|
26
|
+
function formatDelta(decimal) {
|
|
27
|
+
const pct = decimal * 100;
|
|
28
|
+
// 0.0% reads as noise; clamp to one decimal then trim trailing zero.
|
|
29
|
+
const rounded = Math.round(Math.abs(pct) * 10) / 10;
|
|
30
|
+
return `${rounded.toFixed(1).replace(/\.0$/, '')}%`;
|
|
31
|
+
}
|
|
32
|
+
function DeltaBadge({ delta, invertColor = false }) {
|
|
33
|
+
if (delta === null) {
|
|
34
|
+
return _jsx("span", { className: "admin-stat-secondary admin-text-muted", children: "\u2014" });
|
|
35
|
+
}
|
|
36
|
+
if (delta === 0) {
|
|
37
|
+
return _jsx("span", { className: "admin-stat-secondary admin-text-muted", children: "No change" });
|
|
38
|
+
}
|
|
39
|
+
const isPositive = delta > 0;
|
|
40
|
+
// Visual outcome: for normal metrics, positive = good (green); for inverted
|
|
41
|
+
// metrics (refund rate), negative = good (green).
|
|
42
|
+
const isGood = invertColor ? !isPositive : isPositive;
|
|
43
|
+
const Arrow = isPositive ? ArrowUpRight : ArrowDownRight;
|
|
44
|
+
return (_jsxs("span", { className: `admin-stat-secondary inline-flex items-center gap-1 ${isGood ? 'admin-text-success' : 'admin-text-error'}`, children: [_jsx(Arrow, { className: "h-3 w-3" }), formatDelta(delta), _jsx("span", { className: "admin-text-muted ml-1", children: "vs prior period" })] }));
|
|
45
|
+
}
|
|
46
|
+
function Card({ label, value, delta, invertColor, icon: Icon, isLoading }) {
|
|
47
|
+
return (_jsx("div", { className: "admin-stat-card", children: _jsxs("div", { className: "admin-stat-content", children: [_jsxs("div", { className: "admin-stat-text", children: [_jsx("p", { className: "admin-stat-label", children: label }), isLoading ? (_jsx("div", { className: "admin-skeleton", style: { height: '2.25rem', width: '7rem' } })) : (_jsx("p", { className: "admin-stat-value", children: value })), !isLoading && (_jsx(DeltaBadge, { delta: delta, invertColor: invertColor }))] }), _jsx("div", { className: "admin-stat-icon", children: _jsx(Icon, {}) })] }) }));
|
|
48
|
+
}
|
|
49
|
+
// =============================================================================
|
|
50
|
+
// Component
|
|
51
|
+
// =============================================================================
|
|
52
|
+
export function PrimaryMetricsRow({ summary, isLoading, currency, locale = 'en-US', }) {
|
|
53
|
+
const currencyFmt = (value) => new Intl.NumberFormat(locale, {
|
|
54
|
+
style: 'currency',
|
|
55
|
+
currency,
|
|
56
|
+
minimumFractionDigits: 0,
|
|
57
|
+
maximumFractionDigits: 0,
|
|
58
|
+
}).format(value);
|
|
59
|
+
// AOV gets one decimal so a $43.20 → $43.40 swing is visible.
|
|
60
|
+
const aovFmt = (value) => new Intl.NumberFormat(locale, {
|
|
61
|
+
style: 'currency',
|
|
62
|
+
currency,
|
|
63
|
+
minimumFractionDigits: 0,
|
|
64
|
+
maximumFractionDigits: 2,
|
|
65
|
+
}).format(value);
|
|
66
|
+
const pctFmt = (decimal) => {
|
|
67
|
+
const pct = decimal * 100;
|
|
68
|
+
const rounded = Math.round(pct * 10) / 10;
|
|
69
|
+
return `${rounded.toFixed(1).replace(/\.0$/, '')}%`;
|
|
70
|
+
};
|
|
71
|
+
return (_jsxs("div", { className: "admin-stats-grid", children: [_jsx(Card, { label: "Revenue", value: summary ? currencyFmt(summary.current.revenue) : currencyFmt(0), delta: summary?.deltas.revenue ?? null, icon: DollarSign, isLoading: isLoading }), _jsx(Card, { label: "Orders", value: summary ? summary.current.orders.toLocaleString(locale) : '0', delta: summary?.deltas.orders ?? null, icon: ShoppingBag, isLoading: isLoading }), _jsx(Card, { label: "Average order value", value: summary ? aovFmt(summary.current.aov) : aovFmt(0), delta: summary?.deltas.aov ?? null, icon: Wallet, isLoading: isLoading }), _jsx(Card, { label: "Refund rate", value: summary ? pctFmt(summary.current.refundRate) : '0%', delta: summary?.deltas.refundRate ?? null, invertColor: true, icon: AlertTriangle, isLoading: isLoading })] }));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=PrimaryMetricsRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrimaryMetricsRow.js","sourceRoot":"","sources":["../../../src/admin/components/PrimaryMetricsRow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProductTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,UAAU,CAAA;AAucjB;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAa,EACb,cAAc,EACd,SAAc,GACf,EAAE,iBAAiB,2CAkbnB"}
|
|
@@ -1,19 +1,62 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
4
|
* @rovela/sdk/admin/components/ProductTable
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Admin product list with:
|
|
7
|
+
* - Three metric cards above the filter row (Active / Out of stock / Best
|
|
8
|
+
* seller — last 30 days, by units)
|
|
9
|
+
* - Five quick-filter chips (All · Active · Drafts · Archived · Out of stock)
|
|
10
|
+
* replacing the legacy Status dropdown — default = Active
|
|
11
|
+
* - Bulk row selection with three actions (Activate / Archive / Delete);
|
|
12
|
+
* Delete enforces the existing "must be archived first" precondition
|
|
13
|
+
* - Real inventory column with low/out-of-stock badges (replaces the
|
|
14
|
+
* hardcoded `—`); for variant products shows the summed variant
|
|
15
|
+
* inventory computed server-side via `getInventoryByProductIds`
|
|
16
|
+
*
|
|
17
|
+
* Back-compat: every existing `ProductTableProps` field is preserved.
|
|
8
18
|
*/
|
|
9
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
10
|
-
import { ImageIcon, Pencil, Trash2 } from 'lucide-react';
|
|
19
|
+
import { useState, useEffect, useCallback, useMemo } from 'react';
|
|
20
|
+
import { ImageIcon, Pencil, Trash2, CheckCircle2, Archive, X, TrendingUp, AlertTriangle, Package, } from 'lucide-react';
|
|
11
21
|
import { useAdminProducts } from '../hooks/useAdminProducts';
|
|
22
|
+
import { useAdminProductMetrics } from '../hooks/useAdminProductMetrics';
|
|
12
23
|
import { useStoreSettingsOptional } from '../../core/StoreSettingsProvider';
|
|
13
24
|
import { AdminSelect } from './AdminSelect';
|
|
14
25
|
import { DeleteConfirmDialog } from './DeleteConfirmDialog';
|
|
26
|
+
const CHIP_LABELS = {
|
|
27
|
+
all: 'All',
|
|
28
|
+
active: 'Active',
|
|
29
|
+
drafts: 'Drafts',
|
|
30
|
+
archived: 'Archived',
|
|
31
|
+
oos: 'Out of stock',
|
|
32
|
+
};
|
|
33
|
+
const CHIP_ORDER = ['all', 'active', 'drafts', 'archived', 'oos'];
|
|
34
|
+
function chipToFilter(chip) {
|
|
35
|
+
switch (chip) {
|
|
36
|
+
case 'all':
|
|
37
|
+
return {};
|
|
38
|
+
case 'active':
|
|
39
|
+
return { status: 'active' };
|
|
40
|
+
case 'drafts':
|
|
41
|
+
return { status: 'draft' };
|
|
42
|
+
case 'archived':
|
|
43
|
+
return { status: 'archived' };
|
|
44
|
+
case 'oos':
|
|
45
|
+
// Scoped to active so the table count matches the OOS metric card.
|
|
46
|
+
return { status: 'active', outOfStock: true };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function initialStatusToChip(initialStatus) {
|
|
50
|
+
if (initialStatus === 'draft')
|
|
51
|
+
return 'drafts';
|
|
52
|
+
if (initialStatus === 'archived')
|
|
53
|
+
return 'archived';
|
|
54
|
+
if (initialStatus === 'active')
|
|
55
|
+
return 'active';
|
|
56
|
+
return 'active'; // default: Active (most useful daily view)
|
|
57
|
+
}
|
|
15
58
|
// =============================================================================
|
|
16
|
-
// Status Badge
|
|
59
|
+
// Status Badge
|
|
17
60
|
// =============================================================================
|
|
18
61
|
const statusBadgeClass = {
|
|
19
62
|
draft: 'admin-badge-draft',
|
|
@@ -24,19 +67,104 @@ function StatusBadge({ status }) {
|
|
|
24
67
|
const badgeClass = statusBadgeClass[status] || 'admin-badge-draft';
|
|
25
68
|
return (_jsx("span", { className: `admin-badge ${badgeClass}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
|
|
26
69
|
}
|
|
27
|
-
|
|
28
|
-
|
|
70
|
+
// =============================================================================
|
|
71
|
+
// Inventory Cell
|
|
72
|
+
// =============================================================================
|
|
73
|
+
/**
|
|
74
|
+
* Renders the inventory column. Replaces the legacy hardcoded `—`.
|
|
75
|
+
*
|
|
76
|
+
* - `trackInventory=false` AND non-variant → '—' (untracked is the only
|
|
77
|
+
* legitimate dash — the merchant explicitly opted out)
|
|
78
|
+
* - effectiveInventory === 0 → red "Out" badge
|
|
79
|
+
* - effectiveInventory <= 5 → amber "Low (N)" badge
|
|
80
|
+
* - otherwise → plain number
|
|
81
|
+
*/
|
|
82
|
+
function InventoryCell({ product: p }) {
|
|
83
|
+
const tracks = p.hasVariants || p.trackInventory !== false;
|
|
84
|
+
if (!tracks) {
|
|
85
|
+
return _jsx("span", { className: "admin-text-muted", children: "\u2014" });
|
|
86
|
+
}
|
|
87
|
+
const inv = p.effectiveInventory ?? 0;
|
|
88
|
+
if (inv <= 0) {
|
|
89
|
+
return _jsx("span", { className: "admin-badge admin-badge-out-of-stock", children: "Out" });
|
|
90
|
+
}
|
|
91
|
+
if (inv <= 5) {
|
|
92
|
+
return (_jsxs("span", { className: "admin-badge admin-badge-low-stock", children: ["Low (", inv, ")"] }));
|
|
93
|
+
}
|
|
94
|
+
return _jsx("span", { className: "admin-text", children: inv });
|
|
95
|
+
}
|
|
96
|
+
// =============================================================================
|
|
97
|
+
// Metric Cards
|
|
98
|
+
// =============================================================================
|
|
99
|
+
function MetricCard({ label, primary, secondary, icon: Icon, isLoading, href, onClick, }) {
|
|
100
|
+
const Wrapper = onClick
|
|
101
|
+
? 'button'
|
|
102
|
+
: href
|
|
103
|
+
? 'a'
|
|
104
|
+
: 'div';
|
|
105
|
+
const wrapperProps = onClick
|
|
106
|
+
? { type: 'button', onClick }
|
|
107
|
+
: href
|
|
108
|
+
? { href }
|
|
109
|
+
: {};
|
|
110
|
+
return (_jsx(Wrapper, { ...wrapperProps, className: "admin-stat-card admin-stat-card-clickable", children: _jsxs("div", { className: "admin-stat-content", children: [_jsxs("div", { className: "admin-stat-text", children: [_jsx("p", { className: "admin-stat-label", children: label }), isLoading ? (_jsx("div", { className: "admin-skeleton", style: { height: '2.25rem', width: '7rem' } })) : (_jsx("p", { className: "admin-stat-value", children: primary })), secondary && !isLoading && (_jsx("p", { className: "admin-stat-secondary", children: secondary }))] }), _jsx("div", { className: "admin-stat-icon", children: _jsx(Icon, {}) })] }) }));
|
|
111
|
+
}
|
|
112
|
+
function ProductMetricsCards({ metrics, isLoading, currency, locale, onActiveClick, onOutOfStockClick, onBestSellerClick, }) {
|
|
113
|
+
const formatRevenue = (value) => {
|
|
114
|
+
const n = parseFloat(value);
|
|
115
|
+
if (!Number.isFinite(n))
|
|
116
|
+
return '';
|
|
117
|
+
return new Intl.NumberFormat(locale, {
|
|
118
|
+
style: 'currency',
|
|
119
|
+
currency,
|
|
120
|
+
minimumFractionDigits: 0,
|
|
121
|
+
maximumFractionDigits: 0,
|
|
122
|
+
}).format(n);
|
|
123
|
+
};
|
|
124
|
+
return (_jsxs("div", { className: "admin-stats-grid admin-stats-grid-3", children: [_jsx(MetricCard, { label: "Active products", primary: metrics?.activeCount.toLocaleString() ?? '0', icon: Package, isLoading: isLoading, onClick: onActiveClick }), _jsx(MetricCard, { label: "Out of stock", primary: metrics?.outOfStockCount.toLocaleString() ?? '0', secondary: metrics && metrics.outOfStockCount > 0
|
|
125
|
+
? 'Restock to keep selling'
|
|
126
|
+
: undefined, icon: AlertTriangle, isLoading: isLoading, onClick: onOutOfStockClick }), _jsx(MetricCard, { label: "Best seller (30 d)", primary: metrics?.bestSeller ? (_jsx("span", { className: "admin-stat-value-name", title: metrics.bestSeller.name, children: metrics.bestSeller.name })) : (_jsx("span", { className: "admin-text-muted", style: { fontSize: '1.125rem' }, children: "No sales yet" })), secondary: metrics?.bestSeller
|
|
127
|
+
? `${metrics.bestSeller.unitsSold} units · ${formatRevenue(metrics.bestSeller.revenue)}`
|
|
128
|
+
: 'Your top product appears after the first order', icon: TrendingUp, isLoading: isLoading, onClick: metrics?.bestSeller
|
|
129
|
+
? () => onBestSellerClick(metrics.bestSeller.id)
|
|
130
|
+
: undefined })] }));
|
|
131
|
+
}
|
|
132
|
+
// =============================================================================
|
|
133
|
+
// Chip Row
|
|
134
|
+
// =============================================================================
|
|
135
|
+
function ChipRow({ active, onChange, disabled, }) {
|
|
136
|
+
return (_jsx("div", { className: "admin-chip-row", role: "tablist", "aria-label": "Quick filters", children: CHIP_ORDER.map((chip) => {
|
|
137
|
+
const isActive = chip === active;
|
|
138
|
+
return (_jsx("button", { type: "button", role: "tab", "aria-selected": isActive, disabled: disabled, onClick: () => onChange(chip), className: `admin-chip ${isActive ? 'admin-chip-active' : ''}`, children: CHIP_LABELS[chip] }, chip));
|
|
139
|
+
}) }));
|
|
140
|
+
}
|
|
141
|
+
// =============================================================================
|
|
142
|
+
// Bulk Action Bar
|
|
143
|
+
// =============================================================================
|
|
144
|
+
function BulkActionBar({ count, selectedAreAllArchived, isProcessing, onActivate, onArchive, onDelete, onClear, }) {
|
|
145
|
+
return (_jsxs("div", { className: "admin-bulk-bar", role: "region", "aria-label": "Bulk actions", children: [_jsxs("div", { className: "admin-bulk-bar-count", children: [_jsx(CheckCircle2, { className: "h-4 w-4" }), _jsxs("span", { children: [_jsx("strong", { children: count }), " selected"] })] }), _jsxs("div", { className: "admin-bulk-bar-actions", children: [_jsxs("button", { type: "button", onClick: onActivate, disabled: isProcessing, className: "admin-btn admin-btn-secondary admin-btn-sm", children: [_jsx(CheckCircle2, { className: "h-4 w-4" }), "Activate"] }), _jsxs("button", { type: "button", onClick: onArchive, disabled: isProcessing, className: "admin-btn admin-btn-secondary admin-btn-sm", children: [_jsx(Archive, { className: "h-4 w-4" }), "Archive"] }), _jsxs("button", { type: "button", onClick: onDelete, disabled: isProcessing || !selectedAreAllArchived, title: selectedAreAllArchived
|
|
146
|
+
? 'Permanently delete selected'
|
|
147
|
+
: 'Archive these products first, then delete', className: "admin-btn admin-btn-danger admin-btn-sm", children: [_jsx(Trash2, { className: "h-4 w-4" }), "Delete"] }), _jsx("button", { type: "button", onClick: onClear, disabled: isProcessing, "aria-label": "Clear selection", className: "admin-bulk-bar-clear", children: _jsx(X, { className: "h-4 w-4" }) })] })] }));
|
|
148
|
+
}
|
|
149
|
+
function ProductRow({ product: p, isSelected, onToggleSelect, onProductClick, onDeleteClick, formatCurrency, }) {
|
|
150
|
+
return (_jsxs("tr", { className: `admin-table-row ${isSelected ? 'admin-table-row-selected' : ''}`, children: [_jsx("td", { className: "px-4 py-4 w-12", children: _jsx("input", { type: "checkbox", className: "admin-checkbox", checked: isSelected, onChange: () => onToggleSelect(p.id), "aria-label": `Select ${p.name}` }) }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [p.images?.[0] ? (_jsx("img", { src: p.images[0], alt: p.name, className: "h-10 w-10 rounded object-cover" })) : (_jsx("div", { className: "admin-image-placeholder h-10 w-10 rounded", children: _jsx(ImageIcon, { className: "h-5 w-5", strokeWidth: 1.5 }) })), _jsx("a", { href: `/admin/products/${p.id}`, onClick: (e) => {
|
|
151
|
+
if (onProductClick) {
|
|
152
|
+
e.preventDefault();
|
|
153
|
+
onProductClick(p.id);
|
|
154
|
+
}
|
|
155
|
+
}, className: "admin-inventory-item-link", children: p.name })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx(StatusBadge, { status: p.status }) }), _jsx("td", { className: "px-6 py-4 text-sm font-medium", children: formatCurrency(p.price) }), _jsx("td", { className: "px-6 py-4 text-sm", children: _jsx(InventoryCell, { product: p }) }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx("a", { href: `/admin/products/${p.id}`, onClick: (e) => {
|
|
29
156
|
if (onProductClick) {
|
|
30
157
|
e.preventDefault();
|
|
31
158
|
onProductClick(p.id);
|
|
32
159
|
}
|
|
33
|
-
}, className: "
|
|
160
|
+
}, className: "p-2 rounded-md hover:bg-[hsl(var(--admin-background-subtle))] text-[hsl(var(--admin-foreground-muted))] hover:text-[hsl(var(--admin-foreground))] transition-colors", "aria-label": "Edit product", children: _jsx(Pencil, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: () => onDeleteClick(p.id, p.name), className: "p-2 rounded-md hover:bg-[hsl(var(--admin-error)/0.1)] text-[hsl(var(--admin-foreground-muted))] hover:text-[hsl(var(--admin-error))] transition-colors", "aria-label": "Delete product", children: _jsx(Trash2, { className: "h-4 w-4" }) })] }) })] }));
|
|
34
161
|
}
|
|
35
162
|
// =============================================================================
|
|
36
163
|
// Component
|
|
37
164
|
// =============================================================================
|
|
38
165
|
/**
|
|
39
|
-
* Products data table with
|
|
166
|
+
* Products data table with metrics row, quick-filter chips, bulk actions,
|
|
167
|
+
* and a real inventory column.
|
|
40
168
|
*
|
|
41
169
|
* @example
|
|
42
170
|
* ```tsx
|
|
@@ -46,37 +174,118 @@ function ProductRow({ product: p, onProductClick, onDeleteClick, formatCurrency
|
|
|
46
174
|
* ```
|
|
47
175
|
*/
|
|
48
176
|
export function ProductTable({ initialSearch, initialCategory, initialStatus, pageSize = 20, onProductClick, className = '', }) {
|
|
49
|
-
const { products, total, page, isLoading, fetchProducts, deleteProduct } = useAdminProducts();
|
|
177
|
+
const { products, total, page, isLoading, fetchProducts, deleteProduct, bulkAction, } = useAdminProducts();
|
|
178
|
+
const { metrics, isLoading: isMetricsLoading, fetchMetrics } = useAdminProductMetrics();
|
|
50
179
|
// Get currency from context
|
|
51
180
|
const storeSettings = useStoreSettingsOptional();
|
|
52
181
|
const resolvedCurrency = storeSettings?.currency ?? 'USD';
|
|
53
182
|
const resolvedLocale = storeSettings?.locale ?? 'en-US';
|
|
183
|
+
// Filter state
|
|
54
184
|
const [search, setSearch] = useState(initialSearch || '');
|
|
55
|
-
const [
|
|
185
|
+
const [chip, setChip] = useState(() => initialStatusToChip(initialStatus));
|
|
56
186
|
const [sort, setSort] = useState('newest');
|
|
57
|
-
//
|
|
187
|
+
// Selection state — tracked as a Set of product IDs on the current page
|
|
188
|
+
const [selected, setSelected] = useState(new Set());
|
|
189
|
+
const [isProcessing, setIsProcessing] = useState(false);
|
|
190
|
+
// Single-row delete dialog
|
|
58
191
|
const [deleteTarget, setDeleteTarget] = useState(null);
|
|
59
192
|
const [isDeleting, setIsDeleting] = useState(false);
|
|
60
193
|
const [deleteError, setDeleteError] = useState(null);
|
|
194
|
+
// Bulk confirmation dialog
|
|
195
|
+
const [bulkConfirm, setBulkConfirm] = useState(null);
|
|
196
|
+
// Derived: are all selected products already archived? Drives the Delete
|
|
197
|
+
// button enable state in the bulk bar.
|
|
198
|
+
const selectedAreAllArchived = useMemo(() => {
|
|
199
|
+
if (selected.size === 0)
|
|
200
|
+
return false;
|
|
201
|
+
for (const p of products) {
|
|
202
|
+
if (selected.has(p.id) && p.status !== 'archived')
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
return true;
|
|
206
|
+
}, [selected, products]);
|
|
61
207
|
// Fetch products on filter change
|
|
62
208
|
useEffect(() => {
|
|
209
|
+
const filter = chipToFilter(chip);
|
|
63
210
|
fetchProducts({
|
|
64
211
|
search: search || undefined,
|
|
65
|
-
|
|
212
|
+
category: initialCategory || undefined,
|
|
213
|
+
status: filter.status,
|
|
214
|
+
outOfStock: filter.outOfStock,
|
|
66
215
|
sort,
|
|
67
216
|
page: 1,
|
|
68
217
|
limit: pageSize,
|
|
69
218
|
});
|
|
70
|
-
|
|
219
|
+
// Clear selection on filter change so the user doesn't accidentally
|
|
220
|
+
// bulk-act on rows they can't see.
|
|
221
|
+
setSelected(new Set());
|
|
222
|
+
}, [search, chip, sort, pageSize, initialCategory, fetchProducts]);
|
|
223
|
+
// One-time metric fetch on mount (re-fetched after every successful action)
|
|
224
|
+
useEffect(() => {
|
|
225
|
+
fetchMetrics();
|
|
226
|
+
}, [fetchMetrics]);
|
|
227
|
+
const refetchAll = useCallback(() => {
|
|
228
|
+
const filter = chipToFilter(chip);
|
|
229
|
+
fetchProducts({
|
|
230
|
+
search: search || undefined,
|
|
231
|
+
category: initialCategory || undefined,
|
|
232
|
+
status: filter.status,
|
|
233
|
+
outOfStock: filter.outOfStock,
|
|
234
|
+
sort,
|
|
235
|
+
page,
|
|
236
|
+
limit: pageSize,
|
|
237
|
+
});
|
|
238
|
+
fetchMetrics();
|
|
239
|
+
}, [
|
|
240
|
+
chip,
|
|
241
|
+
search,
|
|
242
|
+
sort,
|
|
243
|
+
page,
|
|
244
|
+
pageSize,
|
|
245
|
+
initialCategory,
|
|
246
|
+
fetchProducts,
|
|
247
|
+
fetchMetrics,
|
|
248
|
+
]);
|
|
71
249
|
const handlePageChange = useCallback((newPage) => {
|
|
250
|
+
const filter = chipToFilter(chip);
|
|
72
251
|
fetchProducts({
|
|
73
252
|
search: search || undefined,
|
|
74
|
-
|
|
253
|
+
category: initialCategory || undefined,
|
|
254
|
+
status: filter.status,
|
|
255
|
+
outOfStock: filter.outOfStock,
|
|
75
256
|
sort,
|
|
76
257
|
page: newPage,
|
|
77
258
|
limit: pageSize,
|
|
78
259
|
});
|
|
79
|
-
|
|
260
|
+
setSelected(new Set());
|
|
261
|
+
}, [search, chip, sort, pageSize, initialCategory, fetchProducts]);
|
|
262
|
+
// ---- Selection handlers ------------------------------------------------
|
|
263
|
+
const handleToggleSelect = useCallback((id) => {
|
|
264
|
+
setSelected((prev) => {
|
|
265
|
+
const next = new Set(prev);
|
|
266
|
+
if (next.has(id))
|
|
267
|
+
next.delete(id);
|
|
268
|
+
else
|
|
269
|
+
next.add(id);
|
|
270
|
+
return next;
|
|
271
|
+
});
|
|
272
|
+
}, []);
|
|
273
|
+
const handleSelectAllOnPage = useCallback(() => {
|
|
274
|
+
setSelected((prev) => {
|
|
275
|
+
// If already all selected on the page, clear; else select all on page.
|
|
276
|
+
const allSelected = products.length > 0 && products.every((p) => prev.has(p.id));
|
|
277
|
+
if (allSelected)
|
|
278
|
+
return new Set();
|
|
279
|
+
const next = new Set(prev);
|
|
280
|
+
for (const p of products)
|
|
281
|
+
next.add(p.id);
|
|
282
|
+
return next;
|
|
283
|
+
});
|
|
284
|
+
}, [products]);
|
|
285
|
+
const handleClearSelection = useCallback(() => {
|
|
286
|
+
setSelected(new Set());
|
|
287
|
+
}, []);
|
|
288
|
+
// ---- Single-row delete (existing flow, unchanged) -----------------------
|
|
80
289
|
const handleDeleteClick = useCallback((id, name) => {
|
|
81
290
|
setDeleteTarget({ id, name });
|
|
82
291
|
setDeleteError(null);
|
|
@@ -90,18 +299,60 @@ export function ProductTable({ initialSearch, initialCategory, initialStatus, pa
|
|
|
90
299
|
setIsDeleting(false);
|
|
91
300
|
if (result.success) {
|
|
92
301
|
setDeleteTarget(null);
|
|
93
|
-
|
|
302
|
+
refetchAll();
|
|
94
303
|
}
|
|
95
304
|
else {
|
|
96
305
|
setDeleteError(result.error ?? 'Failed to delete product. Please try again.');
|
|
97
306
|
}
|
|
98
|
-
}, [deleteTarget, deleteProduct,
|
|
307
|
+
}, [deleteTarget, deleteProduct, refetchAll]);
|
|
99
308
|
const handleDeleteCancel = useCallback(() => {
|
|
100
309
|
if (!isDeleting) {
|
|
101
310
|
setDeleteTarget(null);
|
|
102
311
|
setDeleteError(null);
|
|
103
312
|
}
|
|
104
313
|
}, [isDeleting]);
|
|
314
|
+
// ---- Bulk actions ------------------------------------------------------
|
|
315
|
+
const performBulk = useCallback(async (action) => {
|
|
316
|
+
const ids = Array.from(selected);
|
|
317
|
+
if (ids.length === 0)
|
|
318
|
+
return;
|
|
319
|
+
setIsProcessing(true);
|
|
320
|
+
const result = await bulkAction(ids, action);
|
|
321
|
+
setIsProcessing(false);
|
|
322
|
+
setBulkConfirm(null);
|
|
323
|
+
// Refresh the page + metrics regardless of partial-success outcome.
|
|
324
|
+
refetchAll();
|
|
325
|
+
setSelected(new Set());
|
|
326
|
+
// Surface partial failures via console — the parent app can wire a toast
|
|
327
|
+
// by inspecting the hook return if needed. We deliberately don't throw
|
|
328
|
+
// because the SDK shouldn't depend on a toast library.
|
|
329
|
+
if (result.failed.length > 0) {
|
|
330
|
+
console.warn(`[ProductTable] Bulk ${action}: ${result.succeeded.length} succeeded, ${result.failed.length} failed`, result.failed);
|
|
331
|
+
}
|
|
332
|
+
}, [selected, bulkAction, refetchAll]);
|
|
333
|
+
const handleActivate = useCallback(() => performBulk('activate'), [performBulk]);
|
|
334
|
+
const handleArchive = useCallback(() => setBulkConfirm('archive'), []);
|
|
335
|
+
const handleDeleteBulk = useCallback(() => setBulkConfirm('delete'), []);
|
|
336
|
+
const confirmBulk = useCallback(() => {
|
|
337
|
+
if (bulkConfirm === 'archive')
|
|
338
|
+
performBulk('archive');
|
|
339
|
+
else if (bulkConfirm === 'delete')
|
|
340
|
+
performBulk('delete');
|
|
341
|
+
}, [bulkConfirm, performBulk]);
|
|
342
|
+
const cancelBulkConfirm = useCallback(() => {
|
|
343
|
+
if (!isProcessing)
|
|
344
|
+
setBulkConfirm(null);
|
|
345
|
+
}, [isProcessing]);
|
|
346
|
+
// ---- Metric card click-throughs ----------------------------------------
|
|
347
|
+
const handleActiveCardClick = useCallback(() => setChip('active'), []);
|
|
348
|
+
const handleOosCardClick = useCallback(() => setChip('oos'), []);
|
|
349
|
+
const handleBestSellerCardClick = useCallback((id) => {
|
|
350
|
+
if (onProductClick)
|
|
351
|
+
onProductClick(id);
|
|
352
|
+
else
|
|
353
|
+
window.location.href = `/admin/products/${id}`;
|
|
354
|
+
}, [onProductClick]);
|
|
355
|
+
// ---- Helpers -----------------------------------------------------------
|
|
105
356
|
const formatCurrency = (value) => {
|
|
106
357
|
return new Intl.NumberFormat(resolvedLocale, {
|
|
107
358
|
style: 'currency',
|
|
@@ -109,19 +360,19 @@ export function ProductTable({ initialSearch, initialCategory, initialStatus, pa
|
|
|
109
360
|
}).format(parseFloat(value));
|
|
110
361
|
};
|
|
111
362
|
const totalPages = Math.ceil(total / pageSize);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
363
|
+
const allOnPageSelected = products.length > 0 && products.every((p) => selected.has(p.id));
|
|
364
|
+
const someOnPageSelected = products.length > 0 && products.some((p) => selected.has(p.id));
|
|
365
|
+
return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsx(ProductMetricsCards, { metrics: metrics, isLoading: isMetricsLoading, currency: resolvedCurrency, locale: resolvedLocale, onActiveClick: handleActiveCardClick, onOutOfStockClick: handleOosCardClick, onBestSellerClick: handleBestSellerCardClick }), selected.size > 0 ? (_jsx(BulkActionBar, { count: selected.size, selectedAreAllArchived: selectedAreAllArchived, isProcessing: isProcessing, onActivate: handleActivate, onArchive: handleArchive, onDelete: handleDeleteBulk, onClear: handleClearSelection })) : (_jsxs(_Fragment, { children: [_jsx(ChipRow, { active: chip, onChange: setChip, disabled: isLoading }), _jsxs("div", { className: "admin-filter-bar", children: [_jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search products...", className: "admin-filter-search" }), _jsx(AdminSelect, { value: sort, onChange: (value) => setSort(value), options: [
|
|
366
|
+
{ value: 'newest', label: 'Newest' },
|
|
367
|
+
{ value: 'name', label: 'Name' },
|
|
368
|
+
{ value: 'price-asc', label: 'Price: Low to High' },
|
|
369
|
+
{ value: 'price-desc', label: 'Price: High to Low' },
|
|
370
|
+
], className: "w-[170px]" })] })] })), _jsxs("div", { className: "admin-card overflow-hidden", children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "admin-table w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "admin-table-header", children: [_jsx("th", { className: "px-4 py-3 w-12 text-left", children: _jsx("input", { type: "checkbox", className: "admin-checkbox", checked: allOnPageSelected, ref: (el) => {
|
|
371
|
+
if (el)
|
|
372
|
+
el.indeterminate =
|
|
373
|
+
someOnPageSelected && !allOnPageSelected;
|
|
374
|
+
}, onChange: handleSelectAllOnPage, "aria-label": "Select all products on this page" }) }), _jsx("th", { className: "px-6 py-3 text-left", children: "Product" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Status" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Price" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Inventory" }), _jsx("th", { className: "px-6 py-3 text-right", children: "Actions" })] }) }), _jsx("tbody", { children: isLoading ? ([...Array(5)].map((_, i) => (_jsxs("tr", { className: "admin-table-row", children: [_jsx("td", { className: "px-4 py-4 w-12", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-4 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "admin-skeleton admin-skeleton-xl w-10 rounded" }), _jsx("div", { className: "admin-skeleton admin-skeleton-md w-32 rounded" })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-lg w-16 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-16 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-12 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-20 rounded" }) })] }, i)))) : products.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 6, className: "px-6 py-12 text-center admin-empty-text", children: "No products found" }) })) : (products.map((product) => (_jsx(ProductRow, { product: product, isSelected: selected.has(product.id), onToggleSelect: handleToggleSelect, onProductClick: onProductClick, onDeleteClick: handleDeleteClick, formatCurrency: formatCurrency }, product.id)))) })] }) }), totalPages > 1 && (_jsxs("div", { className: "admin-pagination px-6", children: [_jsxs("p", { className: "admin-pagination-info", children: ["Showing ", (page - 1) * pageSize + 1, " to", ' ', Math.min(page * pageSize, total), " of ", total] }), _jsxs("div", { className: "admin-pagination-controls", children: [_jsx("button", { onClick: () => handlePageChange(page - 1), disabled: page === 1, className: "admin-btn admin-btn-secondary admin-btn-sm disabled:opacity-50", children: "Previous" }), _jsx("button", { onClick: () => handlePageChange(page + 1), disabled: page >= totalPages, className: "admin-btn admin-btn-secondary admin-btn-sm disabled:opacity-50", children: "Next" })] })] }))] }), _jsx(DeleteConfirmDialog, { isOpen: !!deleteTarget, title: "Delete Product", itemName: deleteTarget?.name || '', itemType: "product", isDeleting: isDeleting, error: deleteError, onConfirm: handleDeleteConfirm, onCancel: handleDeleteCancel }), _jsx(DeleteConfirmDialog, { isOpen: bulkConfirm !== null, title: bulkConfirm === 'delete'
|
|
375
|
+
? `Delete ${selected.size} product${selected.size === 1 ? '' : 's'}`
|
|
376
|
+
: `Archive ${selected.size} product${selected.size === 1 ? '' : 's'}`, itemName: `${selected.size} selected product${selected.size === 1 ? '' : 's'}`, itemType: "product", isDeleting: isProcessing, error: null, onConfirm: confirmBulk, onCancel: cancelBulkConfirm })] }));
|
|
126
377
|
}
|
|
127
378
|
//# sourceMappingURL=ProductTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductTable.js","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProductTable.js","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RevenueChart.d.ts","sourceRoot":"","sources":["../../../src/admin/components/RevenueChart.tsx"],"names":[],"mappings":"AAwBA,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiDD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAiB,EACjB,QAAgB,EAChB,SAAc,GACf,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"RevenueChart.d.ts","sourceRoot":"","sources":["../../../src/admin/components/RevenueChart.tsx"],"names":[],"mappings":"AAwBA,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiDD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAiB,EACjB,QAAgB,EAChB,SAAc,GACf,EAAE,iBAAiB,2CAqHnB"}
|
|
@@ -67,6 +67,9 @@ export function RevenueChart({ data, isLoading = false, currency = 'USD', classN
|
|
|
67
67
|
currency,
|
|
68
68
|
minimumFractionDigits: 0,
|
|
69
69
|
maximumFractionDigits: 0,
|
|
70
|
-
}).format(totalRevenue) }), _jsx("p", { className: "admin-chart-value-label", children: "Total" })] }))] }), _jsx("div", { className: "admin-chart-body", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("div", { className: "admin-chart-spinner" }) })) : data.length === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx(BarChart3, { className: "h-12 w-12 admin-chart-empty-icon", strokeWidth: 1 }), _jsx("p", { className: "admin-chart-empty-text", children: "No revenue data yet" }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Revenue will appear here after your first sale" })] })) : (_jsx(
|
|
70
|
+
}).format(totalRevenue) }), _jsx("p", { className: "admin-chart-value-label", children: "Total" })] }))] }), _jsx("div", { className: "admin-chart-body", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("div", { className: "admin-chart-spinner" }) })) : data.length === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx(BarChart3, { className: "h-12 w-12 admin-chart-empty-icon", strokeWidth: 1 }), _jsx("p", { className: "admin-chart-empty-text", children: "No revenue data yet" }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Revenue will appear here after your first sale" })] })) : (_jsx("div", {
|
|
71
|
+
// Screen-reader summary so the chart isn't an opaque visual.
|
|
72
|
+
// Tooltip alone doesn't surface to assistive tech.
|
|
73
|
+
role: "img", "aria-label": `Revenue chart for the last ${data.length} days. Total ${new Intl.NumberFormat('en-US', { style: 'currency', currency, maximumFractionDigits: 0 }).format(totalRevenue)}.`, children: _jsx(ResponsiveContainer, { width: "100%", height: 260, children: _jsxs(AreaChart, { data: data, margin: { top: 10, right: 10, left: 0, bottom: 0 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "revenueGradient", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "hsl(var(--admin-primary))", stopOpacity: 0.3 }), _jsx("stop", { offset: "100%", stopColor: "hsl(var(--admin-primary))", stopOpacity: 0 })] }) }), _jsx(CartesianGrid, { strokeDasharray: "3 3", vertical: false, stroke: "hsl(var(--admin-border))" }), _jsx(XAxis, { dataKey: "date", tickFormatter: tickFormatter, axisLine: false, tickLine: false, tick: { fill: 'hsl(var(--admin-foreground-muted))', fontSize: 12 }, dy: 10 }), _jsx(YAxis, { tickFormatter: formatCurrency, axisLine: false, tickLine: false, tick: { fill: 'hsl(var(--admin-foreground-muted))', fontSize: 12 }, width: 60 }), _jsx(Tooltip, { content: _jsx(CustomTooltip, { currency: currency }) }), _jsx(Area, { type: "monotone", dataKey: "revenue", stroke: "hsl(var(--admin-primary))", strokeWidth: 2, fill: "url(#revenueGradient)" })] }) }) })) })] }));
|
|
71
74
|
}
|
|
72
75
|
//# sourceMappingURL=RevenueChart.js.map
|