@levi-gemcommerce/analytics 1.0.0-dev.12 → 1.0.0-dev.14

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.
Files changed (100) hide show
  1. package/dist/esm/components/GTimePicker/GTimePicker.d.ts +17 -0
  2. package/dist/esm/components/GTimePicker/components/BaseTimePicker.d.ts +10 -0
  3. package/dist/esm/components/GTimePicker/components/CompareTimePicker.d.ts +5 -0
  4. package/dist/esm/components/GTimePicker/components/DateTimeFilterAddition.d.ts +2 -0
  5. package/dist/esm/components/GTimePicker/components/DateTimeFilterInputs.d.ts +9 -0
  6. package/dist/esm/components/GTimePicker/components/DateTimeFilters.d.ts +15 -0
  7. package/dist/esm/components/GTimePicker/components/MainTimePicker.d.ts +3 -0
  8. package/dist/esm/components/GTimePicker/components/index.d.ts +2 -0
  9. package/dist/esm/components/GTimePicker/constants/compareDateTimePicker.d.ts +12 -0
  10. package/dist/esm/components/GTimePicker/constants/datePicker.d.ts +14 -0
  11. package/dist/esm/components/GTimePicker/constants/index.d.ts +2 -0
  12. package/dist/esm/components/GTimePicker/constants/mainDataTimePicker.d.ts +14 -0
  13. package/dist/esm/components/GTimePicker/contexts/DateTimePickerProvider.d.ts +15 -0
  14. package/dist/esm/components/GTimePicker/contexts/index.d.ts +1 -0
  15. package/dist/esm/components/GTimePicker/helpers/date-range-info.d.ts +16 -0
  16. package/dist/esm/components/GTimePicker/helpers/index.d.ts +4 -0
  17. package/dist/esm/components/GTimePicker/helpers/parse-date.d.ts +24 -0
  18. package/dist/esm/components/GTimePicker/helpers/time-picker.d.ts +76 -0
  19. package/dist/esm/components/GTimePicker/helpers/version.d.ts +2 -0
  20. package/dist/esm/components/GTimePicker/hooks/index.d.ts +3 -0
  21. package/dist/esm/components/GTimePicker/hooks/useCompareDateTimePicker.d.ts +25 -0
  22. package/dist/esm/components/GTimePicker/hooks/useDateTimeFilter.d.ts +18 -0
  23. package/dist/esm/components/GTimePicker/hooks/useDateTimePicker.d.ts +30 -0
  24. package/dist/esm/components/GTimePicker/hooks/useVersionDateTimeFilters.d.ts +9 -0
  25. package/dist/esm/components/GTimePicker/index.d.ts +7 -0
  26. package/dist/esm/components/GTimePicker/types/index.d.ts +38 -0
  27. package/dist/esm/components/index.d.ts +1 -0
  28. package/dist/esm/constants/breakdown-targets.d.ts +1 -1
  29. package/dist/esm/core/gemxql/builder/clauses/mode-query.d.ts +1 -1
  30. package/dist/esm/core/gemxql/helpers/getTimeDimension.d.ts +1 -1
  31. package/dist/esm/core/gemxql/index.d.ts +3 -6
  32. package/dist/esm/core/gemxql/types/date-filter.d.ts +1 -1
  33. package/dist/esm/core/gemxql/types/index.d.ts +0 -2
  34. package/dist/esm/gemxql.js +159 -204
  35. package/dist/esm/gemxql.mjs +159 -204
  36. package/dist/esm/index.d.ts +1 -3
  37. package/dist/esm/index.js +2041 -2080
  38. package/dist/esm/index.mjs +2041 -2080
  39. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getFontSize.d.ts +1 -1
  40. package/dist/esm/shared/components/GTimePicker/GTimePicker.d.ts +1 -1
  41. package/dist/esm/shared/components/GTimePicker/helpers/parse-date.d.ts +2 -2
  42. package/dist/esm/shared/components/GTimePicker/hooks/useCompareDateTimePicker.d.ts +1 -2
  43. package/dist/esm/shared/components/GTimePicker/types/index.d.ts +1 -1
  44. package/dist/esm/shared/components/index.d.ts +0 -1
  45. package/dist/esm/types/breakdown-items.d.ts +19 -0
  46. package/dist/esm/types/index.d.ts +1 -0
  47. package/dist/esm/types.js +24 -1
  48. package/dist/esm/types.mjs +24 -1
  49. package/dist/esm/utils/analytics.d.ts +12 -0
  50. package/dist/esm/utils/dayjs.d.ts +10 -0
  51. package/dist/esm/utils/index.d.ts +2 -0
  52. package/dist/umd/esm/components/GTimePicker/GTimePicker.d.ts +17 -0
  53. package/dist/umd/esm/components/GTimePicker/components/BaseTimePicker.d.ts +10 -0
  54. package/dist/umd/esm/components/GTimePicker/components/CompareTimePicker.d.ts +5 -0
  55. package/dist/umd/esm/components/GTimePicker/components/DateTimeFilterAddition.d.ts +2 -0
  56. package/dist/umd/esm/components/GTimePicker/components/DateTimeFilterInputs.d.ts +9 -0
  57. package/dist/umd/esm/components/GTimePicker/components/DateTimeFilters.d.ts +15 -0
  58. package/dist/umd/esm/components/GTimePicker/components/MainTimePicker.d.ts +3 -0
  59. package/dist/umd/esm/components/GTimePicker/components/index.d.ts +2 -0
  60. package/dist/umd/esm/components/GTimePicker/constants/compareDateTimePicker.d.ts +12 -0
  61. package/dist/umd/esm/components/GTimePicker/constants/datePicker.d.ts +14 -0
  62. package/dist/umd/esm/components/GTimePicker/constants/index.d.ts +2 -0
  63. package/dist/umd/esm/components/GTimePicker/constants/mainDataTimePicker.d.ts +14 -0
  64. package/dist/umd/esm/components/GTimePicker/contexts/DateTimePickerProvider.d.ts +15 -0
  65. package/dist/umd/esm/components/GTimePicker/contexts/index.d.ts +1 -0
  66. package/dist/umd/esm/components/GTimePicker/helpers/date-range-info.d.ts +16 -0
  67. package/dist/umd/esm/components/GTimePicker/helpers/index.d.ts +4 -0
  68. package/dist/umd/esm/components/GTimePicker/helpers/parse-date.d.ts +24 -0
  69. package/dist/umd/esm/components/GTimePicker/helpers/time-picker.d.ts +76 -0
  70. package/dist/umd/esm/components/GTimePicker/helpers/version.d.ts +2 -0
  71. package/dist/umd/esm/components/GTimePicker/hooks/index.d.ts +3 -0
  72. package/dist/umd/esm/components/GTimePicker/hooks/useCompareDateTimePicker.d.ts +25 -0
  73. package/dist/umd/esm/components/GTimePicker/hooks/useDateTimeFilter.d.ts +18 -0
  74. package/dist/umd/esm/components/GTimePicker/hooks/useDateTimePicker.d.ts +30 -0
  75. package/dist/umd/esm/components/GTimePicker/hooks/useVersionDateTimeFilters.d.ts +9 -0
  76. package/dist/umd/esm/components/GTimePicker/index.d.ts +7 -0
  77. package/dist/umd/esm/components/GTimePicker/types/index.d.ts +38 -0
  78. package/dist/umd/esm/components/index.d.ts +1 -0
  79. package/dist/umd/esm/constants/breakdown-targets.d.ts +1 -1
  80. package/dist/umd/esm/core/gemxql/builder/clauses/mode-query.d.ts +1 -1
  81. package/dist/umd/esm/core/gemxql/helpers/getTimeDimension.d.ts +1 -1
  82. package/dist/umd/esm/core/gemxql/index.d.ts +3 -6
  83. package/dist/umd/esm/core/gemxql/types/date-filter.d.ts +1 -1
  84. package/dist/umd/esm/core/gemxql/types/index.d.ts +0 -2
  85. package/dist/umd/esm/index.d.ts +1 -3
  86. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getFontSize.d.ts +1 -1
  87. package/dist/umd/esm/shared/components/GTimePicker/GTimePicker.d.ts +1 -1
  88. package/dist/umd/esm/shared/components/GTimePicker/helpers/parse-date.d.ts +2 -2
  89. package/dist/umd/esm/shared/components/GTimePicker/hooks/useCompareDateTimePicker.d.ts +1 -2
  90. package/dist/umd/esm/shared/components/GTimePicker/types/index.d.ts +1 -1
  91. package/dist/umd/esm/shared/components/index.d.ts +0 -1
  92. package/dist/umd/esm/types/breakdown-items.d.ts +19 -0
  93. package/dist/umd/esm/types/index.d.ts +1 -0
  94. package/dist/umd/esm/utils/analytics.d.ts +12 -0
  95. package/dist/umd/esm/utils/dayjs.d.ts +10 -0
  96. package/dist/umd/esm/utils/index.d.ts +2 -0
  97. package/dist/umd/gemxql.js +1 -1
  98. package/dist/umd/index.js +1 -1
  99. package/dist/umd/types.js +1 -1
  100. package/package.json +1 -1
