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 hourlyChartRows.map((h) => ({
736
- key: `hour-${h.hour}`,
737
- label: h.label,
738
- orders_count: h.orders_count,
739
- revenue: h.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
- if (!ordersInsights) return [];
744
- return ordersInsights.byWeekday.map((w) => ({
745
- key: `weekday-${w.weekday}`,
746
- label: w.label,
747
- orders_count: w.orders_count,
748
- revenue: w.revenue
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 aggregateDailyOrdersForBreakdown(
753
- dailyOrders,
754
- (d) => monthKeyFromDateStr(d.date),
755
- (ymKey) => formatMonthBucketLabel(ymKey)
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 dailyOrders.map((d) => ({
869
+ return salesBreakdownDaily.map((d) => ({
759
870
  key: d.date,
760
- label: d.label ?? formatChartLabel$2(d.date),
871
+ label: formatDayBreakdownDm(d.date),
761
872
  orders_count: d.orders_count,
762
873
  revenue: d.total_revenue
763
874
  }));
764
- }, [salesGranularity, dailyOrders, hourlyChartRows, ordersInsights]);
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 `${insightsHint} Bars show revenue by hour of day.`;
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 `Revenue by UTC weekday last ${insightsWindowDays} days.`;
887
+ return "Last 7 weeks (UTC, weeks start Sunday); axis shows each week’s start as day/month.";
776
888
  case "month":
777
- return `Revenue summed by calendar month (UTC) across ${rangeLabel}.`;
889
+ return "Last 12 calendar months through the current month (UTC) Jan, Feb, Mar, …";
778
890
  default:
779
891
  return "";
780
892
  }
781
- }, [salesGranularity, overTimePeriod, insightsWindowDays]);
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) return Math.max(0, Math.ceil(n / 10) - 1);
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 needsSalesOverTime = salesGranularity === "day" || salesGranularity === "month";
865
- const needsSalesInsights = salesGranularity === "hour" || salesGranularity === "week";
977
+ const salesBreakdownWaiting = salesGranularity === "hour" ? salesBreakdownHourlyLoading : salesBreakdownOtLoading;
978
+ const salesBreakdownFetchError = salesGranularity === "hour" ? salesBreakdownHourlyError : salesBreakdownOtError;
866
979
  const salesBreakdownBody = (() => {
867
- if (needsSalesOverTime && overTimeLoading) {
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 (needsSalesOverTime && overTimeError) {
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: overTimeError }) }) });
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.jsx(
1839
- "div",
1840
- {
1841
- className: "flex flex-wrap items-center gap-1 rounded-lg border border-ui-border-base bg-ui-bg-subtle/40 p-0.5",
1842
- role: "tablist",
1843
- "aria-label": "Sales breakdown granularity",
1844
- children: SALES_GRANULARITY_TABS.map((tab) => {
1845
- const selected = salesGranularity === tab.value;
1846
- return /* @__PURE__ */ jsxRuntime.jsx(
1847
- "button",
1848
- {
1849
- type: "button",
1850
- role: "tab",
1851
- "aria-selected": selected,
1852
- onClick: () => setSalesGranularity(tab.value),
1853
- className: `rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ui-fg-interactive ${selected ? "bg-ui-bg-base text-ui-fg-base shadow-sm" : "text-ui-fg-muted hover:text-ui-fg-base"}`,
1854
- children: tab.label
1855
- },
1856
- tab.value
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, useEffect, useMemo } from "react";
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 hourlyChartRows.map((h) => ({
735
- key: `hour-${h.hour}`,
736
- label: h.label,
737
- orders_count: h.orders_count,
738
- revenue: h.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
- if (!ordersInsights) return [];
743
- return ordersInsights.byWeekday.map((w) => ({
744
- key: `weekday-${w.weekday}`,
745
- label: w.label,
746
- orders_count: w.orders_count,
747
- revenue: w.revenue
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 aggregateDailyOrdersForBreakdown(
752
- dailyOrders,
753
- (d) => monthKeyFromDateStr(d.date),
754
- (ymKey) => formatMonthBucketLabel(ymKey)
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 dailyOrders.map((d) => ({
868
+ return salesBreakdownDaily.map((d) => ({
758
869
  key: d.date,
759
- label: d.label ?? formatChartLabel$2(d.date),
870
+ label: formatDayBreakdownDm(d.date),
760
871
  orders_count: d.orders_count,
761
872
  revenue: d.total_revenue
762
873
  }));
763
- }, [salesGranularity, dailyOrders, hourlyChartRows, ordersInsights]);
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 `${insightsHint} Bars show revenue by hour of day.`;
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 `Revenue by UTC weekday last ${insightsWindowDays} days.`;
886
+ return "Last 7 weeks (UTC, weeks start Sunday); axis shows each week’s start as day/month.";
775
887
  case "month":
776
- return `Revenue summed by calendar month (UTC) across ${rangeLabel}.`;
888
+ return "Last 12 calendar months through the current month (UTC) Jan, Feb, Mar, …";
777
889
  default:
778
890
  return "";
779
891
  }
780
- }, [salesGranularity, overTimePeriod, insightsWindowDays]);
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) return Math.max(0, Math.ceil(n / 10) - 1);
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 needsSalesOverTime = salesGranularity === "day" || salesGranularity === "month";
864
- const needsSalesInsights = salesGranularity === "hour" || salesGranularity === "week";
976
+ const salesBreakdownWaiting = salesGranularity === "hour" ? salesBreakdownHourlyLoading : salesBreakdownOtLoading;
977
+ const salesBreakdownFetchError = salesGranularity === "hour" ? salesBreakdownHourlyError : salesBreakdownOtError;
865
978
  const salesBreakdownBody = (() => {
866
- if (needsSalesOverTime && overTimeLoading) {
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 (needsSalesOverTime && overTimeError) {
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: overTimeError }) }) });
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__ */ jsx(
1838
- "div",
1839
- {
1840
- className: "flex flex-wrap items-center gap-1 rounded-lg border border-ui-border-base bg-ui-bg-subtle/40 p-0.5",
1841
- role: "tablist",
1842
- "aria-label": "Sales breakdown granularity",
1843
- children: SALES_GRANULARITY_TABS.map((tab) => {
1844
- const selected = salesGranularity === tab.value;
1845
- return /* @__PURE__ */ jsx(
1846
- "button",
1847
- {
1848
- type: "button",
1849
- role: "tab",
1850
- "aria-selected": selected,
1851
- onClick: () => setSalesGranularity(tab.value),
1852
- className: `rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ui-fg-interactive ${selected ? "bg-ui-bg-base text-ui-fg-base shadow-sm" : "text-ui-fg-muted hover:text-ui-fg-base"}`,
1853
- children: tab.label
1854
- },
1855
- tab.value
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
- const today = new Date();
66
- today.setUTCHours(23, 59, 59, 999);
67
- const rangeStart = new Date(today);
68
- rangeStart.setUTCDate(rangeStart.getUTCDate() - (days - 1));
69
- rangeStart.setUTCHours(0, 0, 0, 0);
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 > today) {
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 > today)
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: 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FuYWx5dGljcy9vcmRlcnMtaW5zaWdodHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3R0Esa0JBME1DO0FBM1NELHFEQUdrQztBQUNsQyw4RUFBdUU7QUFDdkUsMEVBT29DO0FBV3BDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFFeEUsU0FBUyxTQUFTLENBQUMsS0FBYztJQUMvQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUMzQyxJQUFJLENBQUMsR0FBRyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3RCLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsU0FBUyxjQUFjLENBQUMsS0FBYztJQUNwQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUNwRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FB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
@@ -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 = ["one_week", "one_month", "12_months", "one_year"];
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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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusa-analytics",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",