medusa-analytics 0.0.9 → 0.0.11

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.
@@ -40,18 +40,13 @@ function OrdersOverTimeTooltip({
40
40
  }
41
41
  const STATUS_COLORS = {
42
42
  pending: "#F59E0B",
43
- confirmed: "#3B82F6",
44
- processing: "#8B5CF6",
45
- shipped: "#06B6D4",
46
- delivered: "#10B981",
47
- cancelled: "#EF4444"
43
+ cancelled: "#EF4444",
44
+ delivered: "#10B981"
48
45
  };
49
46
  const ORDER_CHART_STATUSES = [
50
47
  { key: "pending", label: "Pending", color: STATUS_COLORS.pending },
51
- { key: "confirmed", label: "Confirmed", color: STATUS_COLORS.confirmed },
52
- { key: "processing", label: "Processing", color: STATUS_COLORS.processing },
53
- { key: "fulfilled", label: "Fulfilled", color: "#10B981" },
54
- { key: "cancelled", label: "Cancelled", color: STATUS_COLORS.cancelled }
48
+ { key: "cancelled", label: "Cancelled", color: STATUS_COLORS.cancelled },
49
+ { key: "delivered", label: "Delivered", color: STATUS_COLORS.delivered }
55
50
  ];
56
51
  function formatCurrency(value) {
57
52
  return new Intl.NumberFormat("en-IN", {
@@ -133,9 +128,8 @@ function OrdersDashboard() {
133
128
  if (error || !data) {
134
129
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-danger", children: error ?? "Failed to load analytics" }) });
135
130
  }
136
- const fulfilledCount = (data.statusCounts.shipped ?? 0) + (data.statusCounts.delivered ?? 0);
137
131
  const pieData = ORDER_CHART_STATUSES.map(({ key, label, color }) => {
138
- const value = key === "fulfilled" ? fulfilledCount : data.statusCounts[key] ?? 0;
132
+ const value = key === "delivered" ? data.statusCounts.delivered ?? data.deliveredOrders ?? 0 : key === "cancelled" ? data.statusCounts.cancelled ?? data.cancelledOrders ?? 0 : data.statusCounts.pending ?? data.pendingOrders ?? 0;
139
133
  return { name: label, value, color };
140
134
  }).filter((d) => d.value > 0);
141
135
  const returnsExchangesData = [
@@ -205,10 +199,10 @@ function OrdersDashboard() {
205
199
  /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: data.returnOrders.toLocaleString() })
206
200
  ] })
207
201
  ] }),