@@ -1,63 +1,10 @@
1
- import { useQuery } from '@tanstack/react-query';
2
1
  import dayjs from 'dayjs';
3
2
  import quarterOfYear from 'dayjs/plugin/quarterOfYear.js';
4
3
  import timezone from 'dayjs/plugin/timezone.js';
5
4
  import utc from 'dayjs/plugin/utc.js';
5
+ import { useQuery } from '@tanstack/react-query';
6
6
  import { useState, useRef, useCallback, useEffect } from 'react';
7
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];
60
-
61
8
  const NONE_VALUE = 'None';
62
9
  const PLACEHOLDER_VALUE = '-';
63
10
 
@@ -94,42 +41,12 @@ var EAnalyticColumnKey;
94
41
  EAnalyticColumnKey["TRAFFIC_SOURCE_ITEMS"] = "traffic_source_items";
95
42
  })(EAnalyticColumnKey || (EAnalyticColumnKey = {}));
96
43
 
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
-
104
44
  var EAnalyticSource;
105
45
  (function (EAnalyticSource) {
106
46
  EAnalyticSource["SESSIONS"] = "sessions";
107
47
  EAnalyticSource["SALES"] = "sales";
108
48
  })(EAnalyticSource || (EAnalyticSource = {}));
109
49
 
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
-
133
50
  var EComparisonOperator;
