@gem-sdk/analytics 1.0.0-dev.21 → 1.0.0-dev.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/index.d.ts +0 -3
- package/dist/esm/constants/breakdown-targets.d.ts +1 -1
- package/dist/esm/constants/index.d.ts +0 -1
- package/dist/esm/core/gemxql/builder/clauses/mode-query.d.ts +1 -1
- package/dist/esm/core/gemxql/builder/clauses/time-query.d.ts +1 -2
- package/dist/esm/core/gemxql/builder/helpers/date-query-helpers.d.ts +1 -1
- package/dist/esm/core/gemxql/helpers/extractQueryData.d.ts +1 -1
- package/dist/esm/core/gemxql/helpers/getTimeDimension.d.ts +1 -1
- package/dist/esm/core/gemxql/hooks/useAnalyticData.d.ts +1 -4
- package/dist/esm/core/gemxql/index.d.ts +6 -3
- package/dist/esm/core/gemxql/types/analytic-mode.d.ts +5 -0
- package/dist/esm/core/gemxql/types/date-filter.d.ts +10 -0
- package/dist/esm/core/gemxql/types/index.d.ts +3 -0
- package/dist/esm/{utils → core/gemxql/utils}/analytics.d.ts +1 -0
- package/dist/esm/{utils → core/gemxql/utils}/dayjs.d.ts +0 -2
- package/dist/esm/gemxql.js +205 -347
- package/dist/esm/gemxql.mjs +205 -347
- package/dist/esm/hooks/index.d.ts +1 -3
- package/dist/esm/index.d.ts +2 -4
- package/dist/esm/index.js +467 -2133
- package/dist/esm/index.mjs +467 -2133
- package/dist/esm/providers/index.d.ts +0 -2
- package/dist/esm/shared/charts/components/GPolarisViz/components/ChartErrorBoundary/ChartErrorBoundary.d.ts +1 -1
- package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getDonutChartTooltipPosition.d.ts +1 -1
- package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getLineChartTooltipPosition.d.ts +1 -1
- package/dist/esm/shared/components/index.d.ts +0 -11
- package/dist/esm/types/index.d.ts +0 -3
- package/dist/esm/types.js +1 -31
- package/dist/esm/types.mjs +1 -31
- package/dist/esm/utils/index.d.ts +0 -3
- package/dist/style.css +1 -1
- package/dist/umd/esm/components/index.d.ts +0 -3
- package/dist/umd/esm/constants/breakdown-targets.d.ts +1 -1
- package/dist/umd/esm/constants/index.d.ts +0 -1
- package/dist/umd/esm/core/gemxql/builder/clauses/mode-query.d.ts +1 -1
- package/dist/umd/esm/core/gemxql/builder/clauses/time-query.d.ts +1 -2
- package/dist/umd/esm/core/gemxql/builder/helpers/date-query-helpers.d.ts +1 -1
- package/dist/umd/esm/core/gemxql/helpers/extractQueryData.d.ts +1 -1
- package/dist/umd/esm/core/gemxql/helpers/getTimeDimension.d.ts +1 -1
- package/dist/umd/esm/core/gemxql/hooks/useAnalyticData.d.ts +1 -4
- package/dist/umd/esm/core/gemxql/index.d.ts +6 -3
- package/dist/umd/esm/core/gemxql/types/analytic-mode.d.ts +5 -0
- package/dist/umd/esm/core/gemxql/types/date-filter.d.ts +10 -0
- package/dist/umd/esm/core/gemxql/types/index.d.ts +3 -0
- package/dist/umd/esm/{utils → core/gemxql/utils}/analytics.d.ts +1 -0
- package/dist/umd/esm/{utils → core/gemxql/utils}/dayjs.d.ts +0 -2
- package/dist/umd/esm/hooks/index.d.ts +1 -3
- package/dist/umd/esm/index.d.ts +2 -4
- package/dist/umd/esm/providers/index.d.ts +0 -2
- package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartErrorBoundary/ChartErrorBoundary.d.ts +1 -1
- package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getDonutChartTooltipPosition.d.ts +1 -1
- package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getLineChartTooltipPosition.d.ts +1 -1
- package/dist/umd/esm/shared/components/index.d.ts +0 -11
- package/dist/umd/esm/types/index.d.ts +0 -3
- package/dist/umd/esm/utils/index.d.ts +0 -3
- package/dist/umd/gemxql.js +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/types.js +1 -1
- package/package.json +2 -5
- package/dist/esm/components/AnalyticMode/AnalyticModeSelector.d.ts +0 -13
- package/dist/esm/components/AnalyticMode/index.d.ts +0 -2
- package/dist/esm/components/CurrencySelector/CurrencySelector.d.ts +0 -10
- package/dist/esm/components/CurrencySelector/index.d.ts +0 -2
- package/dist/esm/components/GTimePicker/GTimePicker.d.ts +0 -17
- package/dist/esm/components/GTimePicker/components/BaseTimePicker.d.ts +0 -10
- package/dist/esm/components/GTimePicker/components/CompareTimePicker.d.ts +0 -5
- package/dist/esm/components/GTimePicker/components/DateTimeFilterAddition.d.ts +0 -2
- package/dist/esm/components/GTimePicker/components/DateTimeFilterInputs.d.ts +0 -9
- package/dist/esm/components/GTimePicker/components/DateTimeFilters.d.ts +0 -15
- package/dist/esm/components/GTimePicker/components/MainTimePicker.d.ts +0 -3
- package/dist/esm/components/GTimePicker/components/index.d.ts +0 -2
- package/dist/esm/components/GTimePicker/constants/compareDateTimePicker.d.ts +0 -12
- package/dist/esm/components/GTimePicker/constants/datePicker.d.ts +0 -14
- package/dist/esm/components/GTimePicker/constants/index.d.ts +0 -2
- package/dist/esm/components/GTimePicker/constants/mainDataTimePicker.d.ts +0 -14
- package/dist/esm/components/GTimePicker/contexts/DateTimePickerProvider.d.ts +0 -15
- package/dist/esm/components/GTimePicker/contexts/index.d.ts +0 -1
- package/dist/esm/components/GTimePicker/helpers/date-range-info.d.ts +0 -16
- package/dist/esm/components/GTimePicker/helpers/index.d.ts +0 -4
- package/dist/esm/components/GTimePicker/helpers/parse-date.d.ts +0 -24
- package/dist/esm/components/GTimePicker/helpers/time-picker.d.ts +0 -76
- package/dist/esm/components/GTimePicker/helpers/version.d.ts +0 -2
- package/dist/esm/components/GTimePicker/hooks/index.d.ts +0 -3
- package/dist/esm/components/GTimePicker/hooks/useCompareDateTimePicker.d.ts +0 -25
- package/dist/esm/components/GTimePicker/hooks/useDateTimeFilter.d.ts +0 -18
- package/dist/esm/components/GTimePicker/hooks/useDateTimePicker.d.ts +0 -30
- package/dist/esm/components/GTimePicker/hooks/useVersionDateTimeFilters.d.ts +0 -9
- package/dist/esm/components/GTimePicker/index.d.ts +0 -7
- package/dist/esm/components/GTimePicker/types/index.d.ts +0 -38
- package/dist/esm/constants/currency.d.ts +0 -2
- package/dist/esm/hooks/publish/index.d.ts +0 -2
- package/dist/esm/hooks/publish/useStickyDetectById.d.ts +0 -8
- package/dist/esm/hooks/publish/useStickyFilterBoxProps.d.ts +0 -6
- package/dist/esm/hooks/useFetchCurrencyRates.d.ts +0 -1
- package/dist/esm/hooks/useToggle.d.ts +0 -12
- package/dist/esm/providers/ConvertMoneyProvider.d.ts +0 -13
- package/dist/esm/shared/components/GActivatorPopover/GActivatorPopover.d.ts +0 -23
- package/dist/esm/shared/components/GActivatorPopover/index.d.ts +0 -1
- package/dist/esm/shared/components/GButton/GButton.d.ts +0 -19
- package/dist/esm/shared/components/GButton/index.d.ts +0 -1
- package/dist/esm/shared/components/GCheckbox/GCheckbox.d.ts +0 -39
- package/dist/esm/shared/components/GCheckbox/index.d.ts +0 -1
- package/dist/esm/shared/components/GChoice/ChoiceHelpText.d.ts +0 -4
- package/dist/esm/shared/components/GChoice/GChoice.d.ts +0 -44
- package/dist/esm/shared/components/GChoice/index.d.ts +0 -2
- package/dist/esm/shared/components/GClickable/GClickable.d.ts +0 -10
- package/dist/esm/shared/components/GClickable/index.d.ts +0 -1
- package/dist/esm/shared/components/GDiv/GDiv.d.ts +0 -7
- package/dist/esm/shared/components/GDiv/index.d.ts +0 -1
- package/dist/esm/shared/components/GI18NText/GI18NText.d.ts +0 -2
- package/dist/esm/shared/components/GI18NText/index.d.ts +0 -2
- package/dist/esm/shared/components/GI18NText/types.d.ts +0 -6
- package/dist/esm/shared/components/GOptionList/GOptionList.d.ts +0 -11
- package/dist/esm/shared/components/GOptionList/index.d.ts +0 -1
- package/dist/esm/shared/components/GSelector/GSelector.d.ts +0 -27
- package/dist/esm/shared/components/GSelector/index.d.ts +0 -1
- package/dist/esm/shared/components/GTextLink/GTextLink.d.ts +0 -9
- package/dist/esm/shared/components/GTextLink/index.d.ts +0 -1
- package/dist/esm/shared/components/GViewBySelector/GViewBySelector.d.ts +0 -17
- package/dist/esm/shared/components/GViewBySelector/index.d.ts +0 -1
- package/dist/esm/stores/currencyRatesStore.d.ts +0 -7
- package/dist/esm/stores/index.d.ts +0 -2
- package/dist/esm/types/analytic-mode.d.ts +0 -5
- package/dist/esm/types/currency.d.ts +0 -329
- package/dist/esm/utils/currency.d.ts +0 -5
- package/dist/esm/utils/sort.d.ts +0 -13
- package/dist/umd/esm/components/AnalyticMode/AnalyticModeSelector.d.ts +0 -13
- package/dist/umd/esm/components/AnalyticMode/index.d.ts +0 -2
- package/dist/umd/esm/components/CurrencySelector/CurrencySelector.d.ts +0 -10
- package/dist/umd/esm/components/CurrencySelector/index.d.ts +0 -2
- package/dist/umd/esm/components/GTimePicker/GTimePicker.d.ts +0 -17
- package/dist/umd/esm/components/GTimePicker/components/BaseTimePicker.d.ts +0 -10
- package/dist/umd/esm/components/GTimePicker/components/CompareTimePicker.d.ts +0 -5
- package/dist/umd/esm/components/GTimePicker/components/DateTimeFilterAddition.d.ts +0 -2
- package/dist/umd/esm/components/GTimePicker/components/DateTimeFilterInputs.d.ts +0 -9
- package/dist/umd/esm/components/GTimePicker/components/DateTimeFilters.d.ts +0 -15
- package/dist/umd/esm/components/GTimePicker/components/MainTimePicker.d.ts +0 -3
- package/dist/umd/esm/components/GTimePicker/components/index.d.ts +0 -2
- package/dist/umd/esm/components/GTimePicker/constants/compareDateTimePicker.d.ts +0 -12
- package/dist/umd/esm/components/GTimePicker/constants/datePicker.d.ts +0 -14
- package/dist/umd/esm/components/GTimePicker/constants/index.d.ts +0 -2
- package/dist/umd/esm/components/GTimePicker/constants/mainDataTimePicker.d.ts +0 -14
- package/dist/umd/esm/components/GTimePicker/contexts/DateTimePickerProvider.d.ts +0 -15
- package/dist/umd/esm/components/GTimePicker/contexts/index.d.ts +0 -1
- package/dist/umd/esm/components/GTimePicker/helpers/date-range-info.d.ts +0 -16
- package/dist/umd/esm/components/GTimePicker/helpers/index.d.ts +0 -4
- package/dist/umd/esm/components/GTimePicker/helpers/parse-date.d.ts +0 -24
- package/dist/umd/esm/components/GTimePicker/helpers/time-picker.d.ts +0 -76
- package/dist/umd/esm/components/GTimePicker/helpers/version.d.ts +0 -2
- package/dist/umd/esm/components/GTimePicker/hooks/index.d.ts +0 -3
- package/dist/umd/esm/components/GTimePicker/hooks/useCompareDateTimePicker.d.ts +0 -25
- package/dist/umd/esm/components/GTimePicker/hooks/useDateTimeFilter.d.ts +0 -18
- package/dist/umd/esm/components/GTimePicker/hooks/useDateTimePicker.d.ts +0 -30
- package/dist/umd/esm/components/GTimePicker/hooks/useVersionDateTimeFilters.d.ts +0 -9
- package/dist/umd/esm/components/GTimePicker/index.d.ts +0 -7
- package/dist/umd/esm/components/GTimePicker/types/index.d.ts +0 -38
- package/dist/umd/esm/constants/currency.d.ts +0 -2
- package/dist/umd/esm/hooks/publish/index.d.ts +0 -2
- package/dist/umd/esm/hooks/publish/useStickyDetectById.d.ts +0 -8
- package/dist/umd/esm/hooks/publish/useStickyFilterBoxProps.d.ts +0 -6
- package/dist/umd/esm/hooks/useFetchCurrencyRates.d.ts +0 -1
- package/dist/umd/esm/hooks/useToggle.d.ts +0 -12
- package/dist/umd/esm/providers/ConvertMoneyProvider.d.ts +0 -13
- package/dist/umd/esm/shared/components/GActivatorPopover/GActivatorPopover.d.ts +0 -23
- package/dist/umd/esm/shared/components/GActivatorPopover/index.d.ts +0 -1
- package/dist/umd/esm/shared/components/GButton/GButton.d.ts +0 -19
- package/dist/umd/esm/shared/components/GButton/index.d.ts +0 -1
- package/dist/umd/esm/shared/components/GCheckbox/GCheckbox.d.ts +0 -39
- package/dist/umd/esm/shared/components/GCheckbox/index.d.ts +0 -1
- package/dist/umd/esm/shared/components/GChoice/ChoiceHelpText.d.ts +0 -4
- package/dist/umd/esm/shared/components/GChoice/GChoice.d.ts +0 -44
- package/dist/umd/esm/shared/components/GChoice/index.d.ts +0 -2
- package/dist/umd/esm/shared/components/GClickable/GClickable.d.ts +0 -10
- package/dist/umd/esm/shared/components/GClickable/index.d.ts +0 -1
- package/dist/umd/esm/shared/components/GDiv/GDiv.d.ts +0 -7
- package/dist/umd/esm/shared/components/GDiv/index.d.ts +0 -1
- package/dist/umd/esm/shared/components/GI18NText/GI18NText.d.ts +0 -2
- package/dist/umd/esm/shared/components/GI18NText/index.d.ts +0 -2
- package/dist/umd/esm/shared/components/GI18NText/types.d.ts +0 -6
- package/dist/umd/esm/shared/components/GOptionList/GOptionList.d.ts +0 -11
- package/dist/umd/esm/shared/components/GOptionList/index.d.ts +0 -1
- package/dist/umd/esm/shared/components/GSelector/GSelector.d.ts +0 -27
- package/dist/umd/esm/shared/components/GSelector/index.d.ts +0 -1
- package/dist/umd/esm/shared/components/GTextLink/GTextLink.d.ts +0 -9
- package/dist/umd/esm/shared/components/GTextLink/index.d.ts +0 -1
- package/dist/umd/esm/shared/components/GViewBySelector/GViewBySelector.d.ts +0 -17
- package/dist/umd/esm/shared/components/GViewBySelector/index.d.ts +0 -1
- package/dist/umd/esm/stores/currencyRatesStore.d.ts +0 -7
- package/dist/umd/esm/stores/index.d.ts +0 -2
- package/dist/umd/esm/types/analytic-mode.d.ts +0 -5
- package/dist/umd/esm/types/currency.d.ts +0 -329
- package/dist/umd/esm/utils/currency.d.ts +0 -5
- package/dist/umd/esm/utils/sort.d.ts +0 -13
- /package/dist/esm/{types → core/gemxql/types}/breakdown-items.d.ts +0 -0
- /package/dist/esm/hooks/{publish/useWindowSize.d.ts → useWindowSize.d.ts} +0 -0
- /package/dist/umd/esm/{types → core/gemxql/types}/breakdown-items.d.ts +0 -0
- /package/dist/umd/esm/hooks/{publish/useWindowSize.d.ts → useWindowSize.d.ts} +0 -0
package/dist/esm/gemxql.js
CHANGED
|
@@ -1,11 +1,62 @@
|
|
|
1
|
-
import dayjs from 'dayjs';
|
|
2
|
-
import quarterOfYear from 'dayjs/plugin/quarterOfYear.js';
|
|
3
|
-
import timezone from 'dayjs/plugin/timezone.js';
|
|
4
|
-
import utc from 'dayjs/plugin/utc.js';
|
|
5
1
|
import { useQuery } from '@tanstack/react-query';
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
2
|
+
import dayjs from 'dayjs';
|
|
3
|
+
import quarterOfYear from 'dayjs/plugin/quarterOfYear';
|
|
4
|
+
import timezone from 'dayjs/plugin/timezone';
|
|
5
|
+
import utc from 'dayjs/plugin/utc';
|
|
6
|
+
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
7
|
+
|
|
8
|
+
const ColumnSelectFragmentDoc = `
|
|
9
|
+
fragment ColumnSelect on Column {
|
|
10
|
+
dataType
|
|
11
|
+
displayName
|
|
12
|
+
name
|
|
13
|
+
}
|
|
14
|
+
`;
|
|
15
|
+
const TableDataSelectFragmentDoc = `
|
|
16
|
+
fragment TableDataSelect on TableData {
|
|
17
|
+
columns {
|
|
18
|
+
...ColumnSelect
|
|
19
|
+
}
|
|
20
|
+
rows
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
const GemXqlResultSelectFragmentDoc = `
|
|
24
|
+
fragment GemXQLResultSelect on GemxQLResult {
|
|
25
|
+
tableData {
|
|
26
|
+
...TableDataSelect
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
|
|
31
|
+
const GemxQlDocument = `
|
|
32
|
+
query GemxQL($input: String!) {
|
|
33
|
+
gemxQLQuery(query: $input) {
|
|
34
|
+
...GemXQLResultSelect
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
${GemXqlResultSelectFragmentDoc}
|
|
38
|
+
${TableDataSelectFragmentDoc}
|
|
39
|
+
${ColumnSelectFragmentDoc}`;
|
|
40
|
+
|
|
41
|
+
const useCustomGemXQlQuery = (variables, fetcher, options) => {
|
|
42
|
+
return useQuery({
|
|
43
|
+
queryKey: ['GemXQlCustom', variables],
|
|
44
|
+
queryFn: fetcher(GemxQlDocument, variables),
|
|
45
|
+
...options,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
useCustomGemXQlQuery.getKey = (variables) => ['GemXQlCustom', variables];
|
|
49
|
+
|
|
50
|
+
const useGemxQlNamedQuery = ({ name, variables, fetcher }, options) => {
|
|
51
|
+
const document = GemxQlDocument.replace(/query\s+GemxQL\b/, `query ${name}`);
|
|
52
|
+
return useQuery({
|
|
53
|
+
queryKey: [name, variables],
|
|
54
|
+
queryFn: fetcher(document, variables),
|
|
55
|
+
retry: 0,
|
|
56
|
+
...options,
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
useGemxQlNamedQuery.getKey = (name, variables) => [name, variables];
|
|
9
60
|
|
|
10
61
|
const NONE_VALUE = 'None';
|
|
11
62
|
const PLACEHOLDER_VALUE = '-';
|
|
@@ -43,12 +94,42 @@ var EAnalyticColumnKey;
|
|
|
43
94
|
EAnalyticColumnKey["TRAFFIC_SOURCE_ITEMS"] = "traffic_source_items";
|
|
44
95
|
})(EAnalyticColumnKey || (EAnalyticColumnKey = {}));
|
|
45
96
|
|
|
97
|
+
var EAnalyticMode;
|
|
98
|
+
(function (EAnalyticMode) {
|
|
99
|
+
EAnalyticMode["ALL_SESSION"] = "ALL_SESSION";
|
|
100
|
+
EAnalyticMode["FIRST_SESSION"] = "FIRST_SESSION";
|
|
101
|
+
EAnalyticMode["PAGE_ONLY"] = "PAGE_ONLY";
|
|
102
|
+
})(EAnalyticMode || (EAnalyticMode = {}));
|
|
103
|
+
|
|
46
104
|
var EAnalyticSource;
|
|
47
105
|
(function (EAnalyticSource) {
|
|
48
106
|
EAnalyticSource["SESSIONS"] = "sessions";
|
|
49
107
|
EAnalyticSource["SALES"] = "sales";
|
|
50
108
|
})(EAnalyticSource || (EAnalyticSource = {}));
|
|
51
109
|
|
|
110
|
+
var EVisitorType;
|
|
111
|
+
(function (EVisitorType) {
|
|
112
|
+
EVisitorType["NEW"] = "new";
|
|
113
|
+
EVisitorType["RETURNING"] = "returning";
|
|
114
|
+
})(EVisitorType || (EVisitorType = {}));
|
|
115
|
+
var EDeviceType;
|
|
116
|
+
(function (EDeviceType) {
|
|
117
|
+
EDeviceType["DESKTOP"] = "desktop";
|
|
118
|
+
EDeviceType["MOBILE"] = "mobile";
|
|
119
|
+
EDeviceType["TABLET"] = "tablet";
|
|
120
|
+
})(EDeviceType || (EDeviceType = {}));
|
|
121
|
+
var ETrafficSourceType;
|
|
122
|
+
(function (ETrafficSourceType) {
|
|
123
|
+
ETrafficSourceType["DIRECT"] = "direct";
|
|
124
|
+
ETrafficSourceType["EMAIL"] = "email";
|
|
125
|
+
ETrafficSourceType["REFERRAL"] = "referral";
|
|
126
|
+
ETrafficSourceType["ORGANIC_SOCIAL"] = "organic-social";
|
|
127
|
+
ETrafficSourceType["ORGANIC_SEARCH"] = "organic-search";
|
|
128
|
+
ETrafficSourceType["PAID_SOCIAL"] = "paid-social";
|
|
129
|
+
ETrafficSourceType["PAID_SEARCH"] = "paid-search";
|
|
130
|
+
ETrafficSourceType["SMS"] = "sms";
|
|
131
|
+
})(ETrafficSourceType || (ETrafficSourceType = {}));
|
|
132
|
+
|
|
52
133
|
var EComparisonOperator;
|
|
53
134
|
(function (EComparisonOperator) {
|
|
54
135
|
EComparisonOperator["EQ"] = "=";
|
|
@@ -480,123 +561,27 @@ const parse$4 = (query) => {
|
|
|
480
561
|
.filter(Boolean);
|
|
481
562
|
};
|
|
482
563
|
|
|
483
|
-
const TRIM_DECIMAL_ZEROS_REGEX = /\.0+$/;
|
|
484
|
-
const DEFAULT_DECIMALS = 2;
|
|
485
|
-
const trimDecimalZeros = (number) => {
|
|
486
|
-
return `${number}`.replace(TRIM_DECIMAL_ZEROS_REGEX, '');
|
|
487
|
-
};
|
|
488
|
-
const cleanDecimal = (number, decimals = DEFAULT_DECIMALS) => {
|
|
489
|
-
return trimDecimalZeros(number.toFixed(decimals));
|
|
490
|
-
};
|
|
491
|
-
const numberWithCommas = (x) => {
|
|
492
|
-
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
493
|
-
};
|
|
494
|
-
|
|
495
|
-
/**
|
|
496
|
-
* Utility function to calculate percentage and format it.
|
|
497
|
-
* @param part - The part value.
|
|
498
|
-
* @param total - The total value.
|
|
499
|
-
* @param decimals - The number of decimal places to format the percentage to.
|
|
500
|
-
* @returns The formatted percentage as a string.
|
|
501
|
-
*/
|
|
502
|
-
const PERCENTAGE_THRESHOLD = 0.005;
|
|
503
|
-
const PERCENTAGE_THRESHOLD_STRING = '~0%';
|
|
504
|
-
const calcPercentage = (part, total, decimals = DEFAULT_DECIMALS) => {
|
|
505
|
-
if (typeof part !== 'number' || !total)
|
|
506
|
-
return undefined;
|
|
507
|
-
if (part === 0)
|
|
508
|
-
return 0;
|
|
509
|
-
const percentage = (part / total) * 100;
|
|
510
|
-
return parseFloat(cleanDecimal(percentage, decimals));
|
|
511
|
-
};
|
|
512
|
-
const isLessThanThreshold = (percentage) => percentage > 0 && percentage < PERCENTAGE_THRESHOLD;
|
|
513
|
-
const calcPercentageString = (part, total, decimals = 2) => {
|
|
514
|
-
const percentage = calcPercentage(part, total, decimals);
|
|
515
|
-
if (typeof percentage !== 'number')
|
|
516
|
-
return undefined;
|
|
517
|
-
if (isLessThanThreshold(percentage)) {
|
|
518
|
-
return PERCENTAGE_THRESHOLD_STRING;
|
|
519
|
-
}
|
|
520
|
-
return `${percentage}%`;
|
|
521
|
-
};
|
|
522
|
-
|
|
523
564
|
dayjs.extend(utc);
|
|
524
565
|
dayjs.extend(timezone);
|
|
525
566
|
dayjs.extend(quarterOfYear);
|
|
526
567
|
let tz = 'UTC';
|
|
568
|
+
const DEFAULT_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';
|
|
527
569
|
function getInitialTimezone() {
|
|
528
570
|
return tz;
|
|
529
571
|
}
|
|
572
|
+
function setTz(value) {
|
|
573
|
+
tz = value;
|
|
574
|
+
dayjs.tz.setDefault(value);
|
|
575
|
+
}
|
|
530
576
|
const dayjsTz = (date) => {
|
|
531
577
|
if (!date)
|
|
532
578
|
return dayjs().tz(tz);
|
|
533
579
|
return dayjs(date).tz(tz);
|
|
534
580
|
};
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
AnalyticInterval["HOUR"] = "HOUR";
|
|
540
|
-
AnalyticInterval["MONTH"] = "MONTH";
|
|
541
|
-
AnalyticInterval["QUARTER"] = "QUARTER";
|
|
542
|
-
AnalyticInterval["WEEK"] = "WEEK";
|
|
543
|
-
AnalyticInterval["YEAR"] = "YEAR";
|
|
544
|
-
})(AnalyticInterval || (AnalyticInterval = {}));
|
|
545
|
-
const SECONDS_IN_MINUTE = 60;
|
|
546
|
-
const SECONDS_IN_HOUR = SECONDS_IN_MINUTE * SECONDS_IN_MINUTE;
|
|
547
|
-
const getTimeDurationLabel = (valueInSeconds) => {
|
|
548
|
-
let data = valueInSeconds;
|
|
549
|
-
if (!Number.isFinite(valueInSeconds) || valueInSeconds == null) {
|
|
550
|
-
data = 0;
|
|
551
|
-
}
|
|
552
|
-
const fixedValue = cleanDecimal(data);
|
|
553
|
-
if (data >= SECONDS_IN_HOUR) {
|
|
554
|
-
const hours = Math.floor(data / SECONDS_IN_HOUR);
|
|
555
|
-
const minutes = Math.floor((data % SECONDS_IN_HOUR) / SECONDS_IN_MINUTE);
|
|
556
|
-
const seconds = Math.floor(data % SECONDS_IN_MINUTE);
|
|
557
|
-
return `${hours}h ${minutes}m ${seconds}s`;
|
|
558
|
-
}
|
|
559
|
-
else if (data >= SECONDS_IN_MINUTE) {
|
|
560
|
-
const minutes = Math.floor(data / SECONDS_IN_MINUTE);
|
|
561
|
-
const seconds = Math.floor(data % SECONDS_IN_MINUTE);
|
|
562
|
-
return `${minutes}m ${seconds}s`;
|
|
563
|
-
}
|
|
564
|
-
else {
|
|
565
|
-
return `${fixedValue}s`;
|
|
566
|
-
}
|
|
567
|
-
};
|
|
568
|
-
const getFormattedByInterval = (value, interval, options) => {
|
|
569
|
-
if (!value)
|
|
570
|
-
return '';
|
|
571
|
-
const optionFormat = options?.isExpandDetail
|
|
572
|
-
? {
|
|
573
|
-
formatHouse: 'MMM D, h:mm A',
|
|
574
|
-
formatDay: 'MMM D, YYYY',
|
|
575
|
-
formatMonth: 'MMM YYYY',
|
|
576
|
-
formatYear: 'MMM YYYY',
|
|
577
|
-
}
|
|
578
|
-
: {
|
|
579
|
-
formatHouse: 'h A',
|
|
580
|
-
formatDay: 'MMM D',
|
|
581
|
-
formatMonth: 'MMM YYYY',
|
|
582
|
-
formatYear: 'YYYY',
|
|
583
|
-
};
|
|
584
|
-
switch (interval) {
|
|
585
|
-
case AnalyticInterval.HOUR:
|
|
586
|
-
return dayjsTz(value).format(optionFormat.formatHouse);
|
|
587
|
-
case AnalyticInterval.DAY:
|
|
588
|
-
case AnalyticInterval.WEEK:
|
|
589
|
-
return dayjsTz(value).format(optionFormat.formatDay);
|
|
590
|
-
case AnalyticInterval.MONTH:
|
|
591
|
-
return dayjsTz(value).format(optionFormat.formatMonth);
|
|
592
|
-
case AnalyticInterval.QUARTER: {
|
|
593
|
-
const d = dayjsTz(value);
|
|
594
|
-
return `Q${d.quarter()} ${d.format('YYYY')}`;
|
|
595
|
-
}
|
|
596
|
-
case AnalyticInterval.YEAR:
|
|
597
|
-
return dayjsTz(value).format(optionFormat.formatYear);
|
|
598
|
-
}
|
|
599
|
-
return dayjsTz(value).format(optionFormat.formatMonth);
|
|
581
|
+
const convertDateToTz = (date) => {
|
|
582
|
+
if (!date)
|
|
583
|
+
return dayjs.tz(dayjs().format(DEFAULT_DATE_FORMAT), tz);
|
|
584
|
+
return dayjs.tz(dayjs(date).format(DEFAULT_DATE_FORMAT), tz);
|
|
600
585
|
};
|
|
601
586
|
|
|
602
587
|
const toDate = (value) => (typeof value === 'string' ? dayjsTz(value) : value);
|
|
@@ -756,6 +741,112 @@ const extractColumnTypes = (response) => {
|
|
|
756
741
|
return columnTypes;
|
|
757
742
|
};
|
|
758
743
|
|
|
744
|
+
const TRIM_DECIMAL_ZEROS_REGEX = /\.0+$/;
|
|
745
|
+
const DEFAULT_DECIMALS = 2;
|
|
746
|
+
const trimDecimalZeros = (number) => {
|
|
747
|
+
return `${number}`.replace(TRIM_DECIMAL_ZEROS_REGEX, '');
|
|
748
|
+
};
|
|
749
|
+
const cleanDecimal = (number, decimals = DEFAULT_DECIMALS) => {
|
|
750
|
+
return trimDecimalZeros(number.toFixed(decimals));
|
|
751
|
+
};
|
|
752
|
+
|
|
753
|
+
/**
|
|
754
|
+
* Utility function to calculate percentage and format it.
|
|
755
|
+
* @param part - The part value.
|
|
756
|
+
* @param total - The total value.
|
|
757
|
+
* @param decimals - The number of decimal places to format the percentage to.
|
|
758
|
+
* @returns The formatted percentage as a string.
|
|
759
|
+
*/
|
|
760
|
+
const PERCENTAGE_THRESHOLD = 0.005;
|
|
761
|
+
const PERCENTAGE_THRESHOLD_STRING = '~0%';
|
|
762
|
+
const calcPercentage = (part, total, decimals = DEFAULT_DECIMALS) => {
|
|
763
|
+
if (typeof part !== 'number' || !total)
|
|
764
|
+
return undefined;
|
|
765
|
+
if (part === 0)
|
|
766
|
+
return 0;
|
|
767
|
+
const percentage = (part / total) * 100;
|
|
768
|
+
return parseFloat(cleanDecimal(percentage, decimals));
|
|
769
|
+
};
|
|
770
|
+
const isLessThanThreshold = (percentage) => percentage > 0 && percentage < PERCENTAGE_THRESHOLD;
|
|
771
|
+
const calcPercentageString = (part, total, decimals = 2) => {
|
|
772
|
+
const percentage = calcPercentage(part, total, decimals);
|
|
773
|
+
if (typeof percentage !== 'number')
|
|
774
|
+
return undefined;
|
|
775
|
+
if (isLessThanThreshold(percentage)) {
|
|
776
|
+
return PERCENTAGE_THRESHOLD_STRING;
|
|
777
|
+
}
|
|
778
|
+
return `${percentage}%`;
|
|
779
|
+
};
|
|
780
|
+
|
|
781
|
+
var AnalyticInterval;
|
|
782
|
+
(function (AnalyticInterval) {
|
|
783
|
+
AnalyticInterval["DAY"] = "DAY";
|
|
784
|
+
AnalyticInterval["HOUR"] = "HOUR";
|
|
785
|
+
AnalyticInterval["MONTH"] = "MONTH";
|
|
786
|
+
AnalyticInterval["QUARTER"] = "QUARTER";
|
|
787
|
+
AnalyticInterval["WEEK"] = "WEEK";
|
|
788
|
+
AnalyticInterval["YEAR"] = "YEAR";
|
|
789
|
+
})(AnalyticInterval || (AnalyticInterval = {}));
|
|
790
|
+
function numberWithCommas(x) {
|
|
791
|
+
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
792
|
+
}
|
|
793
|
+
const SECONDS_IN_MINUTE = 60;
|
|
794
|
+
const SECONDS_IN_HOUR = SECONDS_IN_MINUTE * SECONDS_IN_MINUTE;
|
|
795
|
+
const getTimeDurationLabel = (valueInSeconds) => {
|
|
796
|
+
let data = valueInSeconds;
|
|
797
|
+
if (!Number.isFinite(valueInSeconds) || valueInSeconds == null) {
|
|
798
|
+
data = 0;
|
|
799
|
+
}
|
|
800
|
+
const fixedValue = cleanDecimal(data);
|
|
801
|
+
if (data >= SECONDS_IN_HOUR) {
|
|
802
|
+
const hours = Math.floor(data / SECONDS_IN_HOUR);
|
|
803
|
+
const minutes = Math.floor((data % SECONDS_IN_HOUR) / SECONDS_IN_MINUTE);
|
|
804
|
+
const seconds = Math.floor(data % SECONDS_IN_MINUTE);
|
|
805
|
+
return `${hours}h ${minutes}m ${seconds}s`;
|
|
806
|
+
}
|
|
807
|
+
else if (data >= SECONDS_IN_MINUTE) {
|
|
808
|
+
const minutes = Math.floor(data / SECONDS_IN_MINUTE);
|
|
809
|
+
const seconds = Math.floor(data % SECONDS_IN_MINUTE);
|
|
810
|
+
return `${minutes}m ${seconds}s`;
|
|
811
|
+
}
|
|
812
|
+
else {
|
|
813
|
+
return `${fixedValue}s`;
|
|
814
|
+
}
|
|
815
|
+
};
|
|
816
|
+
const getFormattedByInterval = (value, interval, options) => {
|
|
817
|
+
if (!value)
|
|
818
|
+
return '';
|
|
819
|
+
const optionFormat = options?.isExpandDetail
|
|
820
|
+
? {
|
|
821
|
+
formatHouse: 'MMM D, h:mm A',
|
|
822
|
+
formatDay: 'MMM D, YYYY',
|
|
823
|
+
formatMonth: 'MMM YYYY',
|
|
824
|
+
formatYear: 'MMM YYYY',
|
|
825
|
+
}
|
|
826
|
+
: {
|
|
827
|
+
formatHouse: 'h A',
|
|
828
|
+
formatDay: 'MMM D',
|
|
829
|
+
formatMonth: 'MMM YYYY',
|
|
830
|
+
formatYear: 'YYYY',
|
|
831
|
+
};
|
|
832
|
+
switch (interval) {
|
|
833
|
+
case AnalyticInterval.HOUR:
|
|
834
|
+
return dayjsTz(value).format(optionFormat.formatHouse);
|
|
835
|
+
case AnalyticInterval.DAY:
|
|
836
|
+
case AnalyticInterval.WEEK:
|
|
837
|
+
return dayjsTz(value).format(optionFormat.formatDay);
|
|
838
|
+
case AnalyticInterval.MONTH:
|
|
839
|
+
return dayjsTz(value).format(optionFormat.formatMonth);
|
|
840
|
+
case AnalyticInterval.QUARTER: {
|
|
841
|
+
const d = dayjsTz(value);
|
|
842
|
+
return `Q${d.quarter()} ${d.format('YYYY')}`;
|
|
843
|
+
}
|
|
844
|
+
case AnalyticInterval.YEAR:
|
|
845
|
+
return dayjsTz(value).format(optionFormat.formatYear);
|
|
846
|
+
}
|
|
847
|
+
return dayjsTz(value).format(optionFormat.formatMonth);
|
|
848
|
+
};
|
|
849
|
+
|
|
759
850
|
const formatAnalyticDate = (dateString) => {
|
|
760
851
|
if (!dateString)
|
|
761
852
|
return 'None';
|
|
@@ -896,240 +987,7 @@ const createNumericRowReader = (row, mode = ERowReaderMode.DEFAULT) => (key) =>
|
|
|
896
987
|
return 0;
|
|
897
988
|
};
|
|
898
989
|
|
|
899
|
-
const
|
|
900
|
-
fragment ColumnSelect on Column {
|
|
901
|
-
dataType
|
|
902
|
-
displayName
|
|
903
|
-
name
|
|
904
|
-
}
|
|
905
|
-
`;
|
|
906
|
-
const TableDataSelectFragmentDoc = `
|
|
907
|
-
fragment TableDataSelect on TableData {
|
|
908
|
-
columns {
|
|
909
|
-
...ColumnSelect
|
|
910
|
-
}
|
|
911
|
-
rows
|
|
912
|
-
}
|
|
913
|
-
`;
|
|
914
|
-
const GemXqlResultSelectFragmentDoc = `
|
|
915
|
-
fragment GemXQLResultSelect on GemxQLResult {
|
|
916
|
-
tableData {
|
|
917
|
-
...TableDataSelect
|
|
918
|
-
}
|
|
919
|
-
}
|
|
920
|
-
`;
|
|
921
|
-
|
|
922
|
-
const GemxQlDocument = `
|
|
923
|
-
query GemxQL($input: String!) {
|
|
924
|
-
gemxQLQuery(query: $input) {
|
|
925
|
-
...GemXQLResultSelect
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
${GemXqlResultSelectFragmentDoc}
|
|
929
|
-
${TableDataSelectFragmentDoc}
|
|
930
|
-
${ColumnSelectFragmentDoc}`;
|
|
931
|
-
|
|
932
|
-
const useCustomGemXQlQuery = (variables, fetcher, options) => {
|
|
933
|
-
return useQuery({
|
|
934
|
-
queryKey: ['GemXQlCustom', variables],
|
|
935
|
-
queryFn: fetcher(GemxQlDocument, variables),
|
|
936
|
-
...options,
|
|
937
|
-
});
|
|
938
|
-
};
|
|
939
|
-
useCustomGemXQlQuery.getKey = (variables) => ['GemXQlCustom', variables];
|
|
940
|
-
|
|
941
|
-
const useGemxQlNamedQuery = ({ name, variables, fetcher }, options) => {
|
|
942
|
-
const document = GemxQlDocument.replace(/query\s+GemxQL\b/, `query ${name}`);
|
|
943
|
-
return useQuery({
|
|
944
|
-
queryKey: [name, variables],
|
|
945
|
-
queryFn: fetcher(document, variables),
|
|
946
|
-
retry: 0,
|
|
947
|
-
...options,
|
|
948
|
-
});
|
|
949
|
-
};
|
|
950
|
-
useGemxQlNamedQuery.getKey = (name, variables) => [name, variables];
|
|
951
|
-
|
|
952
|
-
var EMetricKey;
|
|
953
|
-
(function (EMetricKey) {
|
|
954
|
-
EMetricKey["SESSION"] = "sessions";
|
|
955
|
-
EMetricKey["ORDERS"] = "orders";
|
|
956
|
-
EMetricKey["PAGE_VIEWS"] = "pageviews";
|
|
957
|
-
EMetricKey["VISITORS"] = "visitors";
|
|
958
|
-
EMetricKey["BOUNCE_RATE"] = "bounce_rate";
|
|
959
|
-
EMetricKey["CTR"] = "ctr";
|
|
960
|
-
EMetricKey["CONVERSION_RATE"] = "conversion_rate";
|
|
961
|
-
EMetricKey["AVG_TIME_ON_PAGE"] = "average_time_on_page";
|
|
962
|
-
EMetricKey["ADDED_TO_CART"] = "added_to_cart";
|
|
963
|
-
EMetricKey["ADD_TO_CART_RATE"] = "added_to_cart_rate";
|
|
964
|
-
EMetricKey["REACHED_CHECKOUT"] = "sessions_that_reached_checkout";
|
|
965
|
-
EMetricKey["COMPLETE_CHECKOUT"] = "sessions_that_completed_checkout";
|
|
966
|
-
EMetricKey["CART_ADDITION"] = "sessions_with_cart_additions";
|
|
967
|
-
EMetricKey["AOV"] = "aov";
|
|
968
|
-
EMetricKey["REVENUE"] = "revenue";
|
|
969
|
-
EMetricKey["RPV"] = "revenue_per_visitor";
|
|
970
|
-
EMetricKey["VISITOR_ITEMS"] = "visitor_items";
|
|
971
|
-
EMetricKey["DEVICE_ITEMS"] = "device_items";
|
|
972
|
-
EMetricKey["TRAFFIC_SOURCE_ITEMS"] = "traffic_source_items";
|
|
973
|
-
})(EMetricKey || (EMetricKey = {}));
|
|
974
|
-
|
|
975
|
-
({
|
|
976
|
-
[EMetricKey.SESSION]: {
|
|
977
|
-
title: 'Sessions',
|
|
978
|
-
content: 'A period during which a visitor interacts with your online store',
|
|
979
|
-
},
|
|
980
|
-
[EMetricKey.VISITORS]: {
|
|
981
|
-
title: 'Visitors',
|
|
982
|
-
content: 'Number of unique individuals who visit your online store',
|
|
983
|
-
},
|
|
984
|
-
[EMetricKey.BOUNCE_RATE]: {
|
|
985
|
-
title: 'Bounce rate',
|
|
986
|
-
content: 'Percentage of visitors who leave your store after viewing only one page, without interacting further',
|
|
987
|
-
formula: (jsxs(Fragment, { children: [jsx("span", { className: "formula-variable", children: "Bounce rate" }), jsx("span", { children: " = " }), jsx("span", { className: "formula-input", children: "sessions with a pageview" }), jsx("span", { className: "formula-operator", children: " / " }), jsx("span", { className: "formula-input", children: "total sessions" })] })),
|
|
988
|
-
},
|
|
989
|
-
[EMetricKey.CTR]: {
|
|
990
|
-
title: 'Click-through rate',
|
|
991
|
-
content: 'Percentage of clicks to open new page, compared to the number of times the page was viewed',
|
|
992
|
-
formula: (jsxs(Fragment, { children: [jsx("span", { className: "formula-variable", children: "Click-through rate" }), jsx("span", { children: " = " }), jsx("span", { className: "formula-input", children: "total clicks" }), jsx("span", { className: "formula-operator", children: " / " }), jsx("span", { className: "formula-input", children: "total pageviews" })] })),
|
|
993
|
-
},
|
|
994
|
-
[EMetricKey.AVG_TIME_ON_PAGE]: {
|
|
995
|
-
title: 'Average time on page',
|
|
996
|
-
content: 'Average duration that visitors spend on a page before clicking to open new page',
|
|
997
|
-
formula: (jsxs(Fragment, { children: [jsx("span", { className: "formula-variable", children: "Average time on page" }), jsx("span", { children: " = " }), jsx("span", { className: "formula-input", children: "total time on page" }), jsx("span", { className: "formula-operator", children: " / " }), jsx("span", { className: "formula-input", children: "(total pageviews - total exits)" })] })),
|
|
998
|
-
},
|
|
999
|
-
[EMetricKey.PAGE_VIEWS]: {
|
|
1000
|
-
title: 'Pageviews',
|
|
1001
|
-
content: 'Number of times a page on your online store has been viewed by visitors',
|
|
1002
|
-
},
|
|
1003
|
-
[EMetricKey.RPV]: {
|
|
1004
|
-
title: 'Revenue per visitor',
|
|
1005
|
-
content: 'Average revenue generated from each visitor',
|
|
1006
|
-
formula: (jsxs(Fragment, { children: [jsx("span", { className: "formula-variable", children: "Revenue per visitor" }), jsx("span", { children: " = " }), jsx("span", { className: "formula-input", children: "total revenue" }), jsx("span", { className: "formula-operator", children: " / " }), jsx("span", { className: "formula-input", children: "total visitors" })] })),
|
|
1007
|
-
},
|
|
1008
|
-
[EMetricKey.ADDED_TO_CART]: {
|
|
1009
|
-
title: 'Added to cart',
|
|
1010
|
-
content: 'Total number of the event when a customer adds a product to their cart on your online store',
|
|
1011
|
-
},
|
|
1012
|
-
[EMetricKey.REACHED_CHECKOUT]: {
|
|
1013
|
-
title: 'Sessions that reached checkout',
|
|
1014
|
-
content: 'Sessions in your online store in which the checkout page was reached',
|
|
1015
|
-
},
|
|
1016
|
-
[EMetricKey.COMPLETE_CHECKOUT]: {
|
|
1017
|
-
title: 'Sessions that completed checkout',
|
|
1018
|
-
content: 'Sessions in your online store in which a purchase was completed',
|
|
1019
|
-
},
|
|
1020
|
-
[EMetricKey.ORDERS]: {
|
|
1021
|
-
title: 'Orders',
|
|
1022
|
-
content: 'Number of orders that went through this pages',
|
|
1023
|
-
},
|
|
1024
|
-
[EMetricKey.CONVERSION_RATE]: {
|
|
1025
|
-
title: 'Conversion rate',
|
|
1026
|
-
content: 'Percentage of online store sessions that completed an order',
|
|
1027
|
-
formula: (jsxs(Fragment, { children: [jsx("span", { className: "formula-variable", children: "Conversion rate" }), jsx("span", { children: " = " }), jsx("span", { className: "formula-input", children: "sessions that completed checkout" }), jsx("span", { className: "formula-operator", children: " / " }), jsx("span", { className: "formula-input", children: "total sessions" })] })),
|
|
1028
|
-
},
|
|
1029
|
-
[EMetricKey.AOV]: {
|
|
1030
|
-
title: 'Average order value',
|
|
1031
|
-
content: 'Average value of orders placed in your online store',
|
|
1032
|
-
formula: (jsxs(Fragment, { children: [jsx("span", { className: "formula-variable", children: "Average order value" }), jsx("span", { children: " = " }), jsx("span", { className: "formula-input", children: "total revenue" }), jsx("span", { className: "formula-operator", children: " / " }), jsx("span", { className: "formula-input", children: "total orders" })] })),
|
|
1033
|
-
},
|
|
1034
|
-
[EMetricKey.REVENUE]: {
|
|
1035
|
-
title: 'Revenue',
|
|
1036
|
-
content: 'Total income generated from sales after discounts',
|
|
1037
|
-
formula: (jsxs(Fragment, { children: [jsx("span", { className: "formula-variable", children: "Revenue" }), jsx("span", { children: " = " }), jsx("span", { className: "formula-input", children: "gross sales" }), jsx("span", { className: "formula-operator", children: " - " }), jsx("span", { className: "formula-input", children: "discounts" })] })),
|
|
1038
|
-
},
|
|
1039
|
-
[EMetricKey.ADD_TO_CART_RATE]: {
|
|
1040
|
-
title: 'Add to cart rate',
|
|
1041
|
-
content: 'Percentage of sessions in which the customer added item to the cart',
|
|
1042
|
-
formula: (jsxs(Fragment, { children: [jsx("span", { className: "formula-variable", children: "Added to cart rate" }), jsx("span", { children: " = " }), jsx("span", { className: "formula-input", children: "sessions with cart additions" }), jsx("span", { className: "formula-operator", children: " / " }), jsx("span", { className: "formula-input", children: "total sessions" })] })),
|
|
1043
|
-
},
|
|
1044
|
-
[EMetricKey.CART_ADDITION]: {
|
|
1045
|
-
title: 'Sessions with cart additions',
|
|
1046
|
-
content: 'Sessions in your online store in which a visitor added item to the cart',
|
|
1047
|
-
},
|
|
1048
|
-
[EMetricKey.VISITOR_ITEMS]: {
|
|
1049
|
-
title: 'Sessions by visitor type',
|
|
1050
|
-
content: '<p>Numbers of new and returning visitors</p>',
|
|
1051
|
-
contentList: [
|
|
1052
|
-
'New visitor: who accesses your store for the first time after GemX installation',
|
|
1053
|
-
'Returning visitor: who comes back to your store after GemX installation',
|
|
1054
|
-
],
|
|
1055
|
-
},
|
|
1056
|
-
[EMetricKey.DEVICE_ITEMS]: {
|
|
1057
|
-
title: 'Sessions by device type',
|
|
1058
|
-
content: `Sessions in your online store by the visitor's device type`,
|
|
1059
|
-
},
|
|
1060
|
-
[EMetricKey.TRAFFIC_SOURCE_ITEMS]: {
|
|
1061
|
-
title: 'Sessions by traffic source',
|
|
1062
|
-
content: 'Sessions on your page by where visitors come from',
|
|
1063
|
-
},
|
|
1064
|
-
});
|
|
1065
|
-
|
|
1066
|
-
var EAnalyticMode;
|
|
1067
|
-
(function (EAnalyticMode) {
|
|
1068
|
-
EAnalyticMode["ALL_SESSION"] = "ALL_SESSION";
|
|
1069
|
-
EAnalyticMode["FIRST_SESSION"] = "FIRST_SESSION";
|
|
1070
|
-
EAnalyticMode["PAGE_ONLY"] = "PAGE_ONLY";
|
|
1071
|
-
})(EAnalyticMode || (EAnalyticMode = {}));
|
|
1072
|
-
|
|
1073
|
-
var EVisitorType;
|
|
1074
|
-
(function (EVisitorType) {
|
|
1075
|
-
EVisitorType["NEW"] = "new";
|
|
1076
|
-
EVisitorType["RETURNING"] = "returning";
|
|
1077
|
-
})(EVisitorType || (EVisitorType = {}));
|
|
1078
|
-
var EDeviceType;
|
|
1079
|
-
(function (EDeviceType) {
|
|
1080
|
-
EDeviceType["DESKTOP"] = "desktop";
|
|
1081
|
-
EDeviceType["MOBILE"] = "mobile";
|
|
1082
|
-
EDeviceType["TABLET"] = "tablet";
|
|
1083
|
-
})(EDeviceType || (EDeviceType = {}));
|
|
1084
|
-
var ETrafficSourceType;
|
|
1085
|
-
(function (ETrafficSourceType) {
|
|
1086
|
-
ETrafficSourceType["DIRECT"] = "direct";
|
|
1087
|
-
ETrafficSourceType["EMAIL"] = "email";
|
|
1088
|
-
ETrafficSourceType["REFERRAL"] = "referral";
|
|
1089
|
-
ETrafficSourceType["ORGANIC_SOCIAL"] = "organic-social";
|
|
1090
|
-
ETrafficSourceType["ORGANIC_SEARCH"] = "organic-search";
|
|
1091
|
-
ETrafficSourceType["PAID_SOCIAL"] = "paid-social";
|
|
1092
|
-
ETrafficSourceType["PAID_SEARCH"] = "paid-search";
|
|
1093
|
-
ETrafficSourceType["SMS"] = "sms";
|
|
1094
|
-
})(ETrafficSourceType || (ETrafficSourceType = {}));
|
|
1095
|
-
|
|
1096
|
-
[
|
|
1097
|
-
{ value: EVisitorType.NEW, label: 'New' },
|
|
1098
|
-
{ value: EVisitorType.RETURNING, label: 'Returning' },
|
|
1099
|
-
];
|
|
1100
|
-
[
|
|
1101
|
-
{ value: EDeviceType.DESKTOP, label: 'Desktop' },
|
|
1102
|
-
{ value: EDeviceType.TABLET, label: 'Tablet' },
|
|
1103
|
-
{ value: EDeviceType.MOBILE, label: 'Mobile' },
|
|
1104
|
-
];
|
|
1105
|
-
[
|
|
1106
|
-
{ value: ETrafficSourceType.DIRECT, label: 'Direct' },
|
|
1107
|
-
{ value: ETrafficSourceType.EMAIL, label: 'Email' },
|
|
1108
|
-
{ value: ETrafficSourceType.REFERRAL, label: 'Referral' },
|
|
1109
|
-
{ value: ETrafficSourceType.ORGANIC_SOCIAL, label: 'Organic social' },
|
|
1110
|
-
{ value: ETrafficSourceType.ORGANIC_SEARCH, label: 'Organic search' },
|
|
1111
|
-
{ value: ETrafficSourceType.PAID_SOCIAL, label: 'Paid social' },
|
|
1112
|
-
{ value: ETrafficSourceType.PAID_SEARCH, label: 'Paid search' },
|
|
1113
|
-
{ value: ETrafficSourceType.SMS, label: 'SMS' },
|
|
1114
|
-
];
|
|
1115
|
-
|
|
1116
|
-
create((set) => ({
|
|
1117
|
-
currencyRates: null,
|
|
1118
|
-
setCurrencyRates: (rates) => set({ currencyRates: rates }),
|
|
1119
|
-
}));
|
|
1120
|
-
|
|
1121
|
-
const ConvertMoneyContext = createContext({
|
|
1122
|
-
getTextPrice: (price) => {
|
|
1123
|
-
if (typeof price === 'string')
|
|
1124
|
-
return price;
|
|
1125
|
-
return `${price ?? 0}`;
|
|
1126
|
-
},
|
|
1127
|
-
});
|
|
1128
|
-
const useConvertMoneyContext = () => useContext(ConvertMoneyContext);
|
|
1129
|
-
|
|
1130
|
-
const useAnalyticData = ({ getTextPrice: getTextPriceParam, } = {}) => {
|
|
1131
|
-
const { getTextPrice: getTextPriceCtx } = useConvertMoneyContext();
|
|
1132
|
-
const getTextPrice = getTextPriceParam ?? getTextPriceCtx;
|
|
990
|
+
const useAnalyticData = (getTextPrice) => {
|
|
1133
991
|
const formatData = ({ value, formatter, name }) => {
|
|
1134
992
|
return formatAnalyticData({ value, formatter, getTextPrice, name });
|
|
1135
993
|
};
|
|
@@ -1185,4 +1043,4 @@ const useGemXQlPagination = ({ resetKey, itemsPerPage, }) => {
|
|
|
1185
1043
|
return { currentPage: effectivePage, offset, buildPagination };
|
|
1186
1044
|
};
|
|
1187
1045
|
|
|
1188
|
-
export { CLAUSE_KEYWORDS, CLAUSE_KEYWORD_BOUNDARY, COMPARE_PREFIX, COMPARE_SUFFIX, COMPARE_TOTALS_SUFFIX, ColumnSelectFragmentDoc, DATE_QUERY_FORMAT, DEFAULT_QUERY_LIMIT, EAnalyticColumnKey, EAnalyticDataType, EAnalyticSource, EComparisonOperator, EFilterField, EGroupOperator, EGroupWithClause, EOperatorField, EOrderDirectionType, EPageDimension, EPageField, EPageMetric, ERowReaderMode, ETimeDimension, GPaginationDirection, GemXqlResultSelectFragmentDoc, GemxQlDocument, NONE_VALUE, OPERATOR_IS, OPERATOR_IS_ONE_OF, PLACEHOLDER_VALUE, ROW_READER_MODE_CONFIG, TOTALS_SUFFIX, TableDataSelectFragmentDoc, build$a as buildConditionQuery, buildExtraCondition, buildExtraConditions, build$9 as buildFromQuery, buildGemXQlQuery, build$8 as buildGroupQuery, build$7 as buildLimitQuery, build$6 as buildModeQuery, build$5 as buildOffsetQuery, build$4 as buildOrderByQuery, build$3 as buildShowQuery, build$2 as buildTimeQuery, build$1 as buildTimeSeriesQuery, build as buildTimezoneQuery, buildVersionIdCondition, createNumericRowReader, extractColumnTypes, extractQueryColumns, extractQueryRows, filterConfigs, formatAnalyticData, formatAnalyticDate, generateFilterConditions, getComparisonKey, getComparisonTotalsKey, getFirstMetricInOrderBy, getTimeDimensionByDate, getTotalsKey, hasMetricData, isValidQueryInput, parseBreakdownItems, parse$b as parseConditionQuery, parse$a as parseFromQuery, parse as parseGemXQlQuery, parse$9 as parseGroupQuery, parseJsonArray, parseJsonObject, parse$8 as parseLimitQuery, parse$7 as parseModeQuery, parse$6 as parseOffsetQuery, parse$5 as parseOrderByQuery, parsePageItems, parse$4 as parseShowQuery, parse$3 as parseTimeQuery, parse$2 as parseTimeSeriesQuery, parse$1 as parseTimezoneQuery, readNumeric, useAnalyticData, useCustomGemXQlQuery, useGemXQlPagination, useGemxQlNamedQuery };
|
|
1046
|
+
export { AnalyticInterval, CLAUSE_KEYWORDS, CLAUSE_KEYWORD_BOUNDARY, COMPARE_PREFIX, COMPARE_SUFFIX, COMPARE_TOTALS_SUFFIX, ColumnSelectFragmentDoc, DATE_QUERY_FORMAT, DEFAULT_QUERY_LIMIT, EAnalyticColumnKey, EAnalyticDataType, EAnalyticMode, EAnalyticSource, EComparisonOperator, EDeviceType, EFilterField, EGroupOperator, EGroupWithClause, EOperatorField, EOrderDirectionType, EPageDimension, EPageField, EPageMetric, ERowReaderMode, ETimeDimension, ETrafficSourceType, EVisitorType, GPaginationDirection, GemXqlResultSelectFragmentDoc, GemxQlDocument, NONE_VALUE, OPERATOR_IS, OPERATOR_IS_ONE_OF, PLACEHOLDER_VALUE, ROW_READER_MODE_CONFIG, TOTALS_SUFFIX, TableDataSelectFragmentDoc, build$a as buildConditionQuery, buildExtraCondition, buildExtraConditions, build$9 as buildFromQuery, buildGemXQlQuery, build$8 as buildGroupQuery, build$7 as buildLimitQuery, build$6 as buildModeQuery, build$5 as buildOffsetQuery, build$4 as buildOrderByQuery, build$3 as buildShowQuery, build$2 as buildTimeQuery, build$1 as buildTimeSeriesQuery, build as buildTimezoneQuery, buildVersionIdCondition, convertDateToTz, createNumericRowReader, dayjsTz, extractColumnTypes, extractQueryColumns, extractQueryRows, filterConfigs, formatAnalyticData, formatAnalyticDate, generateFilterConditions, getComparisonKey, getComparisonTotalsKey, getFirstMetricInOrderBy, getFormattedByInterval, getInitialTimezone, getTimeDimensionByDate, getTimeDurationLabel, getTotalsKey, hasMetricData, isValidQueryInput, numberWithCommas, parseBreakdownItems, parse$b as parseConditionQuery, parse$a as parseFromQuery, parse as parseGemXQlQuery, parse$9 as parseGroupQuery, parseJsonArray, parseJsonObject, parse$8 as parseLimitQuery, parse$7 as parseModeQuery, parse$6 as parseOffsetQuery, parse$5 as parseOrderByQuery, parsePageItems, parse$4 as parseShowQuery, parse$3 as parseTimeQuery, parse$2 as parseTimeSeriesQuery, parse$1 as parseTimezoneQuery, readNumeric, setTz, useAnalyticData, useCustomGemXQlQuery, useGemXQlPagination, useGemxQlNamedQuery };
|