208
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "p-6", children: [
209
- /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h3", className: "mb-4", children: "Orders by status" }),
210
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-8 items-start", children: [
211
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[300px] flex flex-col overflow-visible", style: { padding: "20px 24px" }, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: 280, children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.PieChart, { margin: { top: 16, right: 24, bottom: 16, left: 24 }, children: [
202
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row flex-wrap gap-6 items-stretch", children: [
203
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0 flex flex-col", style: { minWidth: "280px" }, children: [
204
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h3", className: "mb-3", children: "Orders by status" }),
205
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-h-[280px] flex items-center justify-center", children: pieData.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: 280, children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.PieChart, { margin: { top: 8, right: 8, bottom: 8, left: 8 }, children: [
212
206
  /* @__PURE__ */ jsxRuntime.jsx(
213
207
  recharts.Pie,
214
208
  {
@@ -226,31 +220,31 @@ function OrdersDashboard() {
226
220
  ),
227
221
  /* @__PURE__ */ jsxRuntime.jsx(recharts.Tooltip, { formatter: (value) => [value ?? 0, "Orders"] }),
228
222
  /* @__PURE__ */ jsxRuntime.jsx(recharts.Legend, { verticalAlign: "bottom", height: 36 })
229
- ] }) }) }),
230
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-h-[300px] flex flex-col overflow-visible", style: { padding: "20px 24px" }, children: [
231
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-ui-fg-subtle mb-3 text-sm font-medium", children: "Returns & exchanges" }),
232
- returnsExchangesData.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: 280, children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.PieChart, { margin: { top: 16, right: 24, bottom: 16, left: 24 }, children: [
233
- /* @__PURE__ */ jsxRuntime.jsx(
234
- recharts.Pie,
235
- {
236
- data: returnsExchangesData,
237
- cx: "50%",
238
- cy: "50%",
239
- innerRadius: 52,
240
- outerRadius: 78,
241
- paddingAngle: 2,
242
- dataKey: "value",
243
- nameKey: "name",
244
- isAnimationActive: true,
245
- children: returnsExchangesData.map((entry, index) => /* @__PURE__ */ jsxRuntime.jsx(recharts.Cell, { fill: entry.color }, `cell-re-${index}`))
246
- }
247
- ),
248
- /* @__PURE__ */ jsxRuntime.jsx(recharts.Tooltip, { formatter: (value) => [value ?? 0, "Count"] }),
249
- /* @__PURE__ */ jsxRuntime.jsx(recharts.Legend, { verticalAlign: "bottom", height: 36 })
250
- ] }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-[280px] text-ui-fg-muted text-sm", children: "No returns or exchanges in this period" })
251
- ] })
223
+ ] }) }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-muted text-sm", children: "No orders in this period" }) })
224
+ ] }),
225
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0 flex flex-col", style: { minWidth: "280px" }, children: [
226
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h3", className: "mb-3", children: "Returns & exchanges" }),
227
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-h-[280px] flex items-center justify-center", children: returnsExchangesData.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: 280, children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.PieChart, { margin: { top: 8, right: 8, bottom: 8, left: 8 }, children: [
228
+ /* @__PURE__ */ jsxRuntime.jsx(
229
+ recharts.Pie,
230
+ {
231
+ data: returnsExchangesData,
232
+ cx: "50%",
233
+ cy: "50%",
234
+ innerRadius: 52,
235
+ outerRadius: 78,
236
+ paddingAngle: 2,
237
+ dataKey: "value",
238
+ nameKey: "name",
239
+ isAnimationActive: true,
240
+ children: returnsExchangesData.map((entry, index) => /* @__PURE__ */ jsxRuntime.jsx(recharts.Cell, { fill: entry.color }, `cell-re-${index}`))
241
+ }
242
+ ),
243
+ /* @__PURE__ */ jsxRuntime.jsx(recharts.Tooltip, { formatter: (value) => [value ?? 0, "Count"] }),
244
+ /* @__PURE__ */ jsxRuntime.jsx(recharts.Legend, { verticalAlign: "bottom", height: 36 })
245
+ ] }) }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-muted text-sm", children: "No returns or exchanges in this period" }) })
252
246
  ] })
253
- ] }),
247
+ ] }) }),
254
248
  /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "p-6", children: [
255
249
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 mb-4", children: [
256
250
  /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h3", children: "Orders over time" }),
@@ -591,19 +585,17 @@ const ANALYTICS_MODULES = [
591
585
  const AnalyticsPage = () => {
592
586
  const [activeModule, setActiveModule] = react.useState("orders");
593
587
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full bg-ui-bg-base", children: /* @__PURE__ */ jsxRuntime.jsx("main", { className: "flex-1 overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "divide-y p-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-6 px-6", children: [
594
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 mb-6", children: [
595
- /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", children: "Analytics" }),
596
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: ANALYTICS_MODULES.map((m) => /* @__PURE__ */ jsxRuntime.jsx(
597
- ui.Button,
598
- {
599
- variant: activeModule === m.id ? "secondary" : "transparent",
600
- size: "small",
601
- onClick: () => setActiveModule(m.id),
602
- children: m.label
603
- },
604
- m.id
605
- )) })
606
- ] }),
588
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", className: "mb-4", children: "Analytics" }),
589
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 mb-6", children: ANALYTICS_MODULES.map((m) => /* @__PURE__ */ jsxRuntime.jsx(
590
+ ui.Button,
591
+ {
592
+ variant: activeModule === m.id ? "secondary" : "transparent",
593
+ size: "small",
594
+ onClick: () => setActiveModule(m.id),
595
+ children: m.label
596
+ },
597
+ m.id
598
+ )) }),
607
599
  activeModule === "orders" && /* @__PURE__ */ jsxRuntime.jsx(OrdersDashboard, {}),
