medusa-analytics 0.0.19 → 0.0.20
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.
|
@@ -2809,28 +2809,35 @@ function TrendTooltip({
|
|
|
2809
2809
|
function MiniTrendTooltip({
|
|
2810
2810
|
active,
|
|
2811
2811
|
payload,
|
|
2812
|
-
label
|
|
2812
|
+
label,
|
|
2813
|
+
productHeadline,
|
|
2814
|
+
hideViewsRow,
|
|
2815
|
+
hideUnitsRow,
|
|
2816
|
+
hideRevenueRow
|
|
2813
2817
|
}) {
|
|
2814
2818
|
var _a, _b, _c, _d, _e;
|
|
2815
2819
|
if (!active || !(payload == null ? void 0 : payload.length)) return null;
|
|
2816
2820
|
const row = isProductOverTimePoint((_a = payload[0]) == null ? void 0 : _a.payload) ? (_b = payload[0]) == null ? void 0 : _b.payload : void 0;
|
|
2817
|
-
const
|
|
2821
|
+
const labelKey = label !== void 0 && label !== null ? String(label) : "";
|
|
2822
|
+
const displayLabel = (row == null ? void 0 : row.label) ?? (labelKey ? new Date(labelKey).toLocaleDateString() : "");
|
|
2818
2823
|
const unitsSold = ((_c = payload.find((entry) => entry.name === "Units sold")) == null ? void 0 : _c.value) ?? 0;
|
|
2819
2824
|
const views = ((_d = payload.find((entry) => entry.name === "Views")) == null ? void 0 : _d.value) ?? 0;
|
|
2820
2825
|
const revenue = ((_e = payload.find((entry) => entry.name === "Revenue")) == null ? void 0 : _e.value) ?? 0;
|
|
2821
|
-
|
|
2822
|
-
|
|
2826
|
+
const title = productHeadline ?? displayLabel;
|
|
2827
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(AnalyticsTooltipCard, { variant: "compact", title, children: [
|
|
2828
|
+
productHeadline ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1 text-[10px] leading-tight opacity-80", children: displayLabel }) : null,
|
|
2829
|
+
!hideUnitsRow ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2823
2830
|
"Units sold: ",
|
|
2824
2831
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: Math.floor(Number(unitsSold)).toLocaleString() })
|
|
2825
|
-
] }),
|
|
2826
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2832
|
+
] }) : null,
|
|
2833
|
+
!hideViewsRow ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2827
2834
|
"Views: ",
|
|
2828
2835
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: Math.floor(Number(views)).toLocaleString() })
|
|
2829
|
-
] }),
|
|
2830
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2836
|
+
] }) : null,
|
|
2837
|
+
!hideRevenueRow ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2831
2838
|
"Revenue: ",
|
|
2832
2839
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: formatCurrency(Number(revenue)) })
|
|
2833
|
-
] })
|
|
2840
|
+
] }) : null
|
|
2834
2841
|
] });
|
|
2835
2842
|
}
|
|
2836
2843
|
function ProductBarTooltip({
|
|
@@ -2890,7 +2897,7 @@ function EmptyAnalyticsPanel({ title, description }) {
|
|
|
2890
2897
|
] });
|
|
2891
2898
|
}
|
|
2892
2899
|
function ProductsDashboard() {
|
|
2893
|
-
var _a, _b, _c, _d, _e;
|
|
2900
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
2894
2901
|
const [summaryDays, setSummaryDays] = react.useState("all");
|
|
2895
2902
|
const [graphPeriod, setGraphPeriod] = react.useState("one_week");
|
|
2896
2903
|
const [topSellerPeriod, setTopSellerPeriod] = react.useState("week");
|
|
@@ -3017,14 +3024,43 @@ function ProductsDashboard() {
|
|
|
3017
3024
|
};
|
|
3018
3025
|
}, [salesChannelId, topSellerPeriod]);
|
|
3019
3026
|
react.useEffect(() => {
|
|
3027
|
+
var _a2, _b2;
|
|
3020
3028
|
let cancelled = false;
|
|
3029
|
+
if (topSellersLoading) {
|
|
3030
|
+
setBestSellersTrendLoading(true);
|
|
3031
|
+
return () => {
|
|
3032
|
+
cancelled = true;
|
|
3033
|
+
};
|
|
3034
|
+
}
|
|
3035
|
+
if (topSellersError) {
|
|
3036
|
+
setBestSellersTrendLoading(false);
|
|
3037
|
+
setBestSellersTrendError(topSellersError);
|
|
3038
|
+
setBestSellersTrend(null);
|
|
3039
|
+
return () => {
|
|
3040
|
+
cancelled = true;
|
|
3041
|
+
};
|
|
3042
|
+
}
|
|
3043
|
+
const topProductId = (_b2 = (_a2 = topSellers == null ? void 0 : topSellers.products) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.product_id;
|
|
3044
|
+
if (!topProductId) {
|
|
3045
|
+
setBestSellersTrendLoading(false);
|
|
3046
|
+
setBestSellersTrendError(null);
|
|
3047
|
+
setBestSellersTrend({
|
|
3048
|
+
series: [],
|
|
3049
|
+
productViewsConnected: (topSellers == null ? void 0 : topSellers.productViewsConnected) ?? false,
|
|
3050
|
+
product: null
|
|
3051
|
+
});
|
|
3052
|
+
return () => {
|
|
3053
|
+
cancelled = true;
|
|
3054
|
+
};
|
|
3055
|
+
}
|
|
3021
3056
|
setBestSellersTrendLoading(true);
|
|
3022
3057
|
setBestSellersTrendError(null);
|
|
3023
3058
|
const period = topSellerPeriodToGraphPeriod(topSellerPeriod);
|
|
3024
3059
|
fetch(
|
|
3025
3060
|
buildAnalyticsUrl("/admin/analytics/products-over-time", {
|
|
3026
3061
|
period,
|
|
3027
|
-
sales_channel_id: salesChannelId !== "all" ? salesChannelId : null
|
|
3062
|
+
sales_channel_id: salesChannelId !== "all" ? salesChannelId : null,
|
|
3063
|
+
product_id: topProductId
|
|
3028
3064
|
}),
|
|
3029
3065
|
{ credentials: "include" }
|
|
3030
3066
|
).then((res) => {
|
|
@@ -3042,16 +3078,53 @@ function ProductsDashboard() {
|
|
|
3042
3078
|
return () => {
|
|
3043
3079
|
cancelled = true;
|
|
3044
3080
|
};
|
|
3045
|
-
}, [salesChannelId, topSellerPeriod]);
|
|
3081
|
+
}, [salesChannelId, topSellerPeriod, topSellersLoading, topSellersError, topSellers]);
|
|
3046
3082
|
react.useEffect(() => {
|
|
3083
|
+
var _a2, _b2;
|
|
3047
3084
|
let cancelled = false;
|
|
3085
|
+
if (performanceLoading) {
|
|
3086
|
+
setMostViewedTrendLoading(true);
|
|
3087
|
+
return () => {
|
|
3088
|
+
cancelled = true;
|
|
3089
|
+
};
|
|
3090
|
+
}
|
|
3091
|
+
if (performanceError) {
|
|
3092
|
+
setMostViewedTrendLoading(false);
|
|
3093
|
+
setMostViewedTrendError(performanceError);
|
|
3094
|
+
setMostViewedTrend(null);
|
|
3095
|
+
return () => {
|
|
3096
|
+
cancelled = true;
|
|
3097
|
+
};
|
|
3098
|
+
}
|
|
3099
|
+
if (!(performance == null ? void 0 : performance.productViewsConnected)) {
|
|
3100
|
+
setMostViewedTrendLoading(false);
|
|
3101
|
+
setMostViewedTrendError(null);
|
|
3102
|
+
setMostViewedTrend(null);
|
|
3103
|
+
return () => {
|
|
3104
|
+
cancelled = true;
|
|
3105
|
+
};
|
|
3106
|
+
}
|
|
3107
|
+
const topViewedId = (_b2 = (_a2 = performance.topViewedProducts) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.product_id;
|
|
3108
|
+
if (!topViewedId) {
|
|
3109
|
+
setMostViewedTrendLoading(false);
|
|
3110
|
+
setMostViewedTrendError(null);
|
|
3111
|
+
setMostViewedTrend({
|
|
3112
|
+
series: [],
|
|
3113
|
+
productViewsConnected: true,
|
|
3114
|
+
product: null
|
|
3115
|
+
});
|
|
3116
|
+
return () => {
|
|
3117
|
+
cancelled = true;
|
|
3118
|
+
};
|
|
3119
|
+
}
|
|
3048
3120
|
setMostViewedTrendLoading(true);
|
|
3049
3121
|
setMostViewedTrendError(null);
|
|
3050
3122
|
const period = summaryDaysToGraphPeriod(summaryDays);
|
|
3051
3123
|
fetch(
|
|
3052
3124
|
buildAnalyticsUrl("/admin/analytics/products-over-time", {
|
|
3053
3125
|
period,
|
|
3054
|
-
sales_channel_id: salesChannelId !== "all" ? salesChannelId : null
|
|
3126
|
+
sales_channel_id: salesChannelId !== "all" ? salesChannelId : null,
|
|
3127
|
+
product_id: topViewedId
|
|
3055
3128
|
}),
|
|
3056
3129
|
{ credentials: "include" }
|
|
3057
3130
|
).then((res) => {
|
|
@@ -3069,7 +3142,7 @@ function ProductsDashboard() {
|
|
|
3069
3142
|
return () => {
|
|
3070
3143
|
cancelled = true;
|
|
3071
3144
|
};
|
|
3072
|
-
}, [salesChannelId, summaryDays]);
|
|
3145
|
+
}, [salesChannelId, summaryDays, performanceLoading, performanceError, performance]);
|
|
3073
3146
|
react.useEffect(() => {
|
|
3074
3147
|
let cancelled = false;
|
|
3075
3148
|
setPerformanceLoading(true);
|
|
@@ -3115,12 +3188,14 @@ function ProductsDashboard() {
|
|
|
3115
3188
|
const viewsConnectedForPulse = ((summary == null ? void 0 : summary.productViewsConnected) ?? false) || (overTime == null ? void 0 : overTime.productViewsConnected) === true || (topSellers == null ? void 0 : topSellers.productViewsConnected) === true || (performance == null ? void 0 : performance.productViewsConnected) === true;
|
|
3116
3189
|
const bestSellersTrendSeries = (bestSellersTrend == null ? void 0 : bestSellersTrend.series) ?? [];
|
|
3117
3190
|
const mostViewedTrendSeries = (mostViewedTrend == null ? void 0 : mostViewedTrend.series) ?? [];
|
|
3191
|
+
const bestSellerTrendProductTitle = ((_a = bestSellersTrend == null ? void 0 : bestSellersTrend.product) == null ? void 0 : _a.product_title) ?? ((_c = (_b = topSellers == null ? void 0 : topSellers.products) == null ? void 0 : _b[0]) == null ? void 0 : _c.product_title) ?? null;
|
|
3192
|
+
const mostViewedTrendProductTitle = ((_d = mostViewedTrend == null ? void 0 : mostViewedTrend.product) == null ? void 0 : _d.product_title) ?? ((_f = (_e = performance == null ? void 0 : performance.topViewedProducts) == null ? void 0 : _e[0]) == null ? void 0 : _f.product_title) ?? null;
|
|
3118
3193
|
const viewsVsUnitsScatterData = react.useMemo(
|
|
3119
3194
|
() => ((performance == null ? void 0 : performance.topViewedProducts) ?? []).slice(0, 48).filter((row) => row.total_views > 0 || row.units_sold > 0),
|
|
3120
3195
|
[performance]
|
|
3121
3196
|
);
|
|
3122
|
-
const selectedSummaryPeriod = ((
|
|
3123
|
-
const selectedGraphPeriodLabel = ((
|
|
3197
|
+
const selectedSummaryPeriod = ((_g = SUMMARY_PERIODS.find((p) => p.value === summaryDays)) == null ? void 0 : _g.label) ?? "All time";
|
|
3198
|
+
const selectedGraphPeriodLabel = ((_h = GRAPH_PERIODS.find((p) => p.value === graphPeriod)) == null ? void 0 : _h.label) ?? "One week";
|
|
3124
3199
|
const quickPulseMetrics = [
|
|
3125
3200
|
{
|
|
3126
3201
|
label: "Range units",
|
|
@@ -3162,7 +3237,7 @@ function ProductsDashboard() {
|
|
|
3162
3237
|
return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-danger", children: summaryError ?? "Failed to load product analytics" }) });
|
|
3163
3238
|
}
|
|
3164
3239
|
const viewsConnected = summary.productViewsConnected || (overTime == null ? void 0 : overTime.productViewsConnected) === true || (topSellers == null ? void 0 : topSellers.productViewsConnected) === true || (performance == null ? void 0 : performance.productViewsConnected) === true;
|
|
3165
|
-
const selectedChannelLabel = salesChannelId === "all" ? "All channels" : ((
|
|
3240
|
+
const selectedChannelLabel = salesChannelId === "all" ? "All channels" : ((_i = salesChannels.find((channel) => channel.id === salesChannelId)) == null ? void 0 : _i.name) ?? "Selected channel";
|
|
3166
3241
|
const primaryStats = [
|
|
3167
3242
|
{
|
|
3168
3243
|
label: "Units sold",
|
|
@@ -3708,7 +3783,7 @@ function ProductsDashboard() {
|
|
|
3708
3783
|
variant: "atlas",
|
|
3709
3784
|
actionsBare: true,
|
|
3710
3785
|
title: "Best sellers",
|
|
3711
|
-
description:
|
|
3786
|
+
description: bestSellerTrendProductTitle ? `Revenue and units over time for “${bestSellerTrendProductTitle}” (#1 by revenue in this window; all-time uses a 12‑month chart).` : "Revenue and units over time for the top product by revenue in this window (all-time leaderboard uses a 12‑month chart).",
|
|
3712
3787
|
actions: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
3713
3788
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3714
3789
|
ui.Label,
|
|
@@ -3784,6 +3859,20 @@ function ProductsDashboard() {
|
|
|
3784
3859
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3785
3860
|
recharts.YAxis,
|
|
3786
3861
|
{
|
|
3862
|
+
yAxisId: "units",
|
|
3863
|
+
tick: CHART_AXIS_TICK_SM,
|
|
3864
|
+
tickFormatter: (value) => formatShortNumber(Number(value)),
|
|
3865
|
+
width: 36,
|
|
3866
|
+
tickLine: false,
|
|
3867
|
+
axisLine: { stroke: CHART_AXIS_LINE },
|
|
3868
|
+
allowDecimals: false
|
|
3869
|
+
}
|
|
3870
|
+
),
|
|
3871
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3872
|
+
recharts.YAxis,
|
|
3873
|
+
{
|
|
3874
|
+
yAxisId: "revenue",
|
|
3875
|
+
orientation: "right",
|
|
3787
3876
|
tick: CHART_AXIS_TICK_SM,
|
|
3788
3877
|
tickFormatter: (value) => formatCompactCurrency(Number(value)),
|
|
3789
3878
|
width: 44,
|
|
@@ -3791,10 +3880,23 @@ function ProductsDashboard() {
|
|
|
3791
3880
|
axisLine: { stroke: CHART_AXIS_LINE }
|
|
3792
3881
|
}
|
|
3793
3882
|
),
|
|
3794
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3883
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3884
|
+
recharts.Tooltip,
|
|
3885
|
+
{
|
|
3886
|
+
content: (tooltipProps) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3887
|
+
MiniTrendTooltip,
|
|
3888
|
+
{
|
|
3889
|
+
...tooltipProps,
|
|
3890
|
+
productHeadline: bestSellerTrendProductTitle,
|
|
3891
|
+
hideViewsRow: true
|
|
3892
|
+
}
|
|
3893
|
+
)
|
|
3894
|
+
}
|
|
3895
|
+
),
|
|
3795
3896
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3796
3897
|
recharts.Area,
|
|
3797
3898
|
{
|
|
3899
|
+
yAxisId: "revenue",
|
|
3798
3900
|
type: "natural",
|
|
3799
3901
|
dataKey: "revenue",
|
|
3800
3902
|
name: "Revenue",
|
|
@@ -3806,6 +3908,7 @@ function ProductsDashboard() {
|
|
|
3806
3908
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3807
3909
|
recharts.Line,
|
|
3808
3910
|
{
|
|
3911
|
+
yAxisId: "revenue",
|
|
3809
3912
|
type: "natural",
|
|
3810
3913
|
dataKey: "revenue",
|
|
3811
3914
|
name: "Revenue",
|
|
@@ -3815,6 +3918,20 @@ function ProductsDashboard() {
|
|
|
3815
3918
|
activeDot: { r: 4, fill: PRODUCT_CHART_COLORS.revenue },
|
|
3816
3919
|
isAnimationActive: false
|
|
3817
3920
|
}
|
|
3921
|
+
),
|
|
3922
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3923
|
+
recharts.Line,
|
|
3924
|
+
{
|
|
3925
|
+
yAxisId: "units",
|
|
3926
|
+
type: "natural",
|
|
3927
|
+
dataKey: "units_sold",
|
|
3928
|
+
name: "Units sold",
|
|
3929
|
+
stroke: PRODUCT_CHART_COLORS.units,
|
|
3930
|
+
strokeWidth: 2,
|
|
3931
|
+
dot: false,
|
|
3932
|
+
activeDot: { r: 4, fill: PRODUCT_CHART_COLORS.units },
|
|
3933
|
+
isAnimationActive: false
|
|
3934
|
+
}
|
|
3818
3935
|
)
|
|
3819
3936
|
]
|
|
3820
3937
|
}
|
|
@@ -3861,7 +3978,7 @@ function ProductsDashboard() {
|
|
|
3861
3978
|
product.product_id
|
|
3862
3979
|
);
|
|
3863
3980
|
}) : null,
|
|
3864
|
-
!topSellersLoading && !topSellersError && (((
|
|
3981
|
+
!topSellersLoading && !topSellersError && (((_j = topSellers == null ? void 0 : topSellers.products) == null ? void 0 : _j.length) ?? 0) === 0 ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
|
|
3865
3982
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-muted text-xs", children: "No best seller data yet." }) }),
|
|
3866
3983
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, {}),
|
|
3867
3984
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, {}),
|
|
@@ -3877,7 +3994,7 @@ function ProductsDashboard() {
|
|
|
3877
3994
|
variant: "atlas",
|
|
3878
3995
|
className: "min-w-0 md:col-span-1 xl:col-span-1",
|
|
3879
3996
|
title: "Most viewed products",
|
|
3880
|
-
description:
|
|
3997
|
+
description: mostViewedTrendProductTitle ? `Views over time for “${mostViewedTrendProductTitle}” (top of the list for your summary period; buckets follow period: today / 7d → week, 30d → month, 90d / all → year).` : "Views over time for the most-viewed product in your summary period (buckets: today / 7d → week, 30d → month, 90d / all → year).",
|
|
3881
3998
|
children: performanceLoading ? /* @__PURE__ */ jsxRuntime.jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-[212px] items-center justify-center sm:h-[228px]", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-muted text-xs", children: "Loading…" }) }) }) : performanceError ? /* @__PURE__ */ jsxRuntime.jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-[212px] items-center justify-center px-2 sm:h-[228px]", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-danger text-center text-xs", children: performanceError }) }) }) : !(performance == null ? void 0 : performance.productViewsConnected) ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[212px] sm:min-h-[228px]", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3882
3999
|
EmptyAnalyticsPanel,
|
|
3883
4000
|
{
|
|
@@ -3953,7 +4070,20 @@ function ProductsDashboard() {
|
|
|
3953
4070
|
allowDecimals: false
|
|
3954
4071
|
}
|
|
3955
4072
|
),
|
|
3956
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4073
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4074
|
+
recharts.Tooltip,
|
|
4075
|
+
{
|
|
4076
|
+
content: (tooltipProps) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4077
|
+
MiniTrendTooltip,
|
|
4078
|
+
{
|
|
4079
|
+
...tooltipProps,
|
|
4080
|
+
productHeadline: mostViewedTrendProductTitle,
|
|
4081
|
+
hideUnitsRow: true,
|
|
4082
|
+
hideRevenueRow: true
|
|
4083
|
+
}
|
|
4084
|
+
)
|
|
4085
|
+
}
|
|
4086
|
+
),
|
|
3957
4087
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3958
4088
|
recharts.Area,
|
|
3959
4089
|
{
|
|
@@ -4004,7 +4134,7 @@ function ProductsDashboard() {
|
|
|
4004
4134
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: product.units_sold.toLocaleString() }),
|
|
4005
4135
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: formatRatio(product.views_per_unit) })
|
|
4006
4136
|
] }, product.product_id)),
|
|
4007
|
-
!performanceLoading && !performanceError && (((
|
|
4137
|
+
!performanceLoading && !performanceError && (((_k = performance == null ? void 0 : performance.viewOpportunities) == null ? void 0 : _k.length) ?? 0) === 0 ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
|
|
4008
4138
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-muted text-xs", children: "No product view opportunities yet." }) }),
|
|
4009
4139
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, {}),
|
|
4010
4140
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, {}),
|
|
@@ -2808,28 +2808,35 @@ function TrendTooltip({
|
|
|
2808
2808
|
function MiniTrendTooltip({
|
|
2809
2809
|
active,
|
|
2810
2810
|
payload,
|
|
2811
|
-
label
|
|
2811
|
+
label,
|
|
2812
|
+
productHeadline,
|
|
2813
|
+
hideViewsRow,
|
|
2814
|
+
hideUnitsRow,
|
|
2815
|
+
hideRevenueRow
|
|
2812
2816
|
}) {
|
|
2813
2817
|
var _a, _b, _c, _d, _e;
|
|
2814
2818
|
if (!active || !(payload == null ? void 0 : payload.length)) return null;
|
|
2815
2819
|
const row = isProductOverTimePoint((_a = payload[0]) == null ? void 0 : _a.payload) ? (_b = payload[0]) == null ? void 0 : _b.payload : void 0;
|
|
2816
|
-
const
|
|
2820
|
+
const labelKey = label !== void 0 && label !== null ? String(label) : "";
|
|
2821
|
+
const displayLabel = (row == null ? void 0 : row.label) ?? (labelKey ? new Date(labelKey).toLocaleDateString() : "");
|
|
2817
2822
|
const unitsSold = ((_c = payload.find((entry) => entry.name === "Units sold")) == null ? void 0 : _c.value) ?? 0;
|
|
2818
2823
|
const views = ((_d = payload.find((entry) => entry.name === "Views")) == null ? void 0 : _d.value) ?? 0;
|
|
2819
2824
|
const revenue = ((_e = payload.find((entry) => entry.name === "Revenue")) == null ? void 0 : _e.value) ?? 0;
|
|
2820
|
-
|
|
2821
|
-
|
|
2825
|
+
const title = productHeadline ?? displayLabel;
|
|
2826
|
+
return /* @__PURE__ */ jsxs(AnalyticsTooltipCard, { variant: "compact", title, children: [
|
|
2827
|
+
productHeadline ? /* @__PURE__ */ jsx("div", { className: "mb-1 text-[10px] leading-tight opacity-80", children: displayLabel }) : null,
|
|
2828
|
+
!hideUnitsRow ? /* @__PURE__ */ jsxs("div", { children: [
|
|
2822
2829
|
"Units sold: ",
|
|
2823
2830
|
/* @__PURE__ */ jsx("strong", { children: Math.floor(Number(unitsSold)).toLocaleString() })
|
|
2824
|
-
] }),
|
|
2825
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
2831
|
+
] }) : null,
|
|
2832
|
+
!hideViewsRow ? /* @__PURE__ */ jsxs("div", { children: [
|
|
2826
2833
|
"Views: ",
|
|
2827
2834
|
/* @__PURE__ */ jsx("strong", { children: Math.floor(Number(views)).toLocaleString() })
|
|
2828
|
-
] }),
|
|
2829
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
2835
|
+
] }) : null,
|
|
2836
|
+
!hideRevenueRow ? /* @__PURE__ */ jsxs("div", { children: [
|
|
2830
2837
|
"Revenue: ",
|
|
2831
2838
|
/* @__PURE__ */ jsx("strong", { children: formatCurrency(Number(revenue)) })
|
|
2832
|
-
] })
|
|
2839
|
+
] }) : null
|
|
2833
2840
|
] });
|
|
2834
2841
|
}
|
|
2835
2842
|
function ProductBarTooltip({
|
|
@@ -2889,7 +2896,7 @@ function EmptyAnalyticsPanel({ title, description }) {
|
|
|
2889
2896
|
] });
|
|
2890
2897
|
}
|
|
2891
2898
|
function ProductsDashboard() {
|
|
2892
|
-
var _a, _b, _c, _d, _e;
|
|
2899
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
2893
2900
|
const [summaryDays, setSummaryDays] = useState("all");
|
|
2894
2901
|
const [graphPeriod, setGraphPeriod] = useState("one_week");
|
|
2895
2902
|
const [topSellerPeriod, setTopSellerPeriod] = useState("week");
|
|
@@ -3016,14 +3023,43 @@ function ProductsDashboard() {
|
|
|
3016
3023
|
};
|
|
3017
3024
|
}, [salesChannelId, topSellerPeriod]);
|
|
3018
3025
|
useEffect(() => {
|
|
3026
|
+
var _a2, _b2;
|
|
3019
3027
|
let cancelled = false;
|
|
3028
|
+
if (topSellersLoading) {
|
|
3029
|
+
setBestSellersTrendLoading(true);
|
|
3030
|
+
return () => {
|
|
3031
|
+
cancelled = true;
|
|
3032
|
+
};
|
|
3033
|
+
}
|
|
3034
|
+
if (topSellersError) {
|
|
3035
|
+
setBestSellersTrendLoading(false);
|
|
3036
|
+
setBestSellersTrendError(topSellersError);
|
|
3037
|
+
setBestSellersTrend(null);
|
|
3038
|
+
return () => {
|
|
3039
|
+
cancelled = true;
|
|
3040
|
+
};
|
|
3041
|
+
}
|
|
3042
|
+
const topProductId = (_b2 = (_a2 = topSellers == null ? void 0 : topSellers.products) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.product_id;
|
|
3043
|
+
if (!topProductId) {
|
|
3044
|
+
setBestSellersTrendLoading(false);
|
|
3045
|
+
setBestSellersTrendError(null);
|
|
3046
|
+
setBestSellersTrend({
|
|
3047
|
+
series: [],
|
|
3048
|
+
productViewsConnected: (topSellers == null ? void 0 : topSellers.productViewsConnected) ?? false,
|
|
3049
|
+
product: null
|
|
3050
|
+
});
|
|
3051
|
+
return () => {
|
|
3052
|
+
cancelled = true;
|
|
3053
|
+
};
|
|
3054
|
+
}
|
|
3020
3055
|
setBestSellersTrendLoading(true);
|
|
3021
3056
|
setBestSellersTrendError(null);
|
|
3022
3057
|
const period = topSellerPeriodToGraphPeriod(topSellerPeriod);
|
|
3023
3058
|
fetch(
|
|
3024
3059
|
buildAnalyticsUrl("/admin/analytics/products-over-time", {
|
|
3025
3060
|
period,
|
|
3026
|
-
sales_channel_id: salesChannelId !== "all" ? salesChannelId : null
|
|
3061
|
+
sales_channel_id: salesChannelId !== "all" ? salesChannelId : null,
|
|
3062
|
+
product_id: topProductId
|
|
3027
3063
|
}),
|
|
3028
3064
|
{ credentials: "include" }
|
|
3029
3065
|
).then((res) => {
|
|
@@ -3041,16 +3077,53 @@ function ProductsDashboard() {
|
|
|
3041
3077
|
return () => {
|
|
3042
3078
|
cancelled = true;
|
|
3043
3079
|
};
|
|
3044
|
-
}, [salesChannelId, topSellerPeriod]);
|
|
3080
|
+
}, [salesChannelId, topSellerPeriod, topSellersLoading, topSellersError, topSellers]);
|
|
3045
3081
|
useEffect(() => {
|
|
3082
|
+
var _a2, _b2;
|
|
3046
3083
|
let cancelled = false;
|
|
3084
|
+
if (performanceLoading) {
|
|
3085
|
+
setMostViewedTrendLoading(true);
|
|
3086
|
+
return () => {
|
|
3087
|
+
cancelled = true;
|
|
3088
|
+
};
|
|
3089
|
+
}
|
|
3090
|
+
if (performanceError) {
|
|
3091
|
+
setMostViewedTrendLoading(false);
|
|
3092
|
+
setMostViewedTrendError(performanceError);
|
|
3093
|
+
setMostViewedTrend(null);
|
|
3094
|
+
return () => {
|
|
3095
|
+
cancelled = true;
|
|
3096
|
+
};
|
|
3097
|
+
}
|
|
3098
|
+
if (!(performance == null ? void 0 : performance.productViewsConnected)) {
|
|
3099
|
+
setMostViewedTrendLoading(false);
|
|
3100
|
+
setMostViewedTrendError(null);
|
|
3101
|
+
setMostViewedTrend(null);
|
|
3102
|
+
return () => {
|
|
3103
|
+
cancelled = true;
|
|
3104
|
+
};
|
|
3105
|
+
}
|
|
3106
|
+
const topViewedId = (_b2 = (_a2 = performance.topViewedProducts) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.product_id;
|
|
3107
|
+
if (!topViewedId) {
|
|
3108
|
+
setMostViewedTrendLoading(false);
|
|
3109
|
+
setMostViewedTrendError(null);
|
|
3110
|
+
setMostViewedTrend({
|
|
3111
|
+
series: [],
|
|
3112
|
+
productViewsConnected: true,
|
|
3113
|
+
product: null
|
|
3114
|
+
});
|
|
3115
|
+
return () => {
|
|
3116
|
+
cancelled = true;
|
|
3117
|
+
};
|
|
3118
|
+
}
|
|
3047
3119
|
setMostViewedTrendLoading(true);
|
|
3048
3120
|
setMostViewedTrendError(null);
|
|
3049
3121
|
const period = summaryDaysToGraphPeriod(summaryDays);
|
|
3050
3122
|
fetch(
|
|
3051
3123
|
buildAnalyticsUrl("/admin/analytics/products-over-time", {
|
|
3052
3124
|
period,
|
|
3053
|
-
sales_channel_id: salesChannelId !== "all" ? salesChannelId : null
|
|
3125
|
+
sales_channel_id: salesChannelId !== "all" ? salesChannelId : null,
|
|
3126
|
+
product_id: topViewedId
|
|
3054
3127
|
}),
|
|
3055
3128
|
{ credentials: "include" }
|
|
3056
3129
|
).then((res) => {
|
|
@@ -3068,7 +3141,7 @@ function ProductsDashboard() {
|
|
|
3068
3141
|
return () => {
|
|
3069
3142
|
cancelled = true;
|
|
3070
3143
|
};
|
|
3071
|
-
}, [salesChannelId, summaryDays]);
|
|
3144
|
+
}, [salesChannelId, summaryDays, performanceLoading, performanceError, performance]);
|
|
3072
3145
|
useEffect(() => {
|
|
3073
3146
|
let cancelled = false;
|
|
3074
3147
|
setPerformanceLoading(true);
|
|
@@ -3114,12 +3187,14 @@ function ProductsDashboard() {
|
|
|
3114
3187
|
const viewsConnectedForPulse = ((summary == null ? void 0 : summary.productViewsConnected) ?? false) || (overTime == null ? void 0 : overTime.productViewsConnected) === true || (topSellers == null ? void 0 : topSellers.productViewsConnected) === true || (performance == null ? void 0 : performance.productViewsConnected) === true;
|
|
3115
3188
|
const bestSellersTrendSeries = (bestSellersTrend == null ? void 0 : bestSellersTrend.series) ?? [];
|
|
3116
3189
|
const mostViewedTrendSeries = (mostViewedTrend == null ? void 0 : mostViewedTrend.series) ?? [];
|
|
3190
|
+
const bestSellerTrendProductTitle = ((_a = bestSellersTrend == null ? void 0 : bestSellersTrend.product) == null ? void 0 : _a.product_title) ?? ((_c = (_b = topSellers == null ? void 0 : topSellers.products) == null ? void 0 : _b[0]) == null ? void 0 : _c.product_title) ?? null;
|
|
3191
|
+
const mostViewedTrendProductTitle = ((_d = mostViewedTrend == null ? void 0 : mostViewedTrend.product) == null ? void 0 : _d.product_title) ?? ((_f = (_e = performance == null ? void 0 : performance.topViewedProducts) == null ? void 0 : _e[0]) == null ? void 0 : _f.product_title) ?? null;
|
|
3117
3192
|
const viewsVsUnitsScatterData = useMemo(
|
|
3118
3193
|
() => ((performance == null ? void 0 : performance.topViewedProducts) ?? []).slice(0, 48).filter((row) => row.total_views > 0 || row.units_sold > 0),
|
|
3119
3194
|
[performance]
|
|
3120
3195
|
);
|
|
3121
|
-
const selectedSummaryPeriod = ((
|
|
3122
|
-
const selectedGraphPeriodLabel = ((
|
|
3196
|
+
const selectedSummaryPeriod = ((_g = SUMMARY_PERIODS.find((p) => p.value === summaryDays)) == null ? void 0 : _g.label) ?? "All time";
|
|
3197
|
+
const selectedGraphPeriodLabel = ((_h = GRAPH_PERIODS.find((p) => p.value === graphPeriod)) == null ? void 0 : _h.label) ?? "One week";
|
|
3123
3198
|
const quickPulseMetrics = [
|
|
3124
3199
|
{
|
|
3125
3200
|
label: "Range units",
|
|
@@ -3161,7 +3236,7 @@ function ProductsDashboard() {
|
|
|
3161
3236
|
return /* @__PURE__ */ jsx(Container, { className: "p-6", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-danger", children: summaryError ?? "Failed to load product analytics" }) });
|
|
3162
3237
|
}
|
|
3163
3238
|
const viewsConnected = summary.productViewsConnected || (overTime == null ? void 0 : overTime.productViewsConnected) === true || (topSellers == null ? void 0 : topSellers.productViewsConnected) === true || (performance == null ? void 0 : performance.productViewsConnected) === true;
|
|
3164
|
-
const selectedChannelLabel = salesChannelId === "all" ? "All channels" : ((
|
|
3239
|
+
const selectedChannelLabel = salesChannelId === "all" ? "All channels" : ((_i = salesChannels.find((channel) => channel.id === salesChannelId)) == null ? void 0 : _i.name) ?? "Selected channel";
|
|
3165
3240
|
const primaryStats = [
|
|
3166
3241
|
{
|
|
3167
3242
|
label: "Units sold",
|
|
@@ -3707,7 +3782,7 @@ function ProductsDashboard() {
|
|
|
3707
3782
|
variant: "atlas",
|
|
3708
3783
|
actionsBare: true,
|
|
3709
3784
|
title: "Best sellers",
|
|
3710
|
-
description:
|
|
3785
|
+
description: bestSellerTrendProductTitle ? `Revenue and units over time for “${bestSellerTrendProductTitle}” (#1 by revenue in this window; all-time uses a 12‑month chart).` : "Revenue and units over time for the top product by revenue in this window (all-time leaderboard uses a 12‑month chart).",
|
|
3711
3786
|
actions: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
3712
3787
|
/* @__PURE__ */ jsx(
|
|
3713
3788
|
Label,
|
|
@@ -3783,6 +3858,20 @@ function ProductsDashboard() {
|
|
|
3783
3858
|
/* @__PURE__ */ jsx(
|
|
3784
3859
|
YAxis,
|
|
3785
3860
|
{
|
|
3861
|
+
yAxisId: "units",
|
|
3862
|
+
tick: CHART_AXIS_TICK_SM,
|
|
3863
|
+
tickFormatter: (value) => formatShortNumber(Number(value)),
|
|
3864
|
+
width: 36,
|
|
3865
|
+
tickLine: false,
|
|
3866
|
+
axisLine: { stroke: CHART_AXIS_LINE },
|
|
3867
|
+
allowDecimals: false
|
|
3868
|
+
}
|
|
3869
|
+
),
|
|
3870
|
+
/* @__PURE__ */ jsx(
|
|
3871
|
+
YAxis,
|
|
3872
|
+
{
|
|
3873
|
+
yAxisId: "revenue",
|
|
3874
|
+
orientation: "right",
|
|
3786
3875
|
tick: CHART_AXIS_TICK_SM,
|
|
3787
3876
|
tickFormatter: (value) => formatCompactCurrency(Number(value)),
|
|
3788
3877
|
width: 44,
|
|
@@ -3790,10 +3879,23 @@ function ProductsDashboard() {
|
|
|
3790
3879
|
axisLine: { stroke: CHART_AXIS_LINE }
|
|
3791
3880
|
}
|
|
3792
3881
|
),
|
|
3793
|
-
/* @__PURE__ */ jsx(
|
|
3882
|
+
/* @__PURE__ */ jsx(
|
|
3883
|
+
Tooltip,
|
|
3884
|
+
{
|
|
3885
|
+
content: (tooltipProps) => /* @__PURE__ */ jsx(
|
|
3886
|
+
MiniTrendTooltip,
|
|
3887
|
+
{
|
|
3888
|
+
...tooltipProps,
|
|
3889
|
+
productHeadline: bestSellerTrendProductTitle,
|
|
3890
|
+
hideViewsRow: true
|
|
3891
|
+
}
|
|
3892
|
+
)
|
|
3893
|
+
}
|
|
3894
|
+
),
|
|
3794
3895
|
/* @__PURE__ */ jsx(
|
|
3795
3896
|
Area,
|
|
3796
3897
|
{
|
|
3898
|
+
yAxisId: "revenue",
|
|
3797
3899
|
type: "natural",
|
|
3798
3900
|
dataKey: "revenue",
|
|
3799
3901
|
name: "Revenue",
|
|
@@ -3805,6 +3907,7 @@ function ProductsDashboard() {
|
|
|
3805
3907
|
/* @__PURE__ */ jsx(
|
|
3806
3908
|
Line,
|
|
3807
3909
|
{
|
|
3910
|
+
yAxisId: "revenue",
|
|
3808
3911
|
type: "natural",
|
|
3809
3912
|
dataKey: "revenue",
|
|
3810
3913
|
name: "Revenue",
|
|
@@ -3814,6 +3917,20 @@ function ProductsDashboard() {
|
|
|
3814
3917
|
activeDot: { r: 4, fill: PRODUCT_CHART_COLORS.revenue },
|
|
3815
3918
|
isAnimationActive: false
|
|
3816
3919
|
}
|
|
3920
|
+
),
|
|
3921
|
+
/* @__PURE__ */ jsx(
|
|
3922
|
+
Line,
|
|
3923
|
+
{
|
|
3924
|
+
yAxisId: "units",
|
|
3925
|
+
type: "natural",
|
|
3926
|
+
dataKey: "units_sold",
|
|
3927
|
+
name: "Units sold",
|
|
3928
|
+
stroke: PRODUCT_CHART_COLORS.units,
|
|
3929
|
+
strokeWidth: 2,
|
|
3930
|
+
dot: false,
|
|
3931
|
+
activeDot: { r: 4, fill: PRODUCT_CHART_COLORS.units },
|
|
3932
|
+
isAnimationActive: false
|
|
3933
|
+
}
|
|
3817
3934
|
)
|
|
3818
3935
|
]
|
|
3819
3936
|
}
|
|
@@ -3860,7 +3977,7 @@ function ProductsDashboard() {
|
|
|
3860
3977
|
product.product_id
|
|
3861
3978
|
);
|
|
3862
3979
|
}) : null,
|
|
3863
|
-
!topSellersLoading && !topSellersError && (((
|
|
3980
|
+
!topSellersLoading && !topSellersError && (((_j = topSellers == null ? void 0 : topSellers.products) == null ? void 0 : _j.length) ?? 0) === 0 ? /* @__PURE__ */ jsxs(Table.Row, { children: [
|
|
3864
3981
|
/* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-muted text-xs", children: "No best seller data yet." }) }),
|
|
3865
3982
|
/* @__PURE__ */ jsx(Table.Cell, {}),
|
|
3866
3983
|
/* @__PURE__ */ jsx(Table.Cell, {}),
|
|
@@ -3876,7 +3993,7 @@ function ProductsDashboard() {
|
|
|
3876
3993
|
variant: "atlas",
|
|
3877
3994
|
className: "min-w-0 md:col-span-1 xl:col-span-1",
|
|
3878
3995
|
title: "Most viewed products",
|
|
3879
|
-
description:
|
|
3996
|
+
description: mostViewedTrendProductTitle ? `Views over time for “${mostViewedTrendProductTitle}” (top of the list for your summary period; buckets follow period: today / 7d → week, 30d → month, 90d / all → year).` : "Views over time for the most-viewed product in your summary period (buckets: today / 7d → week, 30d → month, 90d / all → year).",
|
|
3880
3997
|
children: performanceLoading ? /* @__PURE__ */ jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsx("div", { className: "flex h-[212px] items-center justify-center sm:h-[228px]", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-muted text-xs", children: "Loading…" }) }) }) : performanceError ? /* @__PURE__ */ jsx(AnalyticsChartSurface, { variant: "atlas", children: /* @__PURE__ */ jsx("div", { className: "flex h-[212px] items-center justify-center px-2 sm:h-[228px]", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-danger text-center text-xs", children: performanceError }) }) }) : !(performance == null ? void 0 : performance.productViewsConnected) ? /* @__PURE__ */ jsx("div", { className: "min-h-[212px] sm:min-h-[228px]", children: /* @__PURE__ */ jsx(
|
|
3881
3998
|
EmptyAnalyticsPanel,
|
|
3882
3999
|
{
|
|
@@ -3952,7 +4069,20 @@ function ProductsDashboard() {
|
|
|
3952
4069
|
allowDecimals: false
|
|
3953
4070
|
}
|
|
3954
4071
|
),
|
|
3955
|
-
/* @__PURE__ */ jsx(
|
|
4072
|
+
/* @__PURE__ */ jsx(
|
|
4073
|
+
Tooltip,
|
|
4074
|
+
{
|
|
4075
|
+
content: (tooltipProps) => /* @__PURE__ */ jsx(
|
|
4076
|
+
MiniTrendTooltip,
|
|
4077
|
+
{
|
|
4078
|
+
...tooltipProps,
|
|
4079
|
+
productHeadline: mostViewedTrendProductTitle,
|
|
4080
|
+
hideUnitsRow: true,
|
|
4081
|
+
hideRevenueRow: true
|
|
4082
|
+
}
|
|
4083
|
+
)
|
|
4084
|
+
}
|
|
4085
|
+
),
|
|
3956
4086
|
/* @__PURE__ */ jsx(
|
|
3957
4087
|
Area,
|
|
3958
4088
|
{
|
|
@@ -4003,7 +4133,7 @@ function ProductsDashboard() {
|
|
|
4003
4133
|
/* @__PURE__ */ jsx(Table.Cell, { children: product.units_sold.toLocaleString() }),
|
|
4004
4134
|
/* @__PURE__ */ jsx(Table.Cell, { children: formatRatio(product.views_per_unit) })
|
|
4005
4135
|
] }, product.product_id)),
|
|
4006
|
-
!performanceLoading && !performanceError && (((
|
|
4136
|
+
!performanceLoading && !performanceError && (((_k = performance == null ? void 0 : performance.viewOpportunities) == null ? void 0 : _k.length) ?? 0) === 0 ? /* @__PURE__ */ jsxs(Table.Row, { children: [
|
|
4007
4137
|
/* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-muted text-xs", children: "No product view opportunities yet." }) }),
|
|
4008
4138
|
/* @__PURE__ */ jsx(Table.Cell, {}),
|
|
4009
4139
|
/* @__PURE__ */ jsx(Table.Cell, {}),
|
|
@@ -4,6 +4,7 @@ exports.parseDaysParam = parseDaysParam;
|
|
|
4
4
|
exports.parseTopSellerPeriod = parseTopSellerPeriod;
|
|
5
5
|
exports.parseOverTimePeriod = parseOverTimePeriod;
|
|
6
6
|
exports.parseSalesChannelId = parseSalesChannelId;
|
|
7
|
+
exports.parseProductId = parseProductId;
|
|
7
8
|
exports.getRangeFromDays = getRangeFromDays;
|
|
8
9
|
exports.getRangeFromTopSellerPeriod = getRangeFromTopSellerPeriod;
|
|
9
10
|
exports.listSalesChannels = listSalesChannels;
|
|
@@ -126,6 +127,61 @@ function parseSalesChannelId(value) {
|
|
|
126
127
|
return null;
|
|
127
128
|
return normalized;
|
|
128
129
|
}
|
|
130
|
+
function parseProductId(value) {
|
|
131
|
+
if (typeof value !== "string")
|
|
132
|
+
return null;
|
|
133
|
+
const normalized = value.trim();
|
|
134
|
+
if (!normalized)
|
|
135
|
+
return null;
|
|
136
|
+
return normalized;
|
|
137
|
+
}
|
|
138
|
+
async function resolveProductVariantFilter(req, productId, salesChannelId) {
|
|
139
|
+
const allowedProductIds = await getAllowedProductIdsForSalesChannel(req, salesChannelId);
|
|
140
|
+
if (allowedProductIds && !allowedProductIds.has(productId)) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
144
|
+
const productResult = await query.graph({
|
|
145
|
+
entity: "product",
|
|
146
|
+
fields: ["id", "title"],
|
|
147
|
+
filters: { id: productId },
|
|
148
|
+
pagination: {
|
|
149
|
+
take: 1,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
const products = Array.isArray(productResult?.data)
|
|
153
|
+
? productResult.data
|
|
154
|
+
: [];
|
|
155
|
+
const productRow = products[0];
|
|
156
|
+
if (!productRow?.id) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const variantResult = await query.graph({
|
|
160
|
+
entity: "product_variant",
|
|
161
|
+
fields: ["id"],
|
|
162
|
+
filters: { product_id: productId },
|
|
163
|
+
pagination: {
|
|
164
|
+
take: 50000,
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
const variants = Array.isArray(variantResult?.data)
|
|
168
|
+
? variantResult.data
|
|
169
|
+
: [];
|
|
170
|
+
const variantIds = new Set();
|
|
171
|
+
for (const variant of variants) {
|
|
172
|
+
if (variant.id) {
|
|
173
|
+
variantIds.add(variant.id);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (variantIds.size === 0) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
product_id: productRow.id,
|
|
181
|
+
product_title: productRow.title?.trim() || "Unknown product",
|
|
182
|
+
variantIds,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
129
185
|
function getRangeFromDays(days) {
|
|
130
186
|
const today = new Date();
|
|
131
187
|
today.setUTCHours(0, 0, 0, 0);
|
|
@@ -526,7 +582,7 @@ async function aggregateProductViews(req, range, salesChannelId = null) {
|
|
|
526
582
|
products,
|
|
527
583
|
};
|
|
528
584
|
}
|
|
529
|
-
async function getProductsOverTime(req, period, salesChannelId = null) {
|
|
585
|
+
async function getProductsOverTime(req, period, salesChannelId = null, filterProductId = null) {
|
|
530
586
|
const buckets = createBuckets(period);
|
|
531
587
|
const range = {
|
|
532
588
|
start: new Date(buckets[0].start),
|
|
@@ -539,6 +595,24 @@ async function getProductsOverTime(req, period, salesChannelId = null) {
|
|
|
539
595
|
revenue: 0,
|
|
540
596
|
views: 0,
|
|
541
597
|
}));
|
|
598
|
+
let variantFilter = null;
|
|
599
|
+
let productMeta = null;
|
|
600
|
+
if (filterProductId) {
|
|
601
|
+
const resolved = await resolveProductVariantFilter(req, filterProductId, salesChannelId);
|
|
602
|
+
if (!resolved) {
|
|
603
|
+
const { connected } = await listProductViewsForRange(req, range);
|
|
604
|
+
return {
|
|
605
|
+
productViewsConnected: connected,
|
|
606
|
+
series: bucketRows,
|
|
607
|
+
product: null,
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
variantFilter = resolved.variantIds;
|
|
611
|
+
productMeta = {
|
|
612
|
+
product_id: resolved.product_id,
|
|
613
|
+
product_title: resolved.product_title,
|
|
614
|
+
};
|
|
615
|
+
}
|
|
542
616
|
const orders = await fetchOrdersWithItems(req);
|
|
543
617
|
for (const order of orders) {
|
|
544
618
|
if (isCancelled(order.status))
|
|
@@ -552,6 +626,10 @@ async function getProductsOverTime(req, period, salesChannelId = null) {
|
|
|
552
626
|
if (bucketIndex === -1)
|
|
553
627
|
continue;
|
|
554
628
|
for (const item of order.items ?? []) {
|
|
629
|
+
if (!item.variant_id)
|
|
630
|
+
continue;
|
|
631
|
+
if (variantFilter && !variantFilter.has(item.variant_id))
|
|
632
|
+
continue;
|
|
555
633
|
const quantity = extractLineItemQuantity(item);
|
|
556
634
|
const revenue = extractLineItemRevenue(item);
|
|
557
635
|
bucketRows[bucketIndex].units_sold += quantity;
|
|
@@ -559,19 +637,29 @@ async function getProductsOverTime(req, period, salesChannelId = null) {
|
|
|
559
637
|
}
|
|
560
638
|
}
|
|
561
639
|
const { connected, views } = await listProductViewsForRange(req, range);
|
|
562
|
-
const allowedProductIds = await getAllowedProductIdsForSalesChannel(req, salesChannelId);
|
|
563
640
|
if (connected) {
|
|
564
|
-
const
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
641
|
+
const allowedProductIds = variantFilter
|
|
642
|
+
? null
|
|
643
|
+
: await getAllowedProductIdsForSalesChannel(req, salesChannelId);
|
|
644
|
+
let lookup = null;
|
|
645
|
+
if (!variantFilter) {
|
|
646
|
+
const variantIds = Array.from(new Set(views
|
|
647
|
+
.map((view) => view.variant_id)
|
|
648
|
+
.filter((variantId) => Boolean(variantId))));
|
|
649
|
+
lookup = await buildProductLookup(req, variantIds);
|
|
650
|
+
}
|
|
568
651
|
for (const view of views) {
|
|
569
652
|
const createdAt = toValidDate(view.created_at);
|
|
570
653
|
if (!createdAt)
|
|
571
654
|
continue;
|
|
572
|
-
if (
|
|
573
|
-
|
|
574
|
-
|
|
655
|
+
if (variantFilter) {
|
|
656
|
+
if (!view.variant_id || !variantFilter.has(view.variant_id)) {
|
|
657
|
+
continue;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
else if (allowedProductIds && view.variant_id && lookup) {
|
|
661
|
+
const viewProductId = lookup.productIdByVariantId.get(view.variant_id);
|
|
662
|
+
if (!viewProductId || !allowedProductIds.has(viewProductId)) {
|
|
575
663
|
continue;
|
|
576
664
|
}
|
|
577
665
|
}
|
|
@@ -581,10 +669,17 @@ async function getProductsOverTime(req, period, salesChannelId = null) {
|
|
|
581
669
|
}
|
|
582
670
|
}
|
|
583
671
|
}
|
|
584
|
-
|
|
672
|
+
const base = {
|
|
585
673
|
productViewsConnected: connected,
|
|
586
674
|
series: bucketRows,
|
|
587
675
|
};
|
|
676
|
+
if (filterProductId !== null) {
|
|
677
|
+
return {
|
|
678
|
+
...base,
|
|
679
|
+
product: productMeta,
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
return base;
|
|
588
683
|
}
|
|
589
684
|
function combineSalesAndViews(salesProducts, viewProducts) {
|
|
590
685
|
const rows = new Map();
|
|
@@ -621,4 +716,4 @@ function combineSalesAndViews(salesProducts, viewProducts) {
|
|
|
621
716
|
: null,
|
|
622
717
|
}));
|
|
623
718
|
}
|
|
624
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9hZG1pbi9hbmFseXRpY3MvcHJvZHVjdHMvc2hhcmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb05BLHdDQVFDO0FBRUQsb0RBS0M7QUFFRCxrREFLQztBQUVELGtEQUtDO0FBRUQsNENBcUJDO0FBRUQsa0VBaUJDO0FBaU5ELDhDQXNCQztBQUVELHNEQXdHQztBQW9FRCxzREFrRUM7QUFFRCxrREE2RUM7QUFZRCxvREF5Q0M7QUFwM0JELHFEQUdrQztBQUVsQyxNQUFNLHVCQUF1QixHQUFHLGNBQWMsQ0FBQTtBQUM5QyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUE7QUFDbEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFBO0FBQ3BCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBRW5CLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQVUsQ0FBQTtBQUdwRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQVUsQ0FBQTtBQTBHeEUsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFBO0FBQ3BELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDckQsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzNE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
|
|
719
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9hZG1pbi9hbmFseXRpY3MvcHJvZHVjdHMvc2hhcmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb05BLHdDQVFDO0FBRUQsb0RBS0M7QUFFRCxrREFLQztBQUVELGtEQUtDO0FBRUQsd0NBS0M7QUF3RUQsNENBcUJDO0FBRUQsa0VBaUJDO0FBaU5ELDhDQXNCQztBQUVELHNEQXdHQztBQW9FRCxzREFrRUM7QUFFRCxrREEySEM7QUFZRCxvREF5Q0M7QUEvK0JELHFEQUdrQztBQUVsQyxNQUFNLHVCQUF1QixHQUFHLGNBQWMsQ0FBQTtBQUM5QyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUE7QUFDbEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFBO0FBQ3BCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBRW5CLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQVUsQ0FBQTtBQUdwRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQVUsQ0FBQTtBQTBHeEUsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFBO0FBQ3BELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDckQsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFB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
|
|
@@ -5,12 +5,16 @@ const shared_1 = require("../products/shared");
|
|
|
5
5
|
async function GET(req, res) {
|
|
6
6
|
const period = (0, shared_1.parseOverTimePeriod)(req.query?.period);
|
|
7
7
|
const salesChannelId = (0, shared_1.parseSalesChannelId)(req.query?.sales_channel_id);
|
|
8
|
+
const filterProductId = (0, shared_1.parseProductId)(req.query?.product_id);
|
|
8
9
|
try {
|
|
9
|
-
const result = await (0, shared_1.getProductsOverTime)(req, period, salesChannelId);
|
|
10
|
+
const result = await (0, shared_1.getProductsOverTime)(req, period, salesChannelId, filterProductId);
|
|
10
11
|
const body = {
|
|
11
12
|
series: result.series,
|
|
12
13
|
productViewsConnected: result.productViewsConnected,
|
|
13
14
|
};
|
|
15
|
+
if (filterProductId !== null) {
|
|
16
|
+
body.product = result.product ?? null;
|
|
17
|
+
}
|
|
14
18
|
res.json(body);
|
|
15
19
|
}
|
|
16
20
|
catch (err) {
|
|
@@ -21,4 +25,4 @@ async function GET(req, res) {
|
|
|
21
25
|
});
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FuYWx5dGljcy9wcm9kdWN0cy1vdmVyLXRpbWUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxrQkFpQ0M7QUF4Q0QsK0NBSzJCO0FBRXBCLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sTUFBTSxHQUFHLElBQUEsNEJBQW1CLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNyRCxNQUFNLGNBQWMsR0FBRyxJQUFBLDRCQUFtQixFQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUN2RSxNQUFNLGVBQWUsR0FBRyxJQUFBLHVCQUFjLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUU3RCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsNEJBQW1CLEVBQ3RDLEdBQUcsRUFDSCxNQUFNLEVBQ04sY0FBYyxFQUNkLGVBQWUsQ0FDaEIsQ0FBQTtRQUVELE1BQU0sSUFBSSxHQUF3QjtZQUNoQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIscUJBQXFCLEVBQUUsTUFBTSxDQUFDLHFCQUFxQjtTQUNwRCxDQUFBO1FBRUQsSUFBSSxlQUFlLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQTtRQUN2QyxDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoQixDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDekQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsS0FBSyxFQUFFLG9DQUFvQztZQUMzQyxPQUFPLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUMxRCxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyJ9
|