134
51
  (function (EComparisonOperator) {
135
52
  EComparisonOperator["EQ"] = "=";
@@ -561,32 +478,123 @@ const parse$4 = (query) => {
561
478
  .filter(Boolean);
562
479
  };
563
480
 
481
+ const TRIM_DECIMAL_ZEROS_REGEX = /\.0+$/;
482
+ const DEFAULT_DECIMALS = 2;
483
+ const trimDecimalZeros = (number) => {
484
+ return `${number}`.replace(TRIM_DECIMAL_ZEROS_REGEX, '');
485
+ };
486
+ const cleanDecimal = (number, decimals = DEFAULT_DECIMALS) => {
487
+ return trimDecimalZeros(number.toFixed(decimals));
488
+ };
489
+ const numberWithCommas = (x) => {
490
+ return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
491
+ };
492
+
493
+ /**
494
+ * Utility function to calculate percentage and format it.
495
+ * @param part - The part value.
496
+ * @param total - The total value.
497
+ * @param decimals - The number of decimal places to format the percentage to.
498
+ * @returns The formatted percentage as a string.
499
+ */
500
+ const PERCENTAGE_THRESHOLD = 0.005;
501
+ const PERCENTAGE_THRESHOLD_STRING = '~0%';
502
+ const calcPercentage = (part, total, decimals = DEFAULT_DECIMALS) => {
503
+ if (typeof part !== 'number' || !total)
504
+ return undefined;
505
+ if (part === 0)
506
+ return 0;
507
+ const percentage = (part / total) * 100;
508
+ return parseFloat(cleanDecimal(percentage, decimals));
509
+ };
510
+ const isLessThanThreshold = (percentage) => percentage > 0 && percentage < PERCENTAGE_THRESHOLD;
511
+ const calcPercentageString = (part, total, decimals = 2) => {
512
+ const percentage = calcPercentage(part, total, decimals);
513
+ if (typeof percentage !== 'number')
514
+ return undefined;
515
+ if (isLessThanThreshold(percentage)) {
516
+ return PERCENTAGE_THRESHOLD_STRING;
517
+ }
518
+ return `${percentage}%`;
519
+ };
520
+
564
521
  dayjs.extend(utc);
565
522
  dayjs.extend(timezone);
566
523
  dayjs.extend(quarterOfYear);
567
524
  let tz = 'UTC';
568
- const DEFAULT_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';
569
525
  function getInitialTimezone() {
570
526
  return tz;
571
527
  }
572
- function setTz(value) {
573
- tz = value;
574
- dayjs.tz.setDefault(value);
575
- }
576
528
  const dayjsTz = (date) => {
577
529
  if (!date)
578
530
  return dayjs().tz(tz);
579
531
  return dayjs(date).tz(tz);
580
532
  };
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);
533
+
534
+ var AnalyticInterval;
535
+ (function (AnalyticInterval) {
536
+ AnalyticInterval["DAY"] = "DAY";
537
+ AnalyticInterval["HOUR"] = "HOUR";
538
+ AnalyticInterval["MONTH"] = "MONTH";
539
+ AnalyticInterval["QUARTER"] = "QUARTER";
540
+ AnalyticInterval["WEEK"] = "WEEK";
541
+ AnalyticInterval["YEAR"] = "YEAR";
542
+ })(AnalyticInterval || (AnalyticInterval = {}));
543
+ const SECONDS_IN_MINUTE = 60;
544
+ const SECONDS_IN_HOUR = SECONDS_IN_MINUTE * SECONDS_IN_MINUTE;
545
+ const getTimeDurationLabel = (valueInSeconds) => {
546
+ let data = valueInSeconds;
547
+ if (!Number.isFinite(valueInSeconds) || valueInSeconds == null) {
548
+ data = 0;
549
+ }
550
+ const fixedValue = cleanDecimal(data);
551
+ if (data >= SECONDS_IN_HOUR) {
552
+ const hours = Math.floor(data / SECONDS_IN_HOUR);
553
+ const minutes = Math.floor((data % SECONDS_IN_HOUR) / SECONDS_IN_MINUTE);
554
+ const seconds = Math.floor(data % SECONDS_IN_MINUTE);
555
+ return `${hours}h ${minutes}m ${seconds}s`;
556
+ }
557
+ else if (data >= SECONDS_IN_MINUTE) {
558
+ const minutes = Math.floor(data / SECONDS_IN_MINUTE);
559
+ const seconds = Math.floor(data % SECONDS_IN_MINUTE);
560
+ return `${minutes}m ${seconds}s`;
561
+ }
562
+ else {
563
+ return `${fixedValue}s`;
564
+ }
585
565
  };
586
- const dayjsTzToLocalTZ = (date) => {
587
- if (!date)
588
- return dayjs(dayjsTz().format(DEFAULT_DATE_FORMAT));
589
- return dayjs(dayjsTz(date).format(DEFAULT_DATE_FORMAT));
566
+ const getFormattedByInterval = (value, interval, options) => {
567
+ if (!value)
568
+ return '';
569
+ const optionFormat = options?.isExpandDetail
570
+ ? {
571
+ formatHouse: 'MMM D, h:mm A',
572
+ formatDay: 'MMM D, YYYY',
573
+ formatMonth: 'MMM YYYY',
574
+ formatYear: 'MMM YYYY',
575
+ }
576
+ : {
577
+ formatHouse: 'h A',
578
+ formatDay: 'MMM D',
579
+ formatMonth: 'MMM YYYY',
580
+ formatYear: 'YYYY',
581
+ };
582
+ switch (interval) {
583
+ case AnalyticInterval.HOUR:
584
+ return dayjsTz(value).format(optionFormat.formatHouse);
585
+ case AnalyticInterval.DAY:
586
+ case AnalyticInterval.WEEK:
587
+ return dayjsTz(value).format(optionFormat.formatDay);
588
+ case AnalyticInterval.MONTH:
589
+ return dayjsTz(value).format(optionFormat.formatMonth);
590
+ case AnalyticInterval.QUARTER: {
591
+ const d = dayjsTz(value);
592
+ return `Q${d.quarter()} ${d.format('YYYY')}`;
593
+ }
594
+ case AnalyticInterval.YEAR:
595
+ return dayjsTz(value).format(optionFormat.formatYear);
596
+ }
597
+ return dayjsTz(value).format(optionFormat.formatMonth);
590
598
  };
591
599
 
592
600
  const toDate = (value) => (typeof value === 'string' ? dayjsTz(value) : value);
@@ -746,112 +754,6 @@ const extractColumnTypes = (response) => {
746
754
  return columnTypes;
747
755
  };
748
756
 
749
- const TRIM_DECIMAL_ZEROS_REGEX = /\.0+$/;
750
- const DEFAULT_DECIMALS = 2;
751
- const trimDecimalZeros = (number) => {
752
- return `${number}`.replace(TRIM_DECIMAL_ZEROS_REGEX, '');
753
- };
754
- const cleanDecimal = (number, decimals = DEFAULT_DECIMALS) => {
755
- return trimDecimalZeros(number.toFixed(decimals));
756
- };
757
-
758
- /**
759
- * Utility function to calculate percentage and format it.
760
- * @param part - The part value.
761
- * @param total - The total value.
762
- * @param decimals - The number of decimal places to format the percentage to.
763
- * @returns The formatted percentage as a string.
764
- */
765
- const PERCENTAGE_THRESHOLD = 0.005;
766
- const PERCENTAGE_THRESHOLD_STRING = '~0%';
767
- const calcPercentage = (part, total, decimals = DEFAULT_DECIMALS) => {
768
- if (typeof part !== 'number' || !total)
769
- return undefined;
770
- if (part === 0)
771
- return 0;
772
- const percentage = (part / total) * 100;
773
- return parseFloat(cleanDecimal(percentage, decimals));
774
- };
775
- const isLessThanThreshold = (percentage) => percentage > 0 && percentage < PERCENTAGE_THRESHOLD;
776
- const calcPercentageString = (part, total, decimals = 2) => {
777
- const percentage = calcPercentage(part, total, decimals);
778
- if (typeof percentage !== 'number')
779
- return undefined;
780
- if (isLessThanThreshold(percentage)) {
781
- return PERCENTAGE_THRESHOLD_STRING;
782
- }
783
- return `${percentage}%`;
784
- };
785
-
786
- var AnalyticInterval;
787
- (function (AnalyticInterval) {
788
- AnalyticInterval["DAY"] = "DAY";
789
- AnalyticInterval["HOUR"] = "HOUR";
790
- AnalyticInterval["MONTH"] = "MONTH";
791
- AnalyticInterval["QUARTER"] = "QUARTER";
792
- AnalyticInterval["WEEK"] = "WEEK";
793
- AnalyticInterval["YEAR"] = "YEAR";
794
- })(AnalyticInterval || (AnalyticInterval = {}));
795
- function numberWithCommas(x) {
796
- return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
797
- }
798
- const SECONDS_IN_MINUTE = 60;
799
- const SECONDS_IN_HOUR = SECONDS_IN_MINUTE * SECONDS_IN_MINUTE;
800
- const getTimeDurationLabel = (valueInSeconds) => {
801
- let data = valueInSeconds;
802
- if (!Number.isFinite(valueInSeconds) || valueInSeconds == null) {
803
- data = 0;
804
- }
805
- const fixedValue = cleanDecimal(data);
806
- if (data >= SECONDS_IN_HOUR) {
807
- const hours = Math.floor(data / SECONDS_IN_HOUR);
808
- const minutes = Math.floor((data % SECONDS_IN_HOUR) / SECONDS_IN_MINUTE);
809
- const seconds = Math.floor(data % SECONDS_IN_MINUTE);
810
- return `${hours}h ${minutes}m ${seconds}s`;
811
- }
812
- else if (data >= SECONDS_IN_MINUTE) {
813
- const minutes = Math.floor(data / SECONDS_IN_MINUTE);
814
- const seconds = Math.floor(data % SECONDS_IN_MINUTE);
815
- return `${minutes}m ${seconds}s`;
816
- }
817
- else {
818
- return `${fixedValue}s`;
819
- }
820
- };
821
- const getFormattedByInterval = (value, interval, options) => {
822
- if (!value)
823
- return '';
824
- const optionFormat = options?.isExpandDetail
825
- ? {
826
- formatHouse: 'MMM D, h:mm A',
827
- formatDay: 'MMM D, YYYY',
828
- formatMonth: 'MMM YYYY',
829
- formatYear: 'MMM YYYY',
830
- }
831
- : {
832
- formatHouse: 'h A',
833
- formatDay: 'MMM D',
834
- formatMonth: 'MMM YYYY',
835
- formatYear: 'YYYY',
836
- };
837
- switch (interval) {
838
- case AnalyticInterval.HOUR:
839
- return dayjsTz(value).format(optionFormat.formatHouse);
840
- case AnalyticInterval.DAY:
841
- case AnalyticInterval.WEEK:
842
- return dayjsTz(value).format(optionFormat.formatDay);
843
- case AnalyticInterval.MONTH:
844
- return dayjsTz(value).format(optionFormat.formatMonth);
845
- case AnalyticInterval.QUARTER: {
846
- const d = dayjsTz(value);
847
- return `Q${d.quarter()} ${d.format('YYYY')}`;
848
- }
849
- case AnalyticInterval.YEAR:
850
- return dayjsTz(value).format(optionFormat.formatYear);
851
- }
852
- return dayjsTz(value).format(optionFormat.formatMonth);
853
- };
854
-
855
757
  const formatAnalyticDate = (dateString) => {
856
758
  if (!dateString)
857
759
  return 'None';
@@ -992,6 +894,59 @@ const createNumericRowReader = (row, mode = ERowReaderMode.DEFAULT) => (key) =>
992
894
  return 0;
993
895
  };
994
896
 
897
+ const ColumnSelectFragmentDoc = `
898
+ fragment ColumnSelect on Column {
899
+ dataType
900
+ displayName
901
+ name
902
+ }
903
+ `;
904
+ const TableDataSelectFragmentDoc = `
905
+ fragment TableDataSelect on TableData {
906
+ columns {
907
+ ...ColumnSelect
908
+ }
909
+ rows
910
+ }
911
+ `;
912
+ const GemXqlResultSelectFragmentDoc = `
913
+ fragment GemXQLResultSelect on GemxQLResult {
914
+ tableData {
915
+ ...TableDataSelect
916
+ }
917
+ }
918
+ `;
919
+
920
+ const GemxQlDocument = `
921
+ query GemxQL($input: String!) {
922
+ gemxQLQuery(query: $input) {
923
+ ...GemXQLResultSelect
924
+ }
925
+ }
926
+ ${GemXqlResultSelectFragmentDoc}
927
+ ${TableDataSelectFragmentDoc}
928
+ ${ColumnSelectFragmentDoc}`;
929
+
930
+ const useCustomGemXQlQuery = (variables, fetcher, options) => {
931
+ return useQuery({
932
+ queryKey: ['GemXQlCustom', variables],
933
+ queryFn: fetcher(GemxQlDocument, variables),
934
+ ...options,
935
+ });
936
+ };
937
+ useCustomGemXQlQuery.getKey = (variables) => ['GemXQlCustom', variables];
938
+
939
+ const useGemxQlNamedQuery = ({ name, variables, fetcher }, options) => {
940
+ const document = GemxQlDocument.replace(/query\s+GemxQL\b/, `query ${name}`);
941
+ return useQuery({
942
+ queryKey: [name, variables],
943
+ queryFn: fetcher(document, variables),
944
+ retry: 0,
945
+ ...options,
946
+ });
947
+ };
948
+ useGemxQlNamedQuery.getKey = (name, variables) => [name, variables];
949
+
995
950
  const useAnalyticData = (getTextPrice) => {
996
951
  const formatData = ({ value, formatter, name }) => {
997
952
  return formatAnalyticData({ value, formatter, getTextPrice, name });
@@ -1048,4 +1003,4 @@ const useGemXQlPagination = ({ resetKey, itemsPerPage, }) => {
1048
1003
  return { currentPage: effectivePage, offset, buildPagination };
1049
1004
  };
1050
1005
 
1051
- 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, dayjsTzToLocalTZ, 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 };
1006
+ 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 };