608
600
  activeModule === "customers" && /* @__PURE__ */ jsxRuntime.jsx(CustomersDashboard, {})
609
601
  ] }) }) }) });
@@ -39,18 +39,13 @@ function OrdersOverTimeTooltip({
39
39
  }
40
40
  const STATUS_COLORS = {
41
41
  pending: "#F59E0B",
42
- confirmed: "#3B82F6",
43
- processing: "#8B5CF6",
44
- shipped: "#06B6D4",
45
- delivered: "#10B981",
46
- cancelled: "#EF4444"
42
+ cancelled: "#EF4444",
43
+ delivered: "#10B981"
47
44
  };
48
45
  const ORDER_CHART_STATUSES = [
49
46
  { key: "pending", label: "Pending", color: STATUS_COLORS.pending },
50
- { key: "confirmed", label: "Confirmed", color: STATUS_COLORS.confirmed },
51
- { key: "processing", label: "Processing", color: STATUS_COLORS.processing },
52
- { key: "fulfilled", label: "Fulfilled", color: "#10B981" },
53
- { key: "cancelled", label: "Cancelled", color: STATUS_COLORS.cancelled }
47
+ { key: "cancelled", label: "Cancelled", color: STATUS_COLORS.cancelled },
48
+ { key: "delivered", label: "Delivered", color: STATUS_COLORS.delivered }
54
49
  ];
55
50
  function formatCurrency(value) {
56
51
  return new Intl.NumberFormat("en-IN", {
@@ -132,9 +127,8 @@ function OrdersDashboard() {
132
127
  if (error || !data) {
133
128
  return /* @__PURE__ */ jsx(Container, { className: "p-6", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-danger", children: error ?? "Failed to load analytics" }) });
134
129
  }
135
- const fulfilledCount = (data.statusCounts.shipped ?? 0) + (data.statusCounts.delivered ?? 0);
136
130
  const pieData = ORDER_CHART_STATUSES.map(({ key, label, color }) => {
137
- const value = key === "fulfilled" ? fulfilledCount : data.statusCounts[key] ?? 0;
131
+ const value = key === "delivered" ? data.statusCounts.delivered ?? data.deliveredOrders ?? 0 : key === "cancelled" ? data.statusCounts.cancelled ?? data.cancelledOrders ?? 0 : data.statusCounts.pending ?? data.pendingOrders ?? 0;
138
132
  return { name: label, value, color };
139
133
  }).filter((d) => d.value > 0);
140
134
  const returnsExchangesData = [
@@ -204,10 +198,10 @@ function OrdersDashboard() {
204
198
  /* @__PURE__ */ jsx(Heading, { level: "h2", children: data.returnOrders.toLocaleString() })
205
199
  ] })
206
200
  ] }),
207
- /* @__PURE__ */ jsxs(Container, { className: "p-6", children: [
208
- /* @__PURE__ */ jsx(Heading, { level: "h3", className: "mb-4", children: "Orders by status" }),
209
- /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-8 items-start", children: [
210
- /* @__PURE__ */ jsx("div", { className: "min-h-[300px] flex flex-col overflow-visible", style: { padding: "20px 24px" }, children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: 280, children: /* @__PURE__ */ jsxs(PieChart, { margin: { top: 16, right: 24, bottom: 16, left: 24 }, children: [
201
+ /* @__PURE__ */ jsx(Container, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row flex-wrap gap-6 items-stretch", children: [
202
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0 flex flex-col", style: { minWidth: "280px" }, children: [
203
+ /* @__PURE__ */ jsx(Heading, { level: "h3", className: "mb-3", children: "Orders by status" }),
204
+ /* @__PURE__ */ jsx("div", { className: "flex-1 min-h-[280px] flex items-center justify-center", children: pieData.length > 0 ? /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: 280, children: /* @__PURE__ */ jsxs(PieChart, { margin: { top: 8, right: 8, bottom: 8, left: 8 }, children: [
211
205
  /* @__PURE__ */ jsx(
212
206
  Pie,
213
207
  {
@@ -225,31 +219,31 @@ function OrdersDashboard() {
225
219
  ),
226
220
  /* @__PURE__ */ jsx(Tooltip, { formatter: (value) => [value ?? 0, "Orders"] }),
227
221
  /* @__PURE__ */ jsx(Legend, { verticalAlign: "bottom", height: 36 })
228
- ] }) }) }),
229
- /* @__PURE__ */ jsxs("div", { className: "min-h-[300px] flex flex-col overflow-visible", style: { padding: "20px 24px" }, children: [
230
- /* @__PURE__ */ jsx("p", { className: "text-ui-fg-subtle mb-3 text-sm font-medium", children: "Returns & exchanges" }),
231
- returnsExchangesData.length > 0 ? /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: 280, children: /* @__PURE__ */ jsxs(PieChart, { margin: { top: 16, right: 24, bottom: 16, left: 24 }, children: [
232
- /* @__PURE__ */ jsx(
233
- Pie,
234
- {
235
- data: returnsExchangesData,
236
- cx: "50%",
237
- cy: "50%",
238
- innerRadius: 52,
239
- outerRadius: 78,
240
- paddingAngle: 2,
241
- dataKey: "value",
242
- nameKey: "name",
243
- isAnimationActive: true,
244
- children: returnsExchangesData.map((entry, index) => /* @__PURE__ */ jsx(Cell, { fill: entry.color }, `cell-re-${index}`))
245
- }
246
- ),
247
- /* @__PURE__ */ jsx(Tooltip, { formatter: (value) => [value ?? 0, "Count"] }),
248
- /* @__PURE__ */ jsx(Legend, { verticalAlign: "bottom", height: 36 })
249
- ] }) }) : /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-[280px] text-ui-fg-muted text-sm", children: "No returns or exchanges in this period" })
250
- ] })
222
+ ] }) }) : /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-muted text-sm", children: "No orders in this period" }) })
223
+ ] }),
224
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0 flex flex-col", style: { minWidth: "280px" }, children: [
225
+ /* @__PURE__ */ jsx(Heading, { level: "h3", className: "mb-3", children: "Returns & exchanges" }),
226
+ /* @__PURE__ */ jsx("div", { className: "flex-1 min-h-[280px] flex items-center justify-center", children: returnsExchangesData.length > 0 ? /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: 280, children: /* @__PURE__ */ jsxs(PieChart, { margin: { top: 8, right: 8, bottom: 8, left: 8 }, children: [
227
+ /* @__PURE__ */ jsx(
228
+ Pie,
229
+ {
230
+ data: returnsExchangesData,
231
+ cx: "50%",
232
+ cy: "50%",
233
+ innerRadius: 52,
234
+ outerRadius: 78,
235
+ paddingAngle: 2,
236
+ dataKey: "value",
237
+ nameKey: "name",
238
+ isAnimationActive: true,
239
+ children: returnsExchangesData.map((entry, index) => /* @__PURE__ */ jsx(Cell, { fill: entry.color }, `cell-re-${index}`))
240
+ }
241
+ ),
242
+ /* @__PURE__ */ jsx(Tooltip, { formatter: (value) => [value ?? 0, "Count"] }),
243
+ /* @__PURE__ */ jsx(Legend, { verticalAlign: "bottom", height: 36 })
244
+ ] }) }) : /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-muted text-sm", children: "No returns or exchanges in this period" }) })
251
245
  ] })
