medusa-analytics 0.0.22 → 0.0.23
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.
|
@@ -303,15 +303,66 @@ function formatShortNumber$1(value) {
|
|
|
303
303
|
}).format(value);
|
|
304
304
|
}
|
|
305
305
|
const SALES_GRANULARITY_TABS = [
|
|
306
|
-
{ value: "day", label: "Day" },
|
|
307
306
|
{ value: "hour", label: "Hour" },
|
|
307
|
+
{ value: "day", label: "Day" },
|
|
308
308
|
{ value: "week", label: "Week" },
|
|
309
309
|
{ value: "month", label: "Month" }
|
|
310
310
|
];
|
|
311
|
+
function getSalesBreakdownOtPeriod(g) {
|
|
312
|
+
if (g === "day") return "one_week";
|
|
313
|
+
if (g === "week") return "two_months";
|
|
314
|
+
if (g === "month") return "one_year";
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
311
317
|
function monthKeyFromDateStr(dateStr) {
|
|
312
318
|
if (dateStr.length >= 7) return dateStr.slice(0, 7);
|
|
313
319
|
return dateStr;
|
|
314
320
|
}
|
|
321
|
+
function utcSundayWeekStartKeyFromDateStr(dateStr) {
|
|
322
|
+
const parsed = new Date(dateStr);
|
|
323
|
+
if (Number.isNaN(parsed.getTime())) return dateStr;
|
|
324
|
+
const y = parsed.getUTCFullYear();
|
|
325
|
+
const m = parsed.getUTCMonth();
|
|
326
|
+
const day = parsed.getUTCDate();
|
|
327
|
+
const dow = parsed.getUTCDay();
|
|
328
|
+
const start = new Date(Date.UTC(y, m, day - dow));
|
|
329
|
+
const ys = start.getUTCFullYear();
|
|
330
|
+
const ms = String(start.getUTCMonth() + 1).padStart(2, "0");
|
|
331
|
+
const ds = String(start.getUTCDate()).padStart(2, "0");
|
|
332
|
+
return `${ys}-${ms}-${ds}`;
|
|
333
|
+
}
|
|
334
|
+
function formatWeekStartDm(weekStartKey) {
|
|
335
|
+
const parsed = /* @__PURE__ */ new Date(`${weekStartKey}T00:00:00.000Z`);
|
|
336
|
+
if (Number.isNaN(parsed.getTime())) return weekStartKey;
|
|
337
|
+
return `${parsed.getUTCDate()}/${parsed.getUTCMonth() + 1}`;
|
|
338
|
+
}
|
|
339
|
+
function formatDayBreakdownDm(dateStr) {
|
|
340
|
+
const parsed = new Date(dateStr);
|
|
341
|
+
if (Number.isNaN(parsed.getTime())) return dateStr;
|
|
342
|
+
return `${parsed.getUTCDate()}/${parsed.getUTCMonth() + 1}`;
|
|
343
|
+
}
|
|
344
|
+
function toDateKeyUtcFromDate(d) {
|
|
345
|
+
const y = d.getUTCFullYear();
|
|
346
|
+
const m = String(d.getUTCMonth() + 1).padStart(2, "0");
|
|
347
|
+
const day = String(d.getUTCDate()).padStart(2, "0");
|
|
348
|
+
return `${y}-${m}-${day}`;
|
|
349
|
+
}
|
|
350
|
+
function lastNWeekStartKeysUtc(n) {
|
|
351
|
+
const now = /* @__PURE__ */ new Date();
|
|
352
|
+
const todayUtc = new Date(
|
|
353
|
+
Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate())
|
|
354
|
+
);
|
|
355
|
+
const dow = todayUtc.getUTCDay();
|
|
356
|
+
const currentWeekStart = new Date(todayUtc);
|
|
357
|
+
currentWeekStart.setUTCDate(currentWeekStart.getUTCDate() - dow);
|
|
358
|
+
const keys = [];
|
|
359
|
+
for (let i = n - 1; i >= 0; i -= 1) {
|
|
360
|
+
const d = new Date(currentWeekStart);
|
|
361
|
+
d.setUTCDate(d.getUTCDate() - 7 * i);
|
|
362
|
+
keys.push(toDateKeyUtcFromDate(d));
|
|
363
|
+
}
|
|
364
|
+
return keys;
|
|
365
|
+
}
|
|
315
366
|
function formatMonthBucketLabel(ymKey) {
|
|
316
367
|
const [ys, ms] = ymKey.split("-");
|
|
317
368
|
const y = Number(ys);
|
|
@@ -319,27 +370,9 @@ function formatMonthBucketLabel(ymKey) {
|
|
|
319
370
|
if (!Number.isFinite(y) || !Number.isFinite(m)) return ymKey;
|
|
320
371
|
return new Intl.DateTimeFormat("en-IN", {
|
|
321
372
|
month: "short",
|
|
322
|
-
year: "numeric",
|
|
323
373
|
timeZone: "UTC"
|
|
324
374
|
}).format(new Date(Date.UTC(y, m - 1, 1)));
|
|
325
375
|
}
|
|
326
|
-
function aggregateDailyOrdersForBreakdown(rows, keyFn, labelFn) {
|
|
327
|
-
const map = /* @__PURE__ */ new Map();
|
|
328
|
-
for (const d of rows) {
|
|
329
|
-
const key = keyFn(d);
|
|
330
|
-
const cur = map.get(key) ?? { orders: 0, revenue: 0, bucketRows: [] };
|
|
331
|
-
cur.orders += d.orders_count;
|
|
332
|
-
cur.revenue += d.total_revenue;
|
|
333
|
-
cur.bucketRows.push(d);
|
|
334
|
-
map.set(key, cur);
|
|
335
|
-
}
|
|
336
|
-
return Array.from(map.entries()).sort(([a], [b]) => a.localeCompare(b)).map(([key, v]) => ({
|
|
337
|
-
key,
|
|
338
|
-
label: labelFn(key, v.bucketRows),
|
|
339
|
-
orders_count: v.orders,
|
|
340
|
-
revenue: v.revenue
|
|
341
|
-
}));
|
|
342
|
-
}
|
|
343
376
|
function isSalesBreakdownBarRow(value) {
|
|
344
377
|
if (typeof value !== "object" || value === null) return false;
|
|
345
378
|
const v = value;
|
|
@@ -535,6 +568,81 @@ function OrdersDashboard() {
|
|
|
535
568
|
const [todayContextLoading, setTodayContextLoading] = react.useState(true);
|
|
536
569
|
const [todayContextError, setTodayContextError] = react.useState(null);
|
|
537
570
|
const [salesGranularity, setSalesGranularity] = react.useState("day");
|
|
571
|
+
const [salesBreakdownDaily, setSalesBreakdownDaily] = react.useState(
|
|
572
|
+
[]
|
|
573
|
+
);
|
|
574
|
+
const [salesBreakdownOtLoading, setSalesBreakdownOtLoading] = react.useState(true);
|
|
575
|
+
const [salesBreakdownOtError, setSalesBreakdownOtError] = react.useState(null);
|
|
576
|
+
const [salesBreakdownHourlyRolling, setSalesBreakdownHourlyRolling] = react.useState([]);
|
|
577
|
+
const [salesBreakdownHourlyLoading, setSalesBreakdownHourlyLoading] = react.useState(false);
|
|
578
|
+
const [salesBreakdownHourlyError, setSalesBreakdownHourlyError] = react.useState(null);
|
|
579
|
+
const salesBreakdownOtPeriod = react.useMemo(
|
|
580
|
+
() => getSalesBreakdownOtPeriod(salesGranularity),
|
|
581
|
+
[salesGranularity]
|
|
582
|
+
);
|
|
583
|
+
react.useEffect(() => {
|
|
584
|
+
if (salesBreakdownOtPeriod === null) {
|
|
585
|
+
setSalesBreakdownDaily([]);
|
|
586
|
+
setSalesBreakdownOtLoading(false);
|
|
587
|
+
setSalesBreakdownOtError(null);
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
let cancelled = false;
|
|
591
|
+
setSalesBreakdownOtLoading(true);
|
|
592
|
+
setSalesBreakdownOtError(null);
|
|
593
|
+
fetch(
|
|
594
|
+
`/admin/analytics/orders-over-time?period=${salesBreakdownOtPeriod}`,
|
|
595
|
+
{ credentials: "include" }
|
|
596
|
+
).then((res) => {
|
|
597
|
+
if (!res.ok) throw new Error(res.statusText);
|
|
598
|
+
return res.json();
|
|
599
|
+
}).then((body) => {
|
|
600
|
+
if (!cancelled) {
|
|
601
|
+
setSalesBreakdownDaily(body.dailyOrders ?? []);
|
|
602
|
+
}
|
|
603
|
+
}).catch((e) => {
|
|
604
|
+
if (!cancelled) {
|
|
605
|
+
setSalesBreakdownOtError(e instanceof Error ? e.message : String(e));
|
|
606
|
+
}
|
|
607
|
+
}).finally(() => {
|
|
608
|
+
if (!cancelled) setSalesBreakdownOtLoading(false);
|
|
609
|
+
});
|
|
610
|
+
return () => {
|
|
611
|
+
cancelled = true;
|
|
612
|
+
};
|
|
613
|
+
}, [salesBreakdownOtPeriod]);
|
|
614
|
+
react.useEffect(() => {
|
|
615
|
+
if (salesGranularity !== "hour") {
|
|
616
|
+
setSalesBreakdownHourlyRolling([]);
|
|
617
|
+
setSalesBreakdownHourlyLoading(false);
|
|
618
|
+
setSalesBreakdownHourlyError(null);
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
621
|
+
let cancelled = false;
|
|
622
|
+
setSalesBreakdownHourlyLoading(true);
|
|
623
|
+
setSalesBreakdownHourlyError(null);
|
|
624
|
+
fetch("/admin/analytics/orders-insights?last_hours=24", {
|
|
625
|
+
credentials: "include"
|
|
626
|
+
}).then((res) => {
|
|
627
|
+
if (!res.ok) throw new Error(res.statusText);
|
|
628
|
+
return res.json();
|
|
629
|
+
}).then((body) => {
|
|
630
|
+
if (!cancelled) {
|
|
631
|
+
setSalesBreakdownHourlyRolling(body.hourly_rolling ?? []);
|
|
632
|
+
}
|
|
633
|
+
}).catch((e) => {
|
|
634
|
+
if (!cancelled) {
|
|
635
|
+
setSalesBreakdownHourlyError(
|
|
636
|
+
e instanceof Error ? e.message : String(e)
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
}).finally(() => {
|
|
640
|
+
if (!cancelled) setSalesBreakdownHourlyLoading(false);
|
|
641
|
+
});
|
|
642
|
+
return () => {
|
|
643
|
+
cancelled = true;
|
|
644
|
+
};
|
|
645
|
+
}, [salesGranularity]);
|
|
538
646
|
react.useEffect(() => {
|
|
539
647
|
let cancelled = false;
|
|
540
648
|
setLoading(true);
|
|
@@ -721,68 +829,73 @@ function OrdersDashboard() {
|
|
|
721
829
|
};
|
|
722
830
|
});
|
|
723
831
|
}, [dailyOrders, previousPeriodDailyOrders]);
|
|
724
|
-
const hourlyChartRows = react.useMemo(() => {
|
|
725
|
-
if (!ordersInsights) return [];
|
|
726
|
-
return ordersInsights.byHour.map((h) => ({
|
|
727
|
-
label: `${String(h.hour).padStart(2, "0")}:00`,
|
|
728
|
-
hour: h.hour,
|
|
729
|
-
orders_count: h.orders_count,
|
|
730
|
-
revenue: h.revenue
|
|
731
|
-
}));
|
|
732
|
-
}, [ordersInsights]);
|
|
733
832
|
const salesBreakdownChartRows = react.useMemo(() => {
|
|
734
833
|
if (salesGranularity === "hour") {
|
|
735
|
-
return
|
|
736
|
-
key: `
|
|
737
|
-
label:
|
|
738
|
-
orders_count:
|
|
739
|
-
revenue:
|
|
834
|
+
return salesBreakdownHourlyRolling.map((b, i) => ({
|
|
835
|
+
key: `rolling-${i}`,
|
|
836
|
+
label: b.label,
|
|
837
|
+
orders_count: b.orders_count,
|
|
838
|
+
revenue: b.revenue
|
|
740
839
|
}));
|
|
741
840
|
}
|
|
742
841
|
if (salesGranularity === "week") {
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
842
|
+
const targetKeys = lastNWeekStartKeysUtc(7);
|
|
843
|
+
const agg = /* @__PURE__ */ new Map();
|
|
844
|
+
for (const d of salesBreakdownDaily) {
|
|
845
|
+
const wk = utcSundayWeekStartKeyFromDateStr(d.date);
|
|
846
|
+
const cur = agg.get(wk) ?? { orders: 0, revenue: 0 };
|
|
847
|
+
cur.orders += d.orders_count;
|
|
848
|
+
cur.revenue += d.total_revenue;
|
|
849
|
+
agg.set(wk, cur);
|
|
850
|
+
}
|
|
851
|
+
return targetKeys.map((key) => {
|
|
852
|
+
var _a2, _b2;
|
|
853
|
+
return {
|
|
854
|
+
key,
|
|
855
|
+
label: formatWeekStartDm(key),
|
|
856
|
+
orders_count: ((_a2 = agg.get(key)) == null ? void 0 : _a2.orders) ?? 0,
|
|
857
|
+
revenue: ((_b2 = agg.get(key)) == null ? void 0 : _b2.revenue) ?? 0
|
|
858
|
+
};
|
|
859
|
+
});
|
|
750
860
|
}
|
|
751
861
|
if (salesGranularity === "month") {
|
|
752
|
-
return
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
862
|
+
return salesBreakdownDaily.map((d) => ({
|
|
863
|
+
key: d.date,
|
|
864
|
+
label: d.label ?? formatMonthBucketLabel(monthKeyFromDateStr(d.date)),
|
|
865
|
+
orders_count: d.orders_count,
|
|
866
|
+
revenue: d.total_revenue
|
|
867
|
+
}));
|
|
757
868
|
}
|
|
758
|
-
return
|
|
869
|
+
return salesBreakdownDaily.map((d) => ({
|
|
759
870
|
key: d.date,
|
|
760
|
-
label:
|
|
871
|
+
label: formatDayBreakdownDm(d.date),
|
|
761
872
|
orders_count: d.orders_count,
|
|
762
873
|
revenue: d.total_revenue
|
|
763
874
|
}));
|
|
764
|
-
}, [
|
|
875
|
+
}, [
|
|
876
|
+
salesGranularity,
|
|
877
|
+
salesBreakdownDaily,
|
|
878
|
+
salesBreakdownHourlyRolling
|
|
879
|
+
]);
|
|
765
880
|
const salesBreakdownDescription = react.useMemo(() => {
|
|
766
|
-
var _a2;
|
|
767
|
-
const rangeLabel = ((_a2 = OVER_TIME_PERIODS.find((p) => p.value === overTimePeriod)) == null ? void 0 : _a2.label) ?? "selected range";
|
|
768
|
-
const insightsHint = `Order-time breakdown uses last ${insightsWindowDays} days (UTC).`;
|
|
769
881
|
switch (salesGranularity) {
|
|
770
|
-
case "day":
|
|
771
|
-
return `Revenue by calendar day for ${rangeLabel} (aligned with Revenue & orders).`;
|
|
772
882
|
case "hour":
|
|
773
|
-
return
|
|
883
|
+
return "Last 24 hours from now (UTC): one bar per clock hour in the rolling window.";
|
|
884
|
+
case "day":
|
|
885
|
+
return "Last 7 calendar days (UTC), one bar per day — axis day/month.";
|
|
774
886
|
case "week":
|
|
775
|
-
return
|
|
887
|
+
return "Last 7 weeks (UTC, weeks start Sunday); axis shows each week’s start as day/month.";
|
|
776
888
|
case "month":
|
|
777
|
-
return
|
|
889
|
+
return "Last 12 calendar months through the current month (UTC) — Jan, Feb, Mar, …";
|
|
778
890
|
default:
|
|
779
891
|
return "";
|
|
780
892
|
}
|
|
781
|
-
}, [salesGranularity
|
|
893
|
+
}, [salesGranularity]);
|
|
782
894
|
const salesBreakdownXAxisInterval = react.useMemo(() => {
|
|
783
895
|
const n = salesBreakdownChartRows.length;
|
|
784
896
|
if (salesGranularity === "hour") return 3;
|
|
785
|
-
if (salesGranularity === "day" && n > 24)
|
|
897
|
+
if (salesGranularity === "day" && n > 24)
|
|
898
|
+
return Math.max(0, Math.ceil(n / 10) - 1);
|
|
786
899
|
return 0;
|
|
787
900
|
}, [salesGranularity, salesBreakdownChartRows.length]);
|
|
788
901
|
const ordersVsDraftsPie = react.useMemo(() => {
|
|
@@ -861,20 +974,14 @@ function OrdersDashboard() {
|
|
|
861
974
|
if (error || !data) {
|
|
862
975
|
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" }) });
|
|
863
976
|
}
|
|
864
|
-
const
|
|
865
|
-
const
|
|
977
|
+
const salesBreakdownWaiting = salesGranularity === "hour" ? salesBreakdownHourlyLoading : salesBreakdownOtLoading;
|
|
978
|
+
const salesBreakdownFetchError = salesGranularity === "hour" ? salesBreakdownHourlyError : salesBreakdownOtError;
|
|
866
979
|
const salesBreakdownBody = (() => {
|
|
867
|
-
if (
|
|
980
|
+
if (salesBreakdownWaiting) {
|
|
868
981
|
return /* @__PURE__ */ jsxRuntime.jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center py-6", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-muted text-xs", children: "Loading chart…" }) }) });
|
|
869
982
|
}
|
|
870
|
-
if (
|
|
871
|
-
return /* @__PURE__ */ jsxRuntime.jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center px-2 py-6", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-danger text-center text-xs", children:
|
|
872
|
-
}
|
|
873
|
-
if (needsSalesInsights && insightsLoading) {
|
|
874
|
-
return /* @__PURE__ */ jsxRuntime.jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center py-6", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-muted text-xs", children: "Loading chart…" }) }) });
|
|
875
|
-
}
|
|
876
|
-
if (needsSalesInsights && insightsError) {
|
|
877
|
-
return /* @__PURE__ */ jsxRuntime.jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center px-2 py-6", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-danger text-center text-xs", children: insightsError }) }) });
|
|
983
|
+
if (salesBreakdownFetchError) {
|
|
984
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center px-2 py-6", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-danger text-center text-xs", children: salesBreakdownFetchError }) }) });
|
|
878
985
|
}
|
|
879
986
|
if (salesBreakdownChartRows.length === 0) {
|
|
880
987
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1835,29 +1942,32 @@ function OrdersDashboard() {
|
|
|
1835
1942
|
title: "Sales breakdown",
|
|
1836
1943
|
description: salesBreakdownDescription,
|
|
1837
1944
|
actionsBare: true,
|
|
1838
|
-
actions: /* @__PURE__ */ jsxRuntime.
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1945
|
+
actions: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-stretch gap-1 sm:flex-row sm:items-center sm:gap-2", children: [
|
|
1946
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1947
|
+
ui.Label,
|
|
1948
|
+
{
|
|
1949
|
+
htmlFor: "sales-breakdown-granularity",
|
|
1950
|
+
className: "shrink-0 text-ui-fg-muted text-xs font-medium",
|
|
1951
|
+
children: "Breakdown"
|
|
1952
|
+
}
|
|
1953
|
+
),
|
|
1954
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1955
|
+
"select",
|
|
1956
|
+
{
|
|
1957
|
+
id: "sales-breakdown-granularity",
|
|
1958
|
+
value: salesGranularity,
|
|
1959
|
+
onChange: (e) => {
|
|
1960
|
+
const v = e.target.value;
|
|
1961
|
+
if (v === "hour" || v === "day" || v === "week" || v === "month") {
|
|
1962
|
+
setSalesGranularity(v);
|
|
1963
|
+
}
|
|
1964
|
+
},
|
|
1965
|
+
className: SELECT_CLASS_NAME$2,
|
|
1966
|
+
"aria-label": "Sales breakdown time bucket",
|
|
1967
|
+
children: SALES_GRANULARITY_TABS.map((tab) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: tab.value, children: tab.value === "hour" ? "Hour (last 24h)" : tab.value === "day" ? "Day (last 7 days)" : tab.value === "week" ? "Week (last 7 weeks)" : "Month (last 12 months)" }, tab.value))
|
|
1968
|
+
}
|
|
1969
|
+
)
|
|
1970
|
+
] }),
|
|
1861
1971
|
children: salesBreakdownBody
|
|
1862
1972
|
}
|
|
1863
1973
|
),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useState,
|
|
2
|
+
import { useState, useMemo, useEffect } from "react";
|
|
3
3
|
import { defineRouteConfig } from "@medusajs/admin-sdk";
|
|
4
4
|
import { CurrencyDollar, ShoppingCart, TruckFast, Cash, UsersSolid, User, UserGroup, Trash, Tag, CubeSolid, ChartBar } from "@medusajs/icons";
|
|
5
5
|
import { Container, Text, Heading, Label, Table } from "@medusajs/ui";
|
|
@@ -302,15 +302,66 @@ function formatShortNumber$1(value) {
|
|
|
302
302
|
}).format(value);
|
|
303
303
|
}
|
|
304
304
|
const SALES_GRANULARITY_TABS = [
|
|
305
|
-
{ value: "day", label: "Day" },
|
|
306
305
|
{ value: "hour", label: "Hour" },
|
|
306
|
+
{ value: "day", label: "Day" },
|
|
307
307
|
{ value: "week", label: "Week" },
|
|
308
308
|
{ value: "month", label: "Month" }
|
|
309
309
|
];
|
|
310
|
+
function getSalesBreakdownOtPeriod(g) {
|
|
311
|
+
if (g === "day") return "one_week";
|
|
312
|
+
if (g === "week") return "two_months";
|
|
313
|
+
if (g === "month") return "one_year";
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
310
316
|
function monthKeyFromDateStr(dateStr) {
|
|
311
317
|
if (dateStr.length >= 7) return dateStr.slice(0, 7);
|
|
312
318
|
return dateStr;
|
|
313
319
|
}
|
|
320
|
+
function utcSundayWeekStartKeyFromDateStr(dateStr) {
|
|
321
|
+
const parsed = new Date(dateStr);
|
|
322
|
+
if (Number.isNaN(parsed.getTime())) return dateStr;
|
|
323
|
+
const y = parsed.getUTCFullYear();
|
|
324
|
+
const m = parsed.getUTCMonth();
|
|
325
|
+
const day = parsed.getUTCDate();
|
|
326
|
+
const dow = parsed.getUTCDay();
|
|
327
|
+
const start = new Date(Date.UTC(y, m, day - dow));
|
|
328
|
+
const ys = start.getUTCFullYear();
|
|
329
|
+
const ms = String(start.getUTCMonth() + 1).padStart(2, "0");
|
|
330
|
+
const ds = String(start.getUTCDate()).padStart(2, "0");
|
|
331
|
+
return `${ys}-${ms}-${ds}`;
|
|
332
|
+
}
|
|
333
|
+
function formatWeekStartDm(weekStartKey) {
|
|
334
|
+
const parsed = /* @__PURE__ */ new Date(`${weekStartKey}T00:00:00.000Z`);
|
|
335
|
+
if (Number.isNaN(parsed.getTime())) return weekStartKey;
|
|
336
|
+
return `${parsed.getUTCDate()}/${parsed.getUTCMonth() + 1}`;
|
|
337
|
+
}
|
|
338
|
+
function formatDayBreakdownDm(dateStr) {
|
|
339
|
+
const parsed = new Date(dateStr);
|
|
340
|
+
if (Number.isNaN(parsed.getTime())) return dateStr;
|
|
341
|
+
return `${parsed.getUTCDate()}/${parsed.getUTCMonth() + 1}`;
|
|
342
|
+
}
|
|
343
|
+
function toDateKeyUtcFromDate(d) {
|
|
344
|
+
const y = d.getUTCFullYear();
|
|
345
|
+
const m = String(d.getUTCMonth() + 1).padStart(2, "0");
|
|
346
|
+
const day = String(d.getUTCDate()).padStart(2, "0");
|
|
347
|
+
return `${y}-${m}-${day}`;
|
|
348
|
+
}
|
|
349
|
+
function lastNWeekStartKeysUtc(n) {
|
|
350
|
+
const now = /* @__PURE__ */ new Date();
|
|
351
|
+
const todayUtc = new Date(
|
|
352
|
+
Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate())
|
|
353
|
+
);
|
|
354
|
+
const dow = todayUtc.getUTCDay();
|
|
355
|
+
const currentWeekStart = new Date(todayUtc);
|
|
356
|
+
currentWeekStart.setUTCDate(currentWeekStart.getUTCDate() - dow);
|
|
357
|
+
const keys = [];
|
|
358
|
+
for (let i = n - 1; i >= 0; i -= 1) {
|
|
359
|
+
const d = new Date(currentWeekStart);
|
|
360
|
+
d.setUTCDate(d.getUTCDate() - 7 * i);
|
|
361
|
+
keys.push(toDateKeyUtcFromDate(d));
|
|
362
|
+
}
|
|
363
|
+
return keys;
|
|
364
|
+
}
|
|
314
365
|
function formatMonthBucketLabel(ymKey) {
|
|
315
366
|
const [ys, ms] = ymKey.split("-");
|
|
316
367
|
const y = Number(ys);
|
|
@@ -318,27 +369,9 @@ function formatMonthBucketLabel(ymKey) {
|
|
|
318
369
|
if (!Number.isFinite(y) || !Number.isFinite(m)) return ymKey;
|
|
319
370
|
return new Intl.DateTimeFormat("en-IN", {
|
|
320
371
|
month: "short",
|
|
321
|
-
year: "numeric",
|
|
322
372
|
timeZone: "UTC"
|
|
323
373
|
}).format(new Date(Date.UTC(y, m - 1, 1)));
|
|
324
374
|
}
|
|
325
|
-
function aggregateDailyOrdersForBreakdown(rows, keyFn, labelFn) {
|
|
326
|
-
const map = /* @__PURE__ */ new Map();
|
|
327
|
-
for (const d of rows) {
|
|
328
|
-
const key = keyFn(d);
|
|
329
|
-
const cur = map.get(key) ?? { orders: 0, revenue: 0, bucketRows: [] };
|
|
330
|
-
cur.orders += d.orders_count;
|
|
331
|
-
cur.revenue += d.total_revenue;
|
|
332
|
-
cur.bucketRows.push(d);
|
|
333
|
-
map.set(key, cur);
|
|
334
|
-
}
|
|
335
|
-
return Array.from(map.entries()).sort(([a], [b]) => a.localeCompare(b)).map(([key, v]) => ({
|
|
336
|
-
key,
|
|
337
|
-
label: labelFn(key, v.bucketRows),
|
|
338
|
-
orders_count: v.orders,
|
|
339
|
-
revenue: v.revenue
|
|
340
|
-
}));
|
|
341
|
-
}
|
|
342
375
|
function isSalesBreakdownBarRow(value) {
|
|
343
376
|
if (typeof value !== "object" || value === null) return false;
|
|
344
377
|
const v = value;
|
|
@@ -534,6 +567,81 @@ function OrdersDashboard() {
|
|
|
534
567
|
const [todayContextLoading, setTodayContextLoading] = useState(true);
|
|
535
568
|
const [todayContextError, setTodayContextError] = useState(null);
|
|
536
569
|
const [salesGranularity, setSalesGranularity] = useState("day");
|
|
570
|
+
const [salesBreakdownDaily, setSalesBreakdownDaily] = useState(
|
|
571
|
+
[]
|
|
572
|
+
);
|
|
573
|
+
const [salesBreakdownOtLoading, setSalesBreakdownOtLoading] = useState(true);
|
|
574
|
+
const [salesBreakdownOtError, setSalesBreakdownOtError] = useState(null);
|
|
575
|
+
const [salesBreakdownHourlyRolling, setSalesBreakdownHourlyRolling] = useState([]);
|
|
576
|
+
const [salesBreakdownHourlyLoading, setSalesBreakdownHourlyLoading] = useState(false);
|
|
577
|
+
const [salesBreakdownHourlyError, setSalesBreakdownHourlyError] = useState(null);
|
|
578
|
+
const salesBreakdownOtPeriod = useMemo(
|
|
579
|
+
() => getSalesBreakdownOtPeriod(salesGranularity),
|
|
580
|
+
[salesGranularity]
|
|
581
|
+
);
|
|
582
|
+
useEffect(() => {
|
|
583
|
+
if (salesBreakdownOtPeriod === null) {
|
|
584
|
+
setSalesBreakdownDaily([]);
|
|
585
|
+
setSalesBreakdownOtLoading(false);
|
|
586
|
+
setSalesBreakdownOtError(null);
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
let cancelled = false;
|
|
590
|
+
setSalesBreakdownOtLoading(true);
|
|
591
|
+
setSalesBreakdownOtError(null);
|
|
592
|
+
fetch(
|
|
593
|
+
`/admin/analytics/orders-over-time?period=${salesBreakdownOtPeriod}`,
|
|
594
|
+
{ credentials: "include" }
|
|
595
|
+
).then((res) => {
|
|
596
|
+
if (!res.ok) throw new Error(res.statusText);
|
|
597
|
+
return res.json();
|
|
598
|
+
}).then((body) => {
|
|
599
|
+
if (!cancelled) {
|
|
600
|
+
setSalesBreakdownDaily(body.dailyOrders ?? []);
|
|
601
|
+
}
|
|
602
|
+
}).catch((e) => {
|
|
603
|
+
if (!cancelled) {
|
|
604
|
+
setSalesBreakdownOtError(e instanceof Error ? e.message : String(e));
|
|
605
|
+
}
|
|
606
|
+
}).finally(() => {
|
|
607
|
+
if (!cancelled) setSalesBreakdownOtLoading(false);
|
|
608
|
+
});
|
|
609
|
+
return () => {
|
|
610
|
+
cancelled = true;
|
|
611
|
+
};
|
|
612
|
+
}, [salesBreakdownOtPeriod]);
|
|
613
|
+
useEffect(() => {
|
|
614
|
+
if (salesGranularity !== "hour") {
|
|
615
|
+
setSalesBreakdownHourlyRolling([]);
|
|
616
|
+
setSalesBreakdownHourlyLoading(false);
|
|
617
|
+
setSalesBreakdownHourlyError(null);
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
let cancelled = false;
|
|
621
|
+
setSalesBreakdownHourlyLoading(true);
|
|
622
|
+
setSalesBreakdownHourlyError(null);
|
|
623
|
+
fetch("/admin/analytics/orders-insights?last_hours=24", {
|
|
624
|
+
credentials: "include"
|
|
625
|
+
}).then((res) => {
|
|
626
|
+
if (!res.ok) throw new Error(res.statusText);
|
|
627
|
+
return res.json();
|
|
628
|
+
}).then((body) => {
|
|
629
|
+
if (!cancelled) {
|
|
630
|
+
setSalesBreakdownHourlyRolling(body.hourly_rolling ?? []);
|
|
631
|
+
}
|
|
632
|
+
}).catch((e) => {
|
|
633
|
+
if (!cancelled) {
|
|
634
|
+
setSalesBreakdownHourlyError(
|
|
635
|
+
e instanceof Error ? e.message : String(e)
|
|
636
|
+
);
|
|
637
|
+
}
|
|
638
|
+
}).finally(() => {
|
|
639
|
+
if (!cancelled) setSalesBreakdownHourlyLoading(false);
|
|
640
|
+
});
|
|
641
|
+
return () => {
|
|
642
|
+
cancelled = true;
|
|
643
|
+
};
|
|
644
|
+
}, [salesGranularity]);
|
|
537
645
|
useEffect(() => {
|
|
538
646
|
let cancelled = false;
|
|
539
647
|
setLoading(true);
|
|
@@ -720,68 +828,73 @@ function OrdersDashboard() {
|
|
|
720
828
|
};
|
|
721
829
|
});
|
|
722
830
|
}, [dailyOrders, previousPeriodDailyOrders]);
|
|
723
|
-
const hourlyChartRows = useMemo(() => {
|
|
724
|
-
if (!ordersInsights) return [];
|
|
725
|
-
return ordersInsights.byHour.map((h) => ({
|
|
726
|
-
label: `${String(h.hour).padStart(2, "0")}:00`,
|
|
727
|
-
hour: h.hour,
|
|
728
|
-
orders_count: h.orders_count,
|
|
729
|
-
revenue: h.revenue
|
|
730
|
-
}));
|
|
731
|
-
}, [ordersInsights]);
|
|
732
831
|
const salesBreakdownChartRows = useMemo(() => {
|
|
733
832
|
if (salesGranularity === "hour") {
|
|
734
|
-
return
|
|
735
|
-
key: `
|
|
736
|
-
label:
|
|
737
|
-
orders_count:
|
|
738
|
-
revenue:
|
|
833
|
+
return salesBreakdownHourlyRolling.map((b, i) => ({
|
|
834
|
+
key: `rolling-${i}`,
|
|
835
|
+
label: b.label,
|
|
836
|
+
orders_count: b.orders_count,
|
|
837
|
+
revenue: b.revenue
|
|
739
838
|
}));
|
|
740
839
|
}
|
|
741
840
|
if (salesGranularity === "week") {
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
841
|
+
const targetKeys = lastNWeekStartKeysUtc(7);
|
|
842
|
+
const agg = /* @__PURE__ */ new Map();
|
|
843
|
+
for (const d of salesBreakdownDaily) {
|
|
844
|
+
const wk = utcSundayWeekStartKeyFromDateStr(d.date);
|
|
845
|
+
const cur = agg.get(wk) ?? { orders: 0, revenue: 0 };
|
|
846
|
+
cur.orders += d.orders_count;
|
|
847
|
+
cur.revenue += d.total_revenue;
|
|
848
|
+
agg.set(wk, cur);
|
|
849
|
+
}
|
|
850
|
+
return targetKeys.map((key) => {
|
|
851
|
+
var _a2, _b2;
|
|
852
|
+
return {
|
|
853
|
+
key,
|
|
854
|
+
label: formatWeekStartDm(key),
|
|
855
|
+
orders_count: ((_a2 = agg.get(key)) == null ? void 0 : _a2.orders) ?? 0,
|
|
856
|
+
revenue: ((_b2 = agg.get(key)) == null ? void 0 : _b2.revenue) ?? 0
|
|
857
|
+
};
|
|
858
|
+
});
|
|
749
859
|
}
|
|
750
860
|
if (salesGranularity === "month") {
|
|
751
|
-
return
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
861
|
+
return salesBreakdownDaily.map((d) => ({
|
|
862
|
+
key: d.date,
|
|
863
|
+
label: d.label ?? formatMonthBucketLabel(monthKeyFromDateStr(d.date)),
|
|
864
|
+
orders_count: d.orders_count,
|
|
865
|
+
revenue: d.total_revenue
|
|
866
|
+
}));
|
|
756
867
|
}
|
|
757
|
-
return
|
|
868
|
+
return salesBreakdownDaily.map((d) => ({
|
|
758
869
|
key: d.date,
|
|
759
|
-
label:
|
|
870
|
+
label: formatDayBreakdownDm(d.date),
|
|
760
871
|
orders_count: d.orders_count,
|
|
761
872
|
revenue: d.total_revenue
|
|
762
873
|
}));
|
|
763
|
-
}, [
|
|
874
|
+
}, [
|
|
875
|
+
salesGranularity,
|
|
876
|
+
salesBreakdownDaily,
|
|
877
|
+
salesBreakdownHourlyRolling
|
|
878
|
+
]);
|
|
764
879
|
const salesBreakdownDescription = useMemo(() => {
|
|
765
|
-
var _a2;
|
|
766
|
-
const rangeLabel = ((_a2 = OVER_TIME_PERIODS.find((p) => p.value === overTimePeriod)) == null ? void 0 : _a2.label) ?? "selected range";
|
|
767
|
-
const insightsHint = `Order-time breakdown uses last ${insightsWindowDays} days (UTC).`;
|
|
768
880
|
switch (salesGranularity) {
|
|
769
|
-
case "day":
|
|
770
|
-
return `Revenue by calendar day for ${rangeLabel} (aligned with Revenue & orders).`;
|
|
771
881
|
case "hour":
|
|
772
|
-
return
|
|
882
|
+
return "Last 24 hours from now (UTC): one bar per clock hour in the rolling window.";
|
|
883
|
+
case "day":
|
|
884
|
+
return "Last 7 calendar days (UTC), one bar per day — axis day/month.";
|
|
773
885
|
case "week":
|
|
774
|
-
return
|
|
886
|
+
return "Last 7 weeks (UTC, weeks start Sunday); axis shows each week’s start as day/month.";
|
|
775
887
|
case "month":
|
|
776
|
-
return
|
|
888
|
+
return "Last 12 calendar months through the current month (UTC) — Jan, Feb, Mar, …";
|
|
777
889
|
default:
|
|
778
890
|
return "";
|
|
779
891
|
}
|
|
780
|
-
}, [salesGranularity
|
|
892
|
+
}, [salesGranularity]);
|
|
781
893
|
const salesBreakdownXAxisInterval = useMemo(() => {
|
|
782
894
|
const n = salesBreakdownChartRows.length;
|
|
783
895
|
if (salesGranularity === "hour") return 3;
|
|
784
|
-
if (salesGranularity === "day" && n > 24)
|
|
896
|
+
if (salesGranularity === "day" && n > 24)
|
|
897
|
+
return Math.max(0, Math.ceil(n / 10) - 1);
|
|
785
898
|
return 0;
|
|
786
899
|
}, [salesGranularity, salesBreakdownChartRows.length]);
|
|
787
900
|
const ordersVsDraftsPie = useMemo(() => {
|
|
@@ -860,20 +973,14 @@ function OrdersDashboard() {
|
|
|
860
973
|
if (error || !data) {
|
|
861
974
|
return /* @__PURE__ */ jsx(Container, { className: "p-6", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-danger", children: error ?? "Failed to load analytics" }) });
|
|
862
975
|
}
|
|
863
|
-
const
|
|
864
|
-
const
|
|
976
|
+
const salesBreakdownWaiting = salesGranularity === "hour" ? salesBreakdownHourlyLoading : salesBreakdownOtLoading;
|
|
977
|
+
const salesBreakdownFetchError = salesGranularity === "hour" ? salesBreakdownHourlyError : salesBreakdownOtError;
|
|
865
978
|
const salesBreakdownBody = (() => {
|
|
866
|
-
if (
|
|
979
|
+
if (salesBreakdownWaiting) {
|
|
867
980
|
return /* @__PURE__ */ jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center py-6", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-muted text-xs", children: "Loading chart…" }) }) });
|
|
868
981
|
}
|
|
869
|
-
if (
|
|
870
|
-
return /* @__PURE__ */ jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center px-2 py-6", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-danger text-center text-xs", children:
|
|
871
|
-
}
|
|
872
|
-
if (needsSalesInsights && insightsLoading) {
|
|
873
|
-
return /* @__PURE__ */ jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center py-6", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-muted text-xs", children: "Loading chart…" }) }) });
|
|
874
|
-
}
|
|
875
|
-
if (needsSalesInsights && insightsError) {
|
|
876
|
-
return /* @__PURE__ */ jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center px-2 py-6", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-danger text-center text-xs", children: insightsError }) }) });
|
|
982
|
+
if (salesBreakdownFetchError) {
|
|
983
|
+
return /* @__PURE__ */ jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-[min(176px,28vh)] items-center justify-center px-2 py-6", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-danger text-center text-xs", children: salesBreakdownFetchError }) }) });
|
|
877
984
|
}
|
|
878
985
|
if (salesBreakdownChartRows.length === 0) {
|
|
879
986
|
return /* @__PURE__ */ jsx(
|
|
@@ -1834,29 +1941,32 @@ function OrdersDashboard() {
|
|
|
1834
1941
|
title: "Sales breakdown",
|
|
1835
1942
|
description: salesBreakdownDescription,
|
|
1836
1943
|
actionsBare: true,
|
|
1837
|
-
actions: /* @__PURE__ */
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1944
|
+
actions: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-stretch gap-1 sm:flex-row sm:items-center sm:gap-2", children: [
|
|
1945
|
+
/* @__PURE__ */ jsx(
|
|
1946
|
+
Label,
|
|
1947
|
+
{
|
|
1948
|
+
htmlFor: "sales-breakdown-granularity",
|
|
1949
|
+
className: "shrink-0 text-ui-fg-muted text-xs font-medium",
|
|
1950
|
+
children: "Breakdown"
|
|
1951
|
+
}
|
|
1952
|
+
),
|
|
1953
|
+
/* @__PURE__ */ jsx(
|
|
1954
|
+
"select",
|
|
1955
|
+
{
|
|
1956
|
+
id: "sales-breakdown-granularity",
|
|
1957
|
+
value: salesGranularity,
|
|
1958
|
+
onChange: (e) => {
|
|
1959
|
+
const v = e.target.value;
|
|
1960
|
+
if (v === "hour" || v === "day" || v === "week" || v === "month") {
|
|
1961
|
+
setSalesGranularity(v);
|
|
1962
|
+
}
|
|
1963
|
+
},
|
|
1964
|
+
className: SELECT_CLASS_NAME$2,
|
|
1965
|
+
"aria-label": "Sales breakdown time bucket",
|
|
1966
|
+
children: SALES_GRANULARITY_TABS.map((tab) => /* @__PURE__ */ jsx("option", { value: tab.value, children: tab.value === "hour" ? "Hour (last 24h)" : tab.value === "day" ? "Day (last 7 days)" : tab.value === "week" ? "Week (last 7 weeks)" : "Month (last 12 months)" }, tab.value))
|
|
1967
|
+
}
|
|
1968
|
+
)
|
|
1969
|
+
] }),
|
|
1860
1970
|
children: salesBreakdownBody
|
|
1861
1971
|
}
|
|
1862
1972
|
),
|
|
@@ -13,6 +13,25 @@ function parseDays(value) {
|
|
|
13
13
|
return 365;
|
|
14
14
|
return Math.floor(n);
|
|
15
15
|
}
|
|
16
|
+
/** Rolling window in whole hours ending at request time (UTC). */
|
|
17
|
+
function parseLastHours(value) {
|
|
18
|
+
if (value === undefined || value === "")
|
|
19
|
+
return null;
|
|
20
|
+
const n = Number(value);
|
|
21
|
+
if (!Number.isFinite(n) || n < 1)
|
|
22
|
+
return null;
|
|
23
|
+
if (n > 168)
|
|
24
|
+
return 168;
|
|
25
|
+
return Math.floor(n);
|
|
26
|
+
}
|
|
27
|
+
const HOUR_MS = 60 * 60 * 1000;
|
|
28
|
+
function rollingBucketLabel(rangeStart, slotIndex) {
|
|
29
|
+
const t = new Date(rangeStart.getTime() + slotIndex * HOUR_MS);
|
|
30
|
+
const d = t.getUTCDate();
|
|
31
|
+
const m = t.getUTCMonth() + 1;
|
|
32
|
+
const h = t.getUTCHours();
|
|
33
|
+
return `${d}/${m} ${String(h).padStart(2, "0")}:00`;
|
|
34
|
+
}
|
|
16
35
|
function unwrapRemoteQueryRows(raw) {
|
|
17
36
|
if (raw === null || raw === undefined)
|
|
18
37
|
return [];
|
|
@@ -61,12 +80,29 @@ async function fetchDraftSnapshot(req) {
|
|
|
61
80
|
}
|
|
62
81
|
}
|
|
63
82
|
async function GET(req, res) {
|
|
83
|
+
const lastHours = parseLastHours(req.query?.last_hours);
|
|
64
84
|
const days = parseDays(req.query?.days);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
85
|
+
let rangeEnd;
|
|
86
|
+
let rangeStart;
|
|
87
|
+
let windowDaysForDto;
|
|
88
|
+
let windowHoursForDto;
|
|
89
|
+
let rollingSlotCount = null;
|
|
90
|
+
if (lastHours !== null) {
|
|
91
|
+
rangeEnd = new Date();
|
|
92
|
+
rangeStart = new Date(rangeEnd.getTime() - lastHours * HOUR_MS);
|
|
93
|
+
windowHoursForDto = lastHours;
|
|
94
|
+
windowDaysForDto = Math.max(1, Math.ceil(lastHours / 24));
|
|
95
|
+
rollingSlotCount = lastHours;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const today = new Date();
|
|
99
|
+
today.setUTCHours(23, 59, 59, 999);
|
|
100
|
+
rangeEnd = today;
|
|
101
|
+
rangeStart = new Date(today);
|
|
102
|
+
rangeStart.setUTCDate(rangeStart.getUTCDate() - (days - 1));
|
|
103
|
+
rangeStart.setUTCHours(0, 0, 0, 0);
|
|
104
|
+
windowDaysForDto = days;
|
|
105
|
+
}
|
|
70
106
|
try {
|
|
71
107
|
const orderFields = [
|
|
72
108
|
"id",
|
|
@@ -81,6 +117,12 @@ async function GET(req, res) {
|
|
|
81
117
|
const allOrders = await (0, fetch_orders_for_analytics_1.fetchOrdersForAnalytics)(req, orderFields);
|
|
82
118
|
const byHourMap = new Map();
|
|
83
119
|
const byWeekdayMap = new Map();
|
|
120
|
+
const rollingAgg = rollingSlotCount !== null
|
|
121
|
+
? Array.from({ length: rollingSlotCount }, () => ({
|
|
122
|
+
orders_count: 0,
|
|
123
|
+
revenue: 0,
|
|
124
|
+
}))
|
|
125
|
+
: null;
|
|
84
126
|
for (let h = 0; h < 24; h += 1) {
|
|
85
127
|
byHourMap.set(h, { orders_count: 0, revenue: 0 });
|
|
86
128
|
}
|
|
@@ -96,12 +138,22 @@ async function GET(req, res) {
|
|
|
96
138
|
if (!o)
|
|
97
139
|
continue;
|
|
98
140
|
const createdAt = (0, orders_analytics_helpers_1.toValidDate)(o.created_at);
|
|
99
|
-
if (!createdAt || createdAt < rangeStart || createdAt >
|
|
141
|
+
if (!createdAt || createdAt < rangeStart || createdAt > rangeEnd) {
|
|
100
142
|
continue;
|
|
101
143
|
}
|
|
102
144
|
const total = (0, orders_analytics_helpers_1.getOrderTotal)(o);
|
|
103
145
|
const hour = createdAt.getUTCHours();
|
|
104
146
|
const wd = createdAt.getUTCDay();
|
|
147
|
+
if (rollingAgg) {
|
|
148
|
+
const slot = Math.floor((createdAt.getTime() - rangeStart.getTime()) / HOUR_MS);
|
|
149
|
+
if (slot >= 0 && slot < rollingAgg.length) {
|
|
150
|
+
const cell = rollingAgg[slot];
|
|
151
|
+
if (cell) {
|
|
152
|
+
cell.orders_count += 1;
|
|
153
|
+
cell.revenue += total;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
105
157
|
const hAgg = byHourMap.get(hour);
|
|
106
158
|
if (hAgg) {
|
|
107
159
|
hAgg.orders_count += 1;
|
|
@@ -129,6 +181,14 @@ async function GET(req, res) {
|
|
|
129
181
|
const v = byHourMap.get(h) ?? { orders_count: 0, revenue: 0 };
|
|
130
182
|
byHour.push({ hour: h, orders_count: v.orders_count, revenue: v.revenue });
|
|
131
183
|
}
|
|
184
|
+
let hourlyRolling;
|
|
185
|
+
if (rollingAgg) {
|
|
186
|
+
hourlyRolling = rollingAgg.map((v, i) => ({
|
|
187
|
+
label: rollingBucketLabel(rangeStart, i),
|
|
188
|
+
orders_count: v.orders_count,
|
|
189
|
+
revenue: v.revenue,
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
132
192
|
const byWeekday = [];
|
|
133
193
|
for (let w = 0; w < 7; w += 1) {
|
|
134
194
|
const v = byWeekdayMap.get(w) ?? { orders_count: 0, revenue: 0 };
|
|
@@ -166,7 +226,7 @@ async function GET(req, res) {
|
|
|
166
226
|
if (!o)
|
|
167
227
|
continue;
|
|
168
228
|
const createdAt = (0, orders_analytics_helpers_1.toValidDate)(o.created_at);
|
|
169
|
-
if (!createdAt || createdAt < rangeStart || createdAt >
|
|
229
|
+
if (!createdAt || createdAt < rangeStart || createdAt > rangeEnd)
|
|
170
230
|
continue;
|
|
171
231
|
revenueInWindow += (0, orders_analytics_helpers_1.getOrderTotal)(o);
|
|
172
232
|
}
|
|
@@ -180,11 +240,13 @@ async function GET(req, res) {
|
|
|
180
240
|
const drafts = await fetchDraftSnapshot(req);
|
|
181
241
|
const body = {
|
|
182
242
|
byHour,
|
|
243
|
+
...(hourlyRolling ? { hourly_rolling: hourlyRolling } : {}),
|
|
183
244
|
byWeekday,
|
|
184
245
|
funnel,
|
|
185
246
|
traffic,
|
|
186
247
|
drafts,
|
|
187
|
-
window_days:
|
|
248
|
+
window_days: windowDaysForDto,
|
|
249
|
+
...(windowHoursForDto !== undefined ? { window_hours: windowHoursForDto } : {}),
|
|
188
250
|
};
|
|
189
251
|
res.json(body);
|
|
190
252
|
}
|
|
@@ -196,4 +258,4 @@ async function GET(req, res) {
|
|
|
196
258
|
});
|
|
197
259
|
}
|
|
198
260
|
}
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FuYWx5dGljcy9vcmRlcnMtaW5zaWdodHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvRkEsa0JBMkpDO0FBeE9ELHFEQUdrQztBQUNsQyw4RUFBdUU7QUFDdkUsMEVBT29DO0FBVXBDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFFeEUsU0FBUyxTQUFTLENBQUMsS0FBYztJQUMvQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUMzQyxJQUFJLENBQUMsR0FBRyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3RCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEdBQVk7SUFDekMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFBO0lBQ2xDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBOEIsQ0FBQTtRQUMxQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQTtRQUM1QyxJQUFJLEtBQUssQ0FBQyxP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
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FuYWx5dGljcy9vcmRlcnMtaW5zaWdodHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3R0Esa0JBME1DO0FBM1NELHFEQUdrQztBQUNsQyw4RUFBdUU7QUFDdkUsMEVBT29DO0FBV3BDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFFeEUsU0FBUyxTQUFTLENBQUMsS0FBYztJQUMvQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUMzQyxJQUFJLENBQUMsR0FBRyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3RCLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsU0FBUyxjQUFjLENBQUMsS0FBYztJQUNwQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUNwRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3RCLENBQUM7QUFFRCxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQTtBQUU5QixTQUFTLGtCQUFrQixDQUFDLFVBQWdCLEVBQUUsU0FBaUI7SUFDN0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQTtJQUM5RCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDekIsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQTtBQUNyRCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxHQUFZO0lBQ3pDLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQTtJQUNsQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQThCLENBQUE7UUFDMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUE7UUFDNUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUE7UUFDNUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTtRQUN2QixJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbkUsTUFBTSxDQUFDLEdBQUcsTUFBaUMsQ0FBQTtZQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRCxLQUFLLFVBQVUsa0JBQWtCLENBQy9CLEdBQWtCO0lBRWxCLElBQUksQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNuQyxpQ0FBeUIsQ0FBQyxZQUFZLENBQ3ZDLENBQUE7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUEyQixFQUFDO1lBQzlDLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDO1lBQ3JDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtTQUNuQyxDQUFDLENBQUE7UUFDRixNQUFNLEdBQUcsR0FBRyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUMxQyxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN2QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUE7UUFDbEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsR0FBRyxHQUEwQixDQUFBO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFFLFVBQVUsSUFBSSxDQUFDLENBQUE7UUFDdkMsQ0FBQztRQUNELE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbEIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQTtJQUNILENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQTtJQUN2RCxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRXZDLElBQUksUUFBYyxDQUFBO0lBQ2xCLElBQUksVUFBZ0IsQ0FBQTtJQUNwQixJQUFJLGdCQUF3QixDQUFBO0lBQzVCLElBQUksaUJBQXFDLENBQUE7SUFDekMsSUFBSSxnQkFBZ0IsR0FBa0IsSUFBSSxDQUFBO0lBRTFDLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO1FBQ3JCLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFBO1FBQy9ELGlCQUFpQixHQUFHLFNBQVMsQ0FBQTtRQUM3QixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3pELGdCQUFnQixHQUFHLFNBQVMsQ0FBQTtJQUM5QixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDeEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNsQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ2hCLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM1QixVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNELFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLFdBQVcsR0FBRztZQUNsQixJQUFJO1lBQ0osUUFBUTtZQUNSLE9BQU87WUFDUCxZQUFZO1lBQ1osMkJBQTJCO1lBQzNCLHlCQUF5QjtZQUN6Qiw2QkFBNkI7WUFDN0IsMEJBQTBCO1NBQzNCLENBQUE7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsb0RBQXVCLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRWpFLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFxRCxDQUFBO1FBQzlFLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFxRCxDQUFBO1FBQ2pGLE1BQU0sVUFBVSxHQUNkLGdCQUFnQixLQUFLLElBQUk7WUFDdkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxZQUFZLEVBQUUsQ0FBQztnQkFDZixPQUFPLEVBQUUsQ0FBQzthQUNYLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFVixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDbkQsQ0FBQztRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFBO1FBQzFCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQTtRQUNyQixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUE7UUFFdkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsR0FBRyxJQUFBLDhDQUFtQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2xDLElBQUksQ0FBQyxDQUFDO2dCQUFFLFNBQVE7WUFDaEIsTUFBTSxTQUFTLEdBQUcsSUFBQSxzQ0FBVyxFQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUMzQyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsR0FBRyxVQUFVLElBQUksU0FBUyxHQUFHLFFBQVEsRUFBRSxDQUFDO2dCQUNqRSxTQUFRO1lBQ1YsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLElBQUEsd0NBQWEsRUFBQyxDQUE0QixDQUFDLENBQUE7WUFFekQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ3BDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUNoQyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3JCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FDdkQsQ0FBQTtnQkFDRCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDMUMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUM3QixJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNULElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFBO3dCQUN0QixJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQTtvQkFDdkIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDaEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQTtnQkFDdEIsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUE7WUFDdkIsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDakMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQTtnQkFDdEIsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUE7WUFDdkIsQ0FBQztZQUVELFlBQVksSUFBSSxDQUFDLENBQUE7WUFDakIsSUFBSSxDQUFDLElBQUEsNENBQWlCLEVBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLGtCQUFrQixJQUFJLENBQUMsQ0FBQTtnQkFDdkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQTtnQkFDMUIsSUFBSSxJQUFBLGdEQUFxQixFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLGFBQWEsSUFBSSxDQUFDLENBQUE7Z0JBQ3BCLENBQUM7Z0JBQ0QsSUFBSSxJQUFBLGtEQUF1QixFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLGVBQWUsSUFBSSxDQUFDLENBQUE7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUE7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFBO1lBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUM1RSxDQUFDO1FBRUQsSUFBSSxhQUFnRCxDQUFBO1FBQ3BELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7Z0JBQzVCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTzthQUNuQixDQUFDLENBQUMsQ0FBQTtRQUNMLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBeUIsRUFBRSxDQUFBO1FBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQTtZQUNoRSxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNiLE9BQU8sRUFBRSxDQUFDO2dCQUNWLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckMsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZO2dCQUM1QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87YUFDbkIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELE1BQU0sTUFBTSxHQUF3RDtZQUNsRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQzdELEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtZQUNuRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7WUFDdkUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtTQUNoRSxDQUFBO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUE7UUFDbkMsTUFBTSxNQUFNLEdBQWtCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDeEQsTUFBTSxjQUFjLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xFLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDNUQsTUFBTSxnQkFBZ0IsR0FDcEIsU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEdBQUcsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEdBQUc7Z0JBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDVixPQUFPO2dCQUNMLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDWixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRTtnQkFDdEQsMEJBQTBCLEVBQ3hCLGdCQUFnQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUU7YUFDNUUsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLEtBQUssTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBQSw4Q0FBbUIsRUFBQyxHQUFHLENBQUMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsQ0FBQztnQkFBRSxTQUFRO1lBQ2hCLE1BQU0sU0FBUyxHQUFHLElBQUEsc0NBQVcsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDM0MsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLEdBQUcsVUFBVSxJQUFJLFNBQVMsR0FBRyxRQUFRO2dCQUFFLFNBQVE7WUFDMUUsZUFBZSxJQUFJLElBQUEsd0NBQWEsRUFBQyxDQUE0QixDQUFDLENBQUE7UUFDaEUsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFtQjtZQUM5QjtnQkFDRSxLQUFLLEVBQUUsNEJBQTRCO2dCQUNuQyxZQUFZLEVBQUUsWUFBWTtnQkFDMUIsT0FBTyxFQUFFLGVBQWU7YUFDekI7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUU1QyxNQUFNLElBQUksR0FBc0I7WUFDOUIsTUFBTTtZQUNOLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDM0QsU0FBUztZQUNULE1BQU07WUFDTixPQUFPO1lBQ1AsTUFBTTtZQUNOLFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsR0FBRyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2hGLENBQUE7UUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2hCLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUM1QyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixLQUFLLEVBQUUsaUNBQWlDO1lBQ3hDLE9BQU8sRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQzFELENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -4,7 +4,13 @@ exports.GET = GET;
|
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const fetch_orders_for_analytics_1 = require("../fetch-orders-for-analytics");
|
|
6
6
|
const orders_analytics_helpers_1 = require("../orders-analytics-helpers");
|
|
7
|
-
const ALLOWED_PERIODS = [
|
|
7
|
+
const ALLOWED_PERIODS = [
|
|
8
|
+
"one_week",
|
|
9
|
+
"one_month",
|
|
10
|
+
"two_months",
|
|
11
|
+
"12_months",
|
|
12
|
+
"one_year",
|
|
13
|
+
];
|
|
8
14
|
function isPeriod(value) {
|
|
9
15
|
return typeof value === "string" && ALLOWED_PERIODS.some((period) => period === value);
|
|
10
16
|
}
|
|
@@ -34,8 +40,8 @@ function createBucket(date, label) {
|
|
|
34
40
|
function createBuckets(period, today) {
|
|
35
41
|
const rangeEnd = new Date(today);
|
|
36
42
|
rangeEnd.setUTCHours(23, 59, 59, 999);
|
|
37
|
-
if (period === "one_week" || period === "one_month") {
|
|
38
|
-
const maxDays = period === "one_week" ? 7 : 30;
|
|
43
|
+
if (period === "one_week" || period === "one_month" || period === "two_months") {
|
|
44
|
+
const maxDays = period === "one_week" ? 7 : period === "one_month" ? 30 : 60;
|
|
39
45
|
const rangeStart = new Date(today);
|
|
40
46
|
rangeStart.setUTCDate(rangeStart.getUTCDate() - (maxDays - 1));
|
|
41
47
|
rangeStart.setUTCHours(0, 0, 0, 0);
|
|
@@ -81,6 +87,10 @@ function previousPeriodAnchor(period, today) {
|
|
|
81
87
|
d.setUTCDate(d.getUTCDate() - 30);
|
|
82
88
|
return d;
|
|
83
89
|
}
|
|
90
|
+
if (period === "two_months") {
|
|
91
|
+
d.setUTCDate(d.getUTCDate() - 60);
|
|
92
|
+
return d;
|
|
93
|
+
}
|
|
84
94
|
d.setUTCMonth(d.getUTCMonth() - 12);
|
|
85
95
|
return d;
|
|
86
96
|
}
|
|
@@ -204,4 +214,4 @@ async function GET(req, res) {
|
|
|
204
214
|
});
|
|
205
215
|
}
|
|
206
216
|
}
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FuYWx5dGljcy9vcmRlcnMtb3Zlci10aW1lL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa09BLGtCQXFGQztBQWxURCxxREFBbUQ7QUFFbkQsOEVBQXVFO0FBQ3ZFLDBFQVFvQztBQUdwQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBVSxDQUFBO0FBVW5GLFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFBO0FBQ3hGLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxDQUFPO0lBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlCLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDbEMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN4QixPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsSUFBWSxFQUFFLEtBQWM7SUFDaEQsT0FBTztRQUNMLElBQUk7UUFDSixLQUFLO1FBQ0wsWUFBWSxFQUFFLENBQUM7UUFDZixhQUFhLEVBQUUsQ0FBQztRQUNoQixlQUFlLEVBQUUsQ0FBQztRQUNsQixhQUFhLEVBQUUsQ0FBQztRQUNoQixlQUFlLEVBQUUsQ0FBQztRQUNsQixjQUFjLEVBQUUsQ0FBQztRQUNqQixZQUFZLEVBQUUsQ0FBQztRQUNmLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsaUJBQWlCLEVBQUUsQ0FBQztR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
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FuYWx5dGljcy9vcmRlcnMtb3Zlci10aW1lL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNk9BLGtCQXFGQztBQTdURCxxREFBbUQ7QUFFbkQsOEVBQXVFO0FBQ3ZFLDBFQVFvQztBQUdwQyxNQUFNLGVBQWUsR0FBRztJQUN0QixVQUFVO0lBQ1YsV0FBVztJQUNYLFlBQVk7SUFDWixXQUFXO0lBQ1gsVUFBVTtDQUNGLENBQUE7QUFVVixTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQTtBQUN4RixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsQ0FBTztJQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5QixVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDeEIsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQVksRUFBRSxLQUFjO0lBQ2hELE9BQU87UUFDTCxJQUFJO1FBQ0osS0FBSztRQUNMLFlBQVksRUFBRSxDQUFDO1FBQ2YsYUFBYSxFQUFFLENBQUM7UUFDaEIsZUFBZSxFQUFFLENBQUM7UUFDbEIsYUFBYSxFQUFFLENBQUM7UUFDaEIsZUFBZSxFQUFFLENBQUM7UUFDbEIsY0FBYyxFQUFFLENBQUM7UUFDakIsWUFBWSxFQUFFLENBQUM7UUFDZixpQkFBaUIsRUFBRSxDQUFDO1FBQ3BCLGlCQUFpQixF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
|