252
- ] }),
246
+ ] }) }),
253
247
  /* @__PURE__ */ jsxs(Container, { className: "p-6", children: [
254
248
  /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 mb-4", children: [
255
249
  /* @__PURE__ */ jsx(Heading, { level: "h3", children: "Orders over time" }),
@@ -590,19 +584,17 @@ const ANALYTICS_MODULES = [
590
584
  const AnalyticsPage = () => {
591
585
  const [activeModule, setActiveModule] = useState("orders");
592
586
  return /* @__PURE__ */ jsx("div", { className: "flex h-full bg-ui-bg-base", children: /* @__PURE__ */ jsx("main", { className: "flex-1 overflow-auto", children: /* @__PURE__ */ jsx(Container, { className: "divide-y p-0", children: /* @__PURE__ */ jsxs("div", { className: "py-6 px-6", children: [
593
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 mb-6", children: [
594
- /* @__PURE__ */ jsx(Heading, { level: "h1", children: "Analytics" }),
595
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: ANALYTICS_MODULES.map((m) => /* @__PURE__ */ jsx(
596
- Button,
597
- {
598
- variant: activeModule === m.id ? "secondary" : "transparent",
599
- size: "small",
600
- onClick: () => setActiveModule(m.id),
601
- children: m.label
602
- },
603
- m.id
604
- )) })
605
- ] }),
587
+ /* @__PURE__ */ jsx(Heading, { level: "h1", className: "mb-4", children: "Analytics" }),
588
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 mb-6", children: ANALYTICS_MODULES.map((m) => /* @__PURE__ */ jsx(
589
+ Button,
590
+ {
591
+ variant: activeModule === m.id ? "secondary" : "transparent",
592
+ size: "small",
593
+ onClick: () => setActiveModule(m.id),
594
+ children: m.label
595
+ },
596
+ m.id
597
+ )) }),
606
598
  activeModule === "orders" && /* @__PURE__ */ jsx(OrdersDashboard, {}),
607
599
  activeModule === "customers" && /* @__PURE__ */ jsx(CustomersDashboard, {})
608
600
  ] }) }) }) });
@@ -2,28 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GET = GET;
4
4
  const utils_1 = require("@medusajs/framework/utils");
5
- /** Status buckets used for Orders by status pie chart */
6
- const STATUS_BUCKETS = [
7
- "pending",
8
- "confirmed",
9
- "processing",
10
- "shipped",
11
- "delivered",
12
- "cancelled",
13
- ];
14
- function normalizeStatus(status) {
15
- if (!status || typeof status !== "string")
5
+ /** Only three status buckets: pending, cancelled, delivered */
6
+ const STATUS_BUCKETS = ["pending", "cancelled", "delivered"];
7
+ function toSimpleStatus(status) {
8
+ if (status === undefined || status === null || typeof status !== "string")
16
9
  return "pending";
17
- const s = status.toLowerCase();
10
+ const s = String(status).trim().toLowerCase();
18
11
  if (s === "canceled" || s === "cancelled")
19
12
  return "cancelled";
20
- if (STATUS_BUCKETS.includes(s))
21
- return s;
13
+ // Medusa "completed" = delivered; also support "fulfilled" / "delivered" if used by custom flows
14
+ if (s === "completed" || s === "fulfilled" || s === "delivered")
15
+ return "delivered";
22
16
  return "pending";
23
17
  }
24
18
  function isPendingStatus(status) {
25
- const normalized = normalizeStatus(status);
26
- return normalized !== "delivered" && normalized !== "cancelled";
19
+ return toSimpleStatus(status) === "pending";
27
20
  }
28
21
  const MIN_DAYS = 1;
29
22
  const MAX_DAYS = 365;
@@ -105,14 +98,15 @@ async function GET(req, res) {
105
98
  if (!inRange)
106
99
  continue;
107
100
  const status = o.status;
108
- const normalized = normalizeStatus(status);
109
- statusCounts[normalized] = (statusCounts[normalized] ?? 0) + 1;
101
+ const simple = toSimpleStatus(status);
102
+ statusCounts[simple] = (statusCounts[simple] ?? 0) + 1;
110
103
  totalOrders += 1;
111
104
  if (typeof o.id === "string" && o.id) {
112
105
  orderIdsInRange.add(o.id);
113
106
  }
107
+ const fulfillments = o.fulfillments ?? [];
114
108
  // Total revenue and AOV: only include non-cancelled orders
115
- if (normalized !== "cancelled") {
109
+ if (simple !== "cancelled") {
116
110
  const total = typeof o.total === "number" ? o.total : 0;
117
111
  totalRevenue += total;
118
112
  nonCancelledCount += 1;
@@ -121,7 +115,6 @@ async function GET(req, res) {
121
115
  ordersTodayCount += 1;
122
116
  if (isPendingStatus(status))
123
117
  pendingOrders += 1;
124
- const fulfillments = o.fulfillments ?? [];
125
118
  for (const f of fulfillments) {
126
119
  const shippedAt = toValidDate(f.shipped_at);
127
120
  if (shippedAt && createdAt) {
@@ -138,6 +131,13 @@ async function GET(req, res) {
138
131
  }
139
132
  const cancelledOrders = Math.floor(statusCounts.cancelled ?? 0);
140
133
  const deliveredOrders = Math.floor(statusCounts.delivered ?? 0);
134
+ const pendingOrdersCount = Math.floor(statusCounts.pending ?? 0);
135
+ // Ensure statusCounts matches KPI values so chart and cards stay in sync
136
+ const finalStatusCounts = {
137
+ pending: pendingOrdersCount,
138
+ cancelled: cancelledOrders,
139
+ delivered: deliveredOrders,
140
+ };
141
141
  let exchangeOrders = 0;
142
142
  let returnOrders = 0;
143
143
  if (orderIdsInRange.size > 0) {
@@ -181,7 +181,7 @@ async function GET(req, res) {
181
181
  exchangeOrders: Math.floor(exchangeOrders),
182
182
  returnOrders: Math.floor(returnOrders),
183
183
  avgFulfillmentTimeHours,
184
- statusCounts,
184
+ statusCounts: finalStatusCounts,
185
185
  };
186
186
  res.json(body);
187
187
  }
@@ -193,4 +193,4 @@ async function GET(req, res) {
193
193
  });
194
194
  }
195
195
  }
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FuYWx5dGljcy9vcmRlcnMtc3VtbWFyeS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStEQSxrQkE2TEM7QUF0UEQscURBSWtDO0FBSWxDLHlEQUF5RDtBQUN6RCxNQUFNLGNBQWMsR0FBRztJQUNyQixTQUFTO0lBQ1QsV0FBVztJQUNYLFlBQVk7SUFDWixTQUFTO0lBQ1QsV0FBVztJQUNYLFdBQVc7Q0FDSCxDQUFBO0FBRVYsU0FBUyxlQUFlLENBQUMsTUFBMEI7SUFDakQsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzlCLElBQUksQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLEtBQUssV0FBVztRQUFFLE9BQU8sV0FBVyxDQUFBO0lBQzdELElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFvQyxDQUFDO1FBQUUsT0FBTyxDQUFvQyxDQUFBO0lBQzlHLE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxNQUEwQjtJQUNqRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUMsT0FBTyxVQUFVLEtBQUssV0FBVyxJQUFJLFVBQVUsS0FBSyxXQUFXLENBQUE7QUFDakUsQ0FBQztBQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQTtBQUNsQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUE7QUFFcEIsU0FBUyxTQUFTLENBQUMsQ0FBTztJQUN4QixPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3JDLENBQUM7QUFFRCxTQUFTLGNB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
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FuYWx5dGljcy9vcmRlcnMtc3VtbWFyeS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdEQSxrQkFxTUM7QUF2UEQscURBSWtDO0FBSWxDLCtEQUErRDtBQUMvRCxNQUFNLGNBQWMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFVLENBQUE7QUFFckUsU0FBUyxjQUFjLENBQUMsTUFBMEI7SUFDaEQsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQzNGLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUM3QyxJQUFJLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLFdBQVc7UUFBRSxPQUFPLFdBQVcsQ0FBQTtJQUM3RCxpR0FBaUc7SUFDakcsSUFBSSxDQUFDLEtBQUssV0FBVyxJQUFJLENBQUMsS0FBSyxXQUFXLElBQUksQ0FBQyxLQUFLLFdBQVc7UUFBRSxPQUFPLFdBQVcsQ0FBQTtJQUNuRixPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsTUFBMEI7SUFDakQsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFBO0FBQzdDLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUE7QUFDbEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFBO0FBRXBCLFNBQVMsU0FBUyxDQUFDLENBQU87SUFDeEIsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNyQyxDQUFDO0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusa-analytics",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",