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

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.
@@ -6,5 +6,5 @@ export * from './helpers';
6
6
  export * from './hooks';
7
7
  export * from './types';
8
8
  export { AnalyticInterval, getFormattedByInterval, getTimeDurationLabel, numberWithCommas } from './utils/analytics';
9
- export { convertDateToTz, dayjsTz, getInitialTimezone, setTz } from './utils/dayjs';
9
+ export { convertDateToTz, dayjsTz, dayjsTzToLocalTZ, getInitialTimezone, setTz } from './utils/dayjs';
10
10
  export type { Dayjs } from './utils/dayjs';
@@ -583,6 +583,11 @@ const convertDateToTz = (date) => {
583
583
  return dayjs.tz(dayjs().format(DEFAULT_DATE_FORMAT), tz);
584
584
  return dayjs.tz(dayjs(date).format(DEFAULT_DATE_FORMAT), tz);
585
585
  };
586
+ const dayjsTzToLocalTZ = (date) => {
587
+ if (!date)
588
+ return dayjs(dayjsTz().format(DEFAULT_DATE_FORMAT));
589
+ return dayjs(dayjsTz(date).format(DEFAULT_DATE_FORMAT));
590
+ };
586
591
 
587
592
  const toDate = (value) => (typeof value === 'string' ? dayjsTz(value) : value);
588
593
  const isMidnight = (date) => date.hour() === 0 && date.minute() === 0;
@@ -1043,4 +1048,4 @@ const useGemXQlPagination = ({ resetKey, itemsPerPage, }) => {
1043
1048
  return { currentPage: effectivePage, offset, buildPagination };
1044
1049
  };
1045
1050
 
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 };
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 };
@@ -583,6 +583,11 @@ const convertDateToTz = (date) => {
583
583
  return dayjs.tz(dayjs().format(DEFAULT_DATE_FORMAT), tz);
584
584
  return dayjs.tz(dayjs(date).format(DEFAULT_DATE_FORMAT), tz);
585
585
  };
586
+ const dayjsTzToLocalTZ = (date) => {
587
+ if (!date)
588
+ return dayjs(dayjsTz().format(DEFAULT_DATE_FORMAT));
589
+ return dayjs(dayjsTz(date).format(DEFAULT_DATE_FORMAT));
590
+ };
586
591
 
587
592
  const toDate = (value) => (typeof value === 'string' ? dayjsTz(value) : value);
588
593
  const isMidnight = (date) => date.hour() === 0 && date.minute() === 0;
@@ -1043,4 +1048,4 @@ const useGemXQlPagination = ({ resetKey, itemsPerPage, }) => {
1043
1048
  return { currentPage: effectivePage, offset, buildPagination };
1044
1049
  };
1045
1050
 
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 };
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 };
@@ -6,5 +6,5 @@ export * from './helpers';
6
6
  export * from './hooks';
7
7
  export * from './types';
8
8
  export { AnalyticInterval, getFormattedByInterval, getTimeDurationLabel, numberWithCommas } from './utils/analytics';
9
- export { convertDateToTz, dayjsTz, getInitialTimezone, setTz } from './utils/dayjs';
9
+ export { convertDateToTz, dayjsTz, dayjsTzToLocalTZ, getInitialTimezone, setTz } from './utils/dayjs';
10
10
  export type { Dayjs } from './utils/dayjs';
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@tanstack/react-query"),require("dayjs"),require("dayjs/plugin/quarterOfYear.js"),require("dayjs/plugin/timezone.js"),require("dayjs/plugin/utc.js"),require("react")):"function"==typeof define&&define.amd?define(["exports","@tanstack/react-query","dayjs","dayjs/plugin/quarterOfYear.js","dayjs/plugin/timezone.js","dayjs/plugin/utc.js","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).GemAnalytics={},e.reactQuery,e.dayjs,e.quarterOfYear,e.timezone,e.utc,e.React)}(this,function(e,t,r,i,a,n,o){"use strict";const s="\n fragment ColumnSelect on Column {\n dataType\n displayName\n name\n}\n ",l="\n fragment TableDataSelect on TableData {\n columns {\n ...ColumnSelect\n }\n rows\n}\n ",E="\n fragment GemXQLResultSelect on GemxQLResult {\n tableData {\n ...TableDataSelect\n }\n}\n ",u=`\n query GemxQL($input: String!) {\n gemxQLQuery(query: $input) {\n ...GemXQLResultSelect\n }\n}\n ${E}\n${l}\n${s}`,c=(e,r,i)=>t.useQuery({queryKey:["GemXQlCustom",e],queryFn:r(u,e),...i});c.getKey=e=>["GemXQlCustom",e];const m=({name:e,variables:r,fetcher:i},a)=>{const n=u.replace(/query\s+GemxQL\b/,`query ${e}`);return t.useQuery({queryKey:[e,r],queryFn:i(n,r),retry:0,...a})};m.getKey=(e,t)=>[e,t];const d="None",p="___totals",A="comparison___",T="___previous_period",R=`${T}${p}`,O="is",f="is_one_of";var y,I,S,D,F,M,_,g,N,C,P,v,h,G,Y,$,L;e.EAnalyticDataType=void 0,(y=e.EAnalyticDataType||(e.EAnalyticDataType={})).DATE="DATE",y.ARRAY="ARRAY",y.OBJECT="OBJECT",y.STRING="STRING",y.INTEGER="INTEGER",y.CURRENCY="CURRENCY",y.PERCENT="PERCENT",y.DURATION="DURATION",y.MONTH="MONTH_TIMESTAMP",y.QUARTER="QUARTER_TIMESTAMP",y.DAY="DAY_TIMESTAMP",y.WEEK="WEEK_TIMESTAMP",y.YEAR="YEAR_TIMESTAMP",y.HOUR="HOUR_TIMESTAMP",e.EAnalyticColumnKey=void 0,(I=e.EAnalyticColumnKey||(e.EAnalyticColumnKey={})).CAMPAIGNS="experiments",I.VISITOR_ITEMS="visitor_items",I.DEVICE_ITEMS="device_items",I.TRAFFIC_SOURCE_ITEMS="traffic_source_items",e.EAnalyticMode=void 0,(S=e.EAnalyticMode||(e.EAnalyticMode={})).ALL_SESSION="ALL_SESSION",S.FIRST_SESSION="FIRST_SESSION",S.PAGE_ONLY="PAGE_ONLY",e.EAnalyticSource=void 0,(D=e.EAnalyticSource||(e.EAnalyticSource={})).SESSIONS="sessions",D.SALES="sales",e.EVisitorType=void 0,(F=e.EVisitorType||(e.EVisitorType={})).NEW="new",F.RETURNING="returning",e.EDeviceType=void 0,(M=e.EDeviceType||(e.EDeviceType={})).DESKTOP="desktop",M.MOBILE="mobile",M.TABLET="tablet",e.ETrafficSourceType=void 0,(_=e.ETrafficSourceType||(e.ETrafficSourceType={})).DIRECT="direct",_.EMAIL="email",_.REFERRAL="referral",_.ORGANIC_SOCIAL="organic-social",_.ORGANIC_SEARCH="organic-search",_.PAID_SOCIAL="paid-social",_.PAID_SEARCH="paid-search",_.SMS="sms",e.EComparisonOperator=void 0,(g=e.EComparisonOperator||(e.EComparisonOperator={})).EQ="=",g.IN="IN",g.LIKE="LIKE",e.EGroupOperator=void 0,(N=e.EGroupOperator||(e.EGroupOperator={})).OR="OR",N.AND="AND",e.EFilterField=void 0,(C=e.EFilterField||(e.EFilterField={})).DEVICE="device",C.DEVICES="devices",C.VISITOR="visitor_type",C.VISITORS="visitor_types",C.TRAFFIC_SOURCE="traffic_source",C.TRAFFIC_SOURCES="traffic_sources",C.VERSION="version",C.VERSIONS="versions",C.SINGLE_PAGE="page_path",C.LIST_PAGE="page_paths",C.GROUP_CAMPAIGN_ITEM="group_campaign_item",C.GROUP_CAMPAIGN_ITEMS="group_campaign_items",C.SINGLE_CAMPAIGN="experiment_id",C.GROUP_CAMPAIGN="experiment_group_id",C.CAMPAIGN_VERSION_ID="version_id",C.GROUP_CAMPAIGN_VERSION_ID="group_version_id",e.EOperatorField=void 0,(P=e.EOperatorField||(e.EOperatorField={})).DEVICE_OPERATOR="deviceOperator",P.VISITOR_OPERATOR="visitorOperator",P.TRAFFIC_SOURCE_OPERATOR="trafficSourceOperator",P.VERSION_OPERATOR="versionOperator",P.PAGE_OPERATOR="pageOperator",P.CAMPAIGN_ITEM_OPERATOR="campaignItemOperator",e.EGroupWithClause=void 0,(v=e.EGroupWithClause||(e.EGroupWithClause={})).NONE="",v.TOTALS="TOTALS",v.ALL="WITH GROUP_TOTALS, TOTALS",e.EOrderDirectionType=void 0,(h=e.EOrderDirectionType||(e.EOrderDirectionType={})).ASC="ASC",h.DESC="DESC",e.EPageMetric=void 0,(G=e.EPageMetric||(e.EPageMetric={})).PAGE_ITEMS="page_items",G.PAGE_PATHS="page_paths",e.EPageDimension=void 0,(e.EPageDimension||(e.EPageDimension={})).PAGE_PATH="page_path",e.EPageField=void 0,(Y=e.EPageField||(e.EPageField={})).SHOPIFY_PAGE_ID="shopify_page_id",Y.LOCATION_PATH="location_path",Y.PAGE_TYPE="page_type",Y.PAGE_TITLE="page_title",Y.PAGE_PATH="page_path",Y.TEMPLATE_SUFFIX="template_suffix",e.ERowReaderMode=void 0,($=e.ERowReaderMode||(e.ERowReaderMode={})).DEFAULT="DEFAULT",$.COMPARISON="COMPARISON",$.TOTALS="TOTALS",$.COMPARISON_TOTALS="COMPARISON_TOTALS",e.ETimeDimension=void 0,(L=e.ETimeDimension||(e.ETimeDimension={})).HOUR="hour",L.DAY="day",L.WEEK="week",L.MONTH="month",L.QUARTER="quarter",L.YEAR="year";const b={[e.ERowReaderMode.DEFAULT]:{prefix:"",suffix:""},[e.ERowReaderMode.COMPARISON]:{prefix:A,suffix:T},[e.ERowReaderMode.TOTALS]:{prefix:"",suffix:p},[e.ERowReaderMode.COMPARISON_TOTALS]:{prefix:A,suffix:R}},U="YYYY-MM-DDTHH:mm:ss",Q=["MODE","FROM","SHOW","GROUP BY","TIMESERIES","SINCE","DURING","TIMEZONE","WHERE","ORDER BY","LIMIT","OFFSET"],x=Q.join("|"),H=1e3,V=e.EGroupOperator.OR,j=(e,t=V)=>e.length?1===e.length?e[0]??"":`(${e.join(` ${t} `)})`:"",W=t=>{switch(t.operator){case e.EComparisonOperator.EQ:return(({fields:e,value:t,groupOperator:r})=>e.length?j(e.map(e=>`${e} = ${t}`),r):"")(t);case e.EComparisonOperator.IN:return(({fields:e,values:t,groupOperator:r})=>e.length&&t.length?j(e.map(e=>`${e} IN (${t.join(", ")})`),r):"")(t);case e.EComparisonOperator.LIKE:return(({fields:e,value:t,groupOperator:r})=>{const i=t.trim();return i&&e.length?j(e.map(e=>`${e} LIKE '%${i}%'`),r):""})(t)}},B=e=>e?.length?e.map(W).filter(Boolean):[],K=[{operator:e.EOperatorField.DEVICE_OPERATOR,singleField:e.EFilterField.DEVICE,multiField:e.EFilterField.DEVICES,fieldName:e.EFilterField.DEVICE},{operator:e.EOperatorField.VISITOR_OPERATOR,singleField:e.EFilterField.VISITOR,multiField:e.EFilterField.VISITORS,fieldName:e.EFilterField.VISITOR},{operator:e.EOperatorField.TRAFFIC_SOURCE_OPERATOR,singleField:e.EFilterField.TRAFFIC_SOURCE,multiField:e.EFilterField.TRAFFIC_SOURCES,fieldName:e.EFilterField.TRAFFIC_SOURCE},{operator:e.EOperatorField.VERSION_OPERATOR,singleField:e.EFilterField.VERSION,multiField:e.EFilterField.VERSIONS,fieldName:e.EFilterField.VERSION},{operator:e.EOperatorField.PAGE_OPERATOR,singleField:e.EFilterField.SINGLE_PAGE,multiField:e.EFilterField.LIST_PAGE,fieldName:e.EFilterField.SINGLE_PAGE},{operator:e.EOperatorField.CAMPAIGN_ITEM_OPERATOR,singleField:e.EFilterField.GROUP_CAMPAIGN_ITEM,multiField:e.EFilterField.GROUP_CAMPAIGN_ITEMS,condition:e.EFilterField.GROUP_CAMPAIGN,fieldName:e.EFilterField.SINGLE_CAMPAIGN},{operatorVal:O,singleField:e.EFilterField.SINGLE_CAMPAIGN,multiField:e.EFilterField.GROUP_CAMPAIGN}],w=(e,t)=>{const r=[],i=Object.keys(e).length>0,a=!!t&&Object.keys(t).length>0;if(!i&&!a)return r;const n=(e=>e?Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[e,Array.isArray(t)?`${e} IN (${t.join(", ")})`:`${e} = ${t}`])):{})(t);return K.forEach(({operator:t,operatorVal:i,singleField:a,multiField:o,condition:s,fieldName:l})=>{if(n[a])return void r.push(n[a]);const E=t?e[t]:i;let u=e[a];const c=e[o],m=s&&e[s];if(s&&!m)return;const d=l??(u?a:o);i&&!u&&(u=e[o]);const p=(e=>{const{operatorValue:t,singleValue:r,multiValue:i,fieldName:a}=e;return t===O&&r?`${a} = ${r}`:t===f&&Array.isArray(i)&&i.length>0?`${a} IN (${i.join(", ")})`:""})({operatorValue:E,singleValue:Array.isArray(u)?void 0:u,multiValue:Array.isArray(c)?c:void 0,fieldName:d});p&&r.push(p)}),r},q=e=>{const t=[];return e?(Object.entries(e).forEach(([e,r])=>{r&&t.push(`${e} = ${r}`)}),t):t},X=(e,t)=>{if(!e||0===t.length)return[];const r=t.find(t=>e[t]);return r?[r]:[]},z=({filters:e,overrideFilters:t,versionIds:r,extraConditions:i})=>{const a=[...w(e,t),...q(r),...B(i)];return a.length>0?`WHERE ${a.join(" AND ")}`:""},k=e=>{const t=e.match(new RegExp(`\\bWHERE\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b|$)`,"i"));if(!t)return{filters:{}};const r=(t[1]??"").trim().split(/\s+AND\s+/i),i={},a={};return r.forEach(e=>{const t=e.trim(),r=t.match(/^(\S+)\s+IN\s+\((.+)\)$/i);if(r){const e=r[1]??"",t=(r[2]??"").split(",").map(e=>e.trim()),a=K.find(t=>t.fieldName===e||t.multiField===e);return void(a?.operator&&(i[a.multiField]=t,i[a.operator]=f))}const n=t.match(/^(\S+)\s+=\s+(.+)$/);if(n){const e=n[1]??"",t=n[2]??"",r=K.find(t=>t.fieldName===e||t.singleField===e);r?(i[r.singleField]=t,r.operator&&(i[r.operator]=O)):e&&(a[e]=t)}}),{filters:i,versionIds:Object.keys(a).length>0?a:void 0}},J=e=>`FROM ${e.join(", ")}`,Z=e=>{const t=e.match(new RegExp(`\\bFROM\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b)`,"i"));return t?(t[1]??"").split(",").map(e=>e.trim()).filter(Boolean):[]},ee=(t,r=e.EGroupWithClause.ALL)=>0===t.length?"":`GROUP BY ${t.join(", ")} ${r}`,te=t=>{const r=t.match(new RegExp(`\\bGROUP BY\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b)`,"i"));if(!r)return{dimensions:[]};const i=(r[1]??"").trim(),a=i.toUpperCase().indexOf(" WITH ");return-1===a?{dimensions:i.split(",").map(e=>e.trim()).filter(Boolean),groupWithClause:e.EGroupWithClause.NONE}:{dimensions:i.slice(0,a).split(",").map(e=>e.trim()).filter(Boolean),groupWithClause:i.slice(a+1).trim()}},re=e=>e?`LIMIT ${e}`:"",ie=e=>{const t=e.match(/\bLIMIT\s+(\d+)/i);return t?parseInt(t[1]??"0",10):void 0},ae=e=>`MODE ${e}`,ne=e=>{const t=e.match(/\bMODE\s+(\S+)/i);return t?.[1]},oe=e=>!e||e<0?"":`OFFSET ${e}`,se=e=>{const t=e.match(/\bOFFSET\s+(\d+)/i);return t?parseInt(t[1]??"0",10):void 0},le=(e,t)=>{if(!e)return"";const r=Object.values(e).filter(e=>t?.includes(e.field)).map(e=>`${e.field} ${e.direction}`).join(", ");return r?`ORDER BY ${r}`:""},Ee=e=>{const t=e.match(new RegExp(`\\bORDER BY\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b|$)`,"i"));if(!t)return;const r={};return(t[1]??"").split(",").forEach(e=>{const t=e.trim().split(/\s+/);if(2===t.length){const e=t[0]??"",i=t[1]??"";e&&(r[e]={field:e,direction:i})}}),Object.keys(r).length>0?r:void 0},ue=e=>`SHOW ${e.join(", ")}`,ce=e=>{const t=e.match(new RegExp(`\\bSHOW\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b)`,"i"));return t?(t[1]??"").split(",").map(e=>e.trim()).filter(Boolean):[]};r.extend(n),r.extend(a),r.extend(i);let me="UTC";const de="YYYY-MM-DD HH:mm:ss";function pe(){return me}const Ae=e=>e?r(e).tz(me):r().tz(me),Te=e=>"string"==typeof e?Ae(e):e,Re=(e,t=!1)=>t&&(e=>0===e.hour()&&0===e.minute())(e)?e.endOf("day").format(U):e.format(U),Oe=e=>{const t=Te(e.startDate),r=Te(e.endDate);return t.isSame(r)?{dateGTE:Re(t),dateLTE:(i=r,Re(i?Ae(i).endOf("day"):Ae().endOf("day")))}:{dateGTE:Re(t),dateLTE:Re(r,!0)};var i},fe=e=>{const{dateRange:t,compareDateRange:r,overrideFilters:i,timeDimension:a}=e,n=a?i?.[a]:void 0;if(a&&n)return`DURING (${n}, ${a})`;if(!t)return"";const{dateGTE:o,dateLTE:s}=Oe(t),{dateGTE:l,dateLTE:E}=r?Oe(r):{};return`SINCE ${o} UNTIL ${s} ${r?`COMPARE TO ${l} UNTIL ${E}`:""}`},ye=e=>{const t=e.match(/\bDURING\s+\(([^,]+),\s*([^)]+)\)/i);if(t){const e=t[1]??"",r=t[2]??"";return{timeDimension:r.trim(),overrideFilters:{[r.trim()]:e.trim()}}}const r=e.match(/\bSINCE\s+(\S+)\s+UNTIL\s+(\S+)/i);if(!r)return{};const i={startDate:Ae(r[1]??""),endDate:Ae(r[2]??"")},a=e.match(/\bCOMPARE TO\s+(\S+)\s+UNTIL\s+(\S+)/i);return{dateRange:i,compareDateRange:a?{startDate:Ae(a[1]??""),endDate:Ae(a[2]??"")}:void 0}},Ie=e=>e?`TIMESERIES ${e}`:"",Se=e=>{const t=e.match(/\bTIMESERIES\s+(\S+)/i);return t?.[1]},De=e=>{const t=e??pe();return t?`TIMEZONE ${t}`:""},Fe=e=>{const t=e.match(/\bTIMEZONE\s+(\S+)/i);return t?.[1]};function Me(e){if("string"!=typeof e)return!1;const t=e.trim();return/^MODE\b[\s\S]*\bFROM\b[\s\S]*\bSHOW\b[\s\S]*$/.test(t)}const _e=e=>e?.gemxQLQuery?.tableData?.columns??[],ge=/\.0+$/,Ne=(e,t=2)=>(e=>`${e}`.replace(ge,""))(e.toFixed(t)),Ce=(e,t,r=2)=>{const i=((e,t,r=2)=>{if("number"!=typeof e||!t)return;return 0===e?0:parseFloat(Ne(e/t*100,r))})(e,t,r);if("number"==typeof i)return(e=>e>0&&e<.005)(i)?"~0%":`${i}%`};var Pe;function ve(e){return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}e.AnalyticInterval=void 0,(Pe=e.AnalyticInterval||(e.AnalyticInterval={})).DAY="DAY",Pe.HOUR="HOUR",Pe.MONTH="MONTH",Pe.QUARTER="QUARTER",Pe.WEEK="WEEK",Pe.YEAR="YEAR";const he=60,Ge=3600,Ye=e=>{let t=e;Number.isFinite(e)&&null!=e||(t=0);const r=Ne(t);if(t>=Ge){return`${Math.floor(t/Ge)}h ${Math.floor(t%Ge/he)}m ${Math.floor(t%he)}s`}if(t>=he){return`${Math.floor(t/he)}m ${Math.floor(t%he)}s`}return`${r}s`},$e=(t,r,i)=>{if(!t)return"";const a=i?.isExpandDetail?{formatHouse:"MMM D, h:mm A",formatDay:"MMM D, YYYY",formatMonth:"MMM YYYY",formatYear:"MMM YYYY"}:{formatHouse:"h A",formatDay:"MMM D",formatMonth:"MMM YYYY",formatYear:"YYYY"};switch(r){case e.AnalyticInterval.HOUR:return Ae(t).format(a.formatHouse);case e.AnalyticInterval.DAY:case e.AnalyticInterval.WEEK:return Ae(t).format(a.formatDay);case e.AnalyticInterval.MONTH:return Ae(t).format(a.formatMonth);case e.AnalyticInterval.QUARTER:{const e=Ae(t);return`Q${e.quarter()} ${e.format("YYYY")}`}case e.AnalyticInterval.YEAR:return Ae(t).format(a.formatYear)}return Ae(t).format(a.formatMonth)},Le=e=>{if(!e)return"None";const t=Ae(e),r=Ae(),i=Ae().subtract(1,"day"),a=t.format("YYYY-MM-DD")===r.format("YYYY-MM-DD"),n=t.format("YYYY-MM-DD")===i.format("YYYY-MM-DD");if(a)return`Today at ${t.format("HH:mm")}`;if(n)return`Yesterday at ${t.format("HH:mm")}`;const o=r.diff(t,"day");return o>=0&&o<7?`${t.format("dddd")} at ${t.format("HH:mm")}`:`${t.format("MMM D")} at ${t.format("hh:mm a")}`},be=({value:t,formatter:r,getTextPrice:i,name:a})=>{if(null!==t&&("object"==typeof t||Array.isArray(t)))return t;switch(r){case e.EAnalyticDataType.INTEGER:return ve((t??0).toString());case e.EAnalyticDataType.CURRENCY:return i?i(t,!1):`${t??0}`;case e.EAnalyticDataType.DATE:return Le(t);case e.EAnalyticDataType.PERCENT:return"number"!=typeof t?Ce(0,1,2)??"":Ce(t/100,1,2)??"";case e.EAnalyticDataType.DURATION:return Ye(Number(t));case e.EAnalyticDataType.STRING:{const r=a===e.EAnalyticColumnKey.CAMPAIGNS?"":d;return t??r}case e.EAnalyticDataType.DAY:return $e(t,e.AnalyticInterval.DAY,{isExpandDetail:!0});case e.EAnalyticDataType.HOUR:return $e(t,e.AnalyticInterval.HOUR,{isExpandDetail:!0});case e.EAnalyticDataType.MONTH:return $e(t,e.AnalyticInterval.MONTH,{isExpandDetail:!0});case e.EAnalyticDataType.YEAR:return $e(t,e.AnalyticInterval.YEAR);case e.EAnalyticDataType.WEEK:return $e(t,e.AnalyticInterval.WEEK,{isExpandDetail:!0});case e.EAnalyticDataType.QUARTER:return $e(t,e.AnalyticInterval.QUARTER,{isExpandDetail:!0});case e.EAnalyticDataType.OBJECT:case e.EAnalyticDataType.ARRAY:return t;default:return`${t}`}},Ue=e=>{const t=e?.sessions;return"number"==typeof t&&t>0},Qe=e=>{if(e)return"string"==typeof e?JSON.parse(e):e},xe=e=>{try{const t=Qe(e);return t&&"object"==typeof t?t:null}catch{return null}},He=e=>{try{const t=Qe(e);if(!Array.isArray(t))return;return t}catch{return}},Ve=(e,t)=>{const r=e?.[t];return"number"==typeof r?r:0};var je;e.GPaginationDirection=void 0,(je=e.GPaginationDirection||(e.GPaginationDirection={})).NEXT="NEXT",je.PREV="PREV";e.CLAUSE_KEYWORDS=Q,e.CLAUSE_KEYWORD_BOUNDARY=x,e.COMPARE_PREFIX=A,e.COMPARE_SUFFIX=T,e.COMPARE_TOTALS_SUFFIX=R,e.ColumnSelectFragmentDoc=s,e.DATE_QUERY_FORMAT=U,e.DEFAULT_QUERY_LIMIT=H,e.GemXqlResultSelectFragmentDoc=E,e.GemxQlDocument=u,e.NONE_VALUE=d,e.OPERATOR_IS=O,e.OPERATOR_IS_ONE_OF=f,e.PLACEHOLDER_VALUE="-",e.ROW_READER_MODE_CONFIG=b,e.TOTALS_SUFFIX=p,e.TableDataSelectFragmentDoc=l,e.buildConditionQuery=z,e.buildExtraCondition=W,e.buildExtraConditions=B,e.buildFromQuery=J,e.buildGemXQlQuery=e=>{const{mode:t,metrics:r,dimensions:i,dateRange:a,compareDateRange:n,filters:o,overrideFilters:s,versionIds:l,extraConditions:E,orderBy:u,sources:c,timeDimension:m,groupWithClause:d,timezone:p,limit:A=H,offset:T,extraOrderByFields:R}=e,O=[...i,...X(u,r),...R??[]],f=[ae(t),J(c),ue(r),ee(i,d),Ie(m),fe({dateRange:a,compareDateRange:n,timeDimension:m,overrideFilters:s}),De(p),z({filters:o,overrideFilters:s,versionIds:l,extraConditions:E}),le(u,O),re(A),oe(T)].filter(Boolean).join(" ");return Me(f)?f:""},e.buildGroupQuery=ee,e.buildLimitQuery=re,e.buildModeQuery=ae,e.buildOffsetQuery=oe,e.buildOrderByQuery=le,e.buildShowQuery=ue,e.buildTimeQuery=fe,e.buildTimeSeriesQuery=Ie,e.buildTimezoneQuery=De,e.buildVersionIdCondition=q,e.convertDateToTz=e=>e?r.tz(r(e).format(de),me):r.tz(r().format(de),me),e.createNumericRowReader=(t,r=e.ERowReaderMode.DEFAULT)=>e=>{const{prefix:i,suffix:a}=b[r],n=t[`${i}${e}${a}`];if("number"==typeof n)return n;if("string"==typeof n){const e=parseFloat(n);return isNaN(e)?0:e}return 0},e.dayjsTz=Ae,e.extractColumnTypes=e=>{const t=_e(e),r={};for(const e of t)e?.name&&(r[e.name]=e.dataType);return r},e.extractQueryColumns=_e,e.extractQueryRows=e=>e?.gemxQLQuery?.tableData?.rows??[],e.filterConfigs=K,e.formatAnalyticData=be,e.formatAnalyticDate=Le,e.generateFilterConditions=w,e.getComparisonKey=e=>`${A}${e}${T}`,e.getComparisonTotalsKey=e=>`${A}${e}${T}${p}`,e.getFirstMetricInOrderBy=X,e.getFormattedByInterval=$e,e.getInitialTimezone=pe,e.getTimeDimensionByDate=(t,r)=>{const i=r.diff(t,"day");return i<=3?e.ETimeDimension.HOUR:i<=93?e.ETimeDimension.DAY:e.ETimeDimension.MONTH},e.getTimeDurationLabel=Ye,e.getTotalsKey=e=>`${e}${p}`,e.hasMetricData=Ue,e.isValidQueryInput=Me,e.numberWithCommas=ve,e.parseBreakdownItems=e=>He(e)?.map(e=>({...e,total:Number(e.total)})),e.parseConditionQuery=k,e.parseFromQuery=Z,e.parseGemXQlQuery=e=>{const{dateRange:t,compareDateRange:r,timeDimension:i,overrideFilters:a}=ye(e),n=i??Se(e),{dimensions:o,groupWithClause:s}=te(e),{filters:l,versionIds:E}=k(e);return{mode:ne(e),sources:Z(e),metrics:ce(e),dimensions:o,groupWithClause:s,timeDimension:n,dateRange:t,compareDateRange:r,overrideFilters:a,filters:l,versionIds:E,timezone:Fe(e),orderBy:Ee(e),limit:ie(e),offset:se(e)}},e.parseGroupQuery=te,e.parseJsonArray=He,e.parseJsonObject=xe,e.parseLimitQuery=ie,e.parseModeQuery=ne,e.parseOffsetQuery=se,e.parseOrderByQuery=Ee,e.parsePageItems=e=>xe(e),e.parseShowQuery=ce,e.parseTimeQuery=ye,e.parseTimeSeriesQuery=Se,e.parseTimezoneQuery=Fe,e.readNumeric=Ve,e.setTz=function(e){me=e,r.tz.setDefault(e)},e.useAnalyticData=e=>{const t=({value:t,formatter:r,name:i})=>be({value:t,formatter:r,getTextPrice:e,name:i});return{formatData:t,computeMetric:({metric:e,previousMetric:r,metricKey:i,formatter:a})=>{if(!Ue(e))return{value:0,change:"-"};const n=Ve(e,i),o=Ve(r,i),s=t({value:n,formatter:a,name:i});if(0===n&&0!==o)return{value:s,change:-100};if(0===o)return{value:s,change:"-"};return{value:s,change:(n-o)/o*100}}}},e.useCustomGemXQlQuery=c,e.useGemXQlPagination=({resetKey:t,itemsPerPage:r})=>{const[i,a]=o.useState(1),n=o.useRef(),s=i>1&&void 0!==n.current&&n.current!==t?1:i,l=(s-1)*r,E=o.useCallback(t=>r=>{a(i=>{const a=r===e.GPaginationDirection.NEXT?i+1:i-1;return Math.min(Math.max(a,1),t)})},[]);o.useEffect(()=>{n.current!==t&&(n.current=t,a(1))},[t]);const u=o.useCallback(({totalRecords:e,isLoading:t})=>{const i=Math.max(1,Math.ceil(e/r));return{currentPage:s,totalPages:i,loading:t,handlePageChange:E(i)}},[s,r,E]);return{currentPage:s,offset:l,buildPagination:u}},e.useGemxQlNamedQuery=m});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@tanstack/react-query"),require("dayjs"),require("dayjs/plugin/quarterOfYear.js"),require("dayjs/plugin/timezone.js"),require("dayjs/plugin/utc.js"),require("react")):"function"==typeof define&&define.amd?define(["exports","@tanstack/react-query","dayjs","dayjs/plugin/quarterOfYear.js","dayjs/plugin/timezone.js","dayjs/plugin/utc.js","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).GemAnalytics={},e.reactQuery,e.dayjs,e.quarterOfYear,e.timezone,e.utc,e.React)}(this,function(e,t,r,i,a,n,o){"use strict";const s="\n fragment ColumnSelect on Column {\n dataType\n displayName\n name\n}\n ",l="\n fragment TableDataSelect on TableData {\n columns {\n ...ColumnSelect\n }\n rows\n}\n ",E="\n fragment GemXQLResultSelect on GemxQLResult {\n tableData {\n ...TableDataSelect\n }\n}\n ",u=`\n query GemxQL($input: String!) {\n gemxQLQuery(query: $input) {\n ...GemXQLResultSelect\n }\n}\n ${E}\n${l}\n${s}`,c=(e,r,i)=>t.useQuery({queryKey:["GemXQlCustom",e],queryFn:r(u,e),...i});c.getKey=e=>["GemXQlCustom",e];const m=({name:e,variables:r,fetcher:i},a)=>{const n=u.replace(/query\s+GemxQL\b/,`query ${e}`);return t.useQuery({queryKey:[e,r],queryFn:i(n,r),retry:0,...a})};m.getKey=(e,t)=>[e,t];const d="None",p="___totals",A="comparison___",T="___previous_period",R=`${T}${p}`,O="is",f="is_one_of";var y,I,S,D,F,M,_,g,N,C,P,v,h,G,Y,$,L;e.EAnalyticDataType=void 0,(y=e.EAnalyticDataType||(e.EAnalyticDataType={})).DATE="DATE",y.ARRAY="ARRAY",y.OBJECT="OBJECT",y.STRING="STRING",y.INTEGER="INTEGER",y.CURRENCY="CURRENCY",y.PERCENT="PERCENT",y.DURATION="DURATION",y.MONTH="MONTH_TIMESTAMP",y.QUARTER="QUARTER_TIMESTAMP",y.DAY="DAY_TIMESTAMP",y.WEEK="WEEK_TIMESTAMP",y.YEAR="YEAR_TIMESTAMP",y.HOUR="HOUR_TIMESTAMP",e.EAnalyticColumnKey=void 0,(I=e.EAnalyticColumnKey||(e.EAnalyticColumnKey={})).CAMPAIGNS="experiments",I.VISITOR_ITEMS="visitor_items",I.DEVICE_ITEMS="device_items",I.TRAFFIC_SOURCE_ITEMS="traffic_source_items",e.EAnalyticMode=void 0,(S=e.EAnalyticMode||(e.EAnalyticMode={})).ALL_SESSION="ALL_SESSION",S.FIRST_SESSION="FIRST_SESSION",S.PAGE_ONLY="PAGE_ONLY",e.EAnalyticSource=void 0,(D=e.EAnalyticSource||(e.EAnalyticSource={})).SESSIONS="sessions",D.SALES="sales",e.EVisitorType=void 0,(F=e.EVisitorType||(e.EVisitorType={})).NEW="new",F.RETURNING="returning",e.EDeviceType=void 0,(M=e.EDeviceType||(e.EDeviceType={})).DESKTOP="desktop",M.MOBILE="mobile",M.TABLET="tablet",e.ETrafficSourceType=void 0,(_=e.ETrafficSourceType||(e.ETrafficSourceType={})).DIRECT="direct",_.EMAIL="email",_.REFERRAL="referral",_.ORGANIC_SOCIAL="organic-social",_.ORGANIC_SEARCH="organic-search",_.PAID_SOCIAL="paid-social",_.PAID_SEARCH="paid-search",_.SMS="sms",e.EComparisonOperator=void 0,(g=e.EComparisonOperator||(e.EComparisonOperator={})).EQ="=",g.IN="IN",g.LIKE="LIKE",e.EGroupOperator=void 0,(N=e.EGroupOperator||(e.EGroupOperator={})).OR="OR",N.AND="AND",e.EFilterField=void 0,(C=e.EFilterField||(e.EFilterField={})).DEVICE="device",C.DEVICES="devices",C.VISITOR="visitor_type",C.VISITORS="visitor_types",C.TRAFFIC_SOURCE="traffic_source",C.TRAFFIC_SOURCES="traffic_sources",C.VERSION="version",C.VERSIONS="versions",C.SINGLE_PAGE="page_path",C.LIST_PAGE="page_paths",C.GROUP_CAMPAIGN_ITEM="group_campaign_item",C.GROUP_CAMPAIGN_ITEMS="group_campaign_items",C.SINGLE_CAMPAIGN="experiment_id",C.GROUP_CAMPAIGN="experiment_group_id",C.CAMPAIGN_VERSION_ID="version_id",C.GROUP_CAMPAIGN_VERSION_ID="group_version_id",e.EOperatorField=void 0,(P=e.EOperatorField||(e.EOperatorField={})).DEVICE_OPERATOR="deviceOperator",P.VISITOR_OPERATOR="visitorOperator",P.TRAFFIC_SOURCE_OPERATOR="trafficSourceOperator",P.VERSION_OPERATOR="versionOperator",P.PAGE_OPERATOR="pageOperator",P.CAMPAIGN_ITEM_OPERATOR="campaignItemOperator",e.EGroupWithClause=void 0,(v=e.EGroupWithClause||(e.EGroupWithClause={})).NONE="",v.TOTALS="TOTALS",v.ALL="WITH GROUP_TOTALS, TOTALS",e.EOrderDirectionType=void 0,(h=e.EOrderDirectionType||(e.EOrderDirectionType={})).ASC="ASC",h.DESC="DESC",e.EPageMetric=void 0,(G=e.EPageMetric||(e.EPageMetric={})).PAGE_ITEMS="page_items",G.PAGE_PATHS="page_paths",e.EPageDimension=void 0,(e.EPageDimension||(e.EPageDimension={})).PAGE_PATH="page_path",e.EPageField=void 0,(Y=e.EPageField||(e.EPageField={})).SHOPIFY_PAGE_ID="shopify_page_id",Y.LOCATION_PATH="location_path",Y.PAGE_TYPE="page_type",Y.PAGE_TITLE="page_title",Y.PAGE_PATH="page_path",Y.TEMPLATE_SUFFIX="template_suffix",e.ERowReaderMode=void 0,($=e.ERowReaderMode||(e.ERowReaderMode={})).DEFAULT="DEFAULT",$.COMPARISON="COMPARISON",$.TOTALS="TOTALS",$.COMPARISON_TOTALS="COMPARISON_TOTALS",e.ETimeDimension=void 0,(L=e.ETimeDimension||(e.ETimeDimension={})).HOUR="hour",L.DAY="day",L.WEEK="week",L.MONTH="month",L.QUARTER="quarter",L.YEAR="year";const b={[e.ERowReaderMode.DEFAULT]:{prefix:"",suffix:""},[e.ERowReaderMode.COMPARISON]:{prefix:A,suffix:T},[e.ERowReaderMode.TOTALS]:{prefix:"",suffix:p},[e.ERowReaderMode.COMPARISON_TOTALS]:{prefix:A,suffix:R}},U="YYYY-MM-DDTHH:mm:ss",Q=["MODE","FROM","SHOW","GROUP BY","TIMESERIES","SINCE","DURING","TIMEZONE","WHERE","ORDER BY","LIMIT","OFFSET"],x=Q.join("|"),H=1e3,V=e.EGroupOperator.OR,j=(e,t=V)=>e.length?1===e.length?e[0]??"":`(${e.join(` ${t} `)})`:"",W=t=>{switch(t.operator){case e.EComparisonOperator.EQ:return(({fields:e,value:t,groupOperator:r})=>e.length?j(e.map(e=>`${e} = ${t}`),r):"")(t);case e.EComparisonOperator.IN:return(({fields:e,values:t,groupOperator:r})=>e.length&&t.length?j(e.map(e=>`${e} IN (${t.join(", ")})`),r):"")(t);case e.EComparisonOperator.LIKE:return(({fields:e,value:t,groupOperator:r})=>{const i=t.trim();return i&&e.length?j(e.map(e=>`${e} LIKE '%${i}%'`),r):""})(t)}},B=e=>e?.length?e.map(W).filter(Boolean):[],K=[{operator:e.EOperatorField.DEVICE_OPERATOR,singleField:e.EFilterField.DEVICE,multiField:e.EFilterField.DEVICES,fieldName:e.EFilterField.DEVICE},{operator:e.EOperatorField.VISITOR_OPERATOR,singleField:e.EFilterField.VISITOR,multiField:e.EFilterField.VISITORS,fieldName:e.EFilterField.VISITOR},{operator:e.EOperatorField.TRAFFIC_SOURCE_OPERATOR,singleField:e.EFilterField.TRAFFIC_SOURCE,multiField:e.EFilterField.TRAFFIC_SOURCES,fieldName:e.EFilterField.TRAFFIC_SOURCE},{operator:e.EOperatorField.VERSION_OPERATOR,singleField:e.EFilterField.VERSION,multiField:e.EFilterField.VERSIONS,fieldName:e.EFilterField.VERSION},{operator:e.EOperatorField.PAGE_OPERATOR,singleField:e.EFilterField.SINGLE_PAGE,multiField:e.EFilterField.LIST_PAGE,fieldName:e.EFilterField.SINGLE_PAGE},{operator:e.EOperatorField.CAMPAIGN_ITEM_OPERATOR,singleField:e.EFilterField.GROUP_CAMPAIGN_ITEM,multiField:e.EFilterField.GROUP_CAMPAIGN_ITEMS,condition:e.EFilterField.GROUP_CAMPAIGN,fieldName:e.EFilterField.SINGLE_CAMPAIGN},{operatorVal:O,singleField:e.EFilterField.SINGLE_CAMPAIGN,multiField:e.EFilterField.GROUP_CAMPAIGN}],w=(e,t)=>{const r=[],i=Object.keys(e).length>0,a=!!t&&Object.keys(t).length>0;if(!i&&!a)return r;const n=(e=>e?Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[e,Array.isArray(t)?`${e} IN (${t.join(", ")})`:`${e} = ${t}`])):{})(t);return K.forEach(({operator:t,operatorVal:i,singleField:a,multiField:o,condition:s,fieldName:l})=>{if(n[a])return void r.push(n[a]);const E=t?e[t]:i;let u=e[a];const c=e[o],m=s&&e[s];if(s&&!m)return;const d=l??(u?a:o);i&&!u&&(u=e[o]);const p=(e=>{const{operatorValue:t,singleValue:r,multiValue:i,fieldName:a}=e;return t===O&&r?`${a} = ${r}`:t===f&&Array.isArray(i)&&i.length>0?`${a} IN (${i.join(", ")})`:""})({operatorValue:E,singleValue:Array.isArray(u)?void 0:u,multiValue:Array.isArray(c)?c:void 0,fieldName:d});p&&r.push(p)}),r},q=e=>{const t=[];return e?(Object.entries(e).forEach(([e,r])=>{r&&t.push(`${e} = ${r}`)}),t):t},z=(e,t)=>{if(!e||0===t.length)return[];const r=t.find(t=>e[t]);return r?[r]:[]},X=({filters:e,overrideFilters:t,versionIds:r,extraConditions:i})=>{const a=[...w(e,t),...q(r),...B(i)];return a.length>0?`WHERE ${a.join(" AND ")}`:""},k=e=>{const t=e.match(new RegExp(`\\bWHERE\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b|$)`,"i"));if(!t)return{filters:{}};const r=(t[1]??"").trim().split(/\s+AND\s+/i),i={},a={};return r.forEach(e=>{const t=e.trim(),r=t.match(/^(\S+)\s+IN\s+\((.+)\)$/i);if(r){const e=r[1]??"",t=(r[2]??"").split(",").map(e=>e.trim()),a=K.find(t=>t.fieldName===e||t.multiField===e);return void(a?.operator&&(i[a.multiField]=t,i[a.operator]=f))}const n=t.match(/^(\S+)\s+=\s+(.+)$/);if(n){const e=n[1]??"",t=n[2]??"",r=K.find(t=>t.fieldName===e||t.singleField===e);r?(i[r.singleField]=t,r.operator&&(i[r.operator]=O)):e&&(a[e]=t)}}),{filters:i,versionIds:Object.keys(a).length>0?a:void 0}},J=e=>`FROM ${e.join(", ")}`,Z=e=>{const t=e.match(new RegExp(`\\bFROM\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b)`,"i"));return t?(t[1]??"").split(",").map(e=>e.trim()).filter(Boolean):[]},ee=(t,r=e.EGroupWithClause.ALL)=>0===t.length?"":`GROUP BY ${t.join(", ")} ${r}`,te=t=>{const r=t.match(new RegExp(`\\bGROUP BY\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b)`,"i"));if(!r)return{dimensions:[]};const i=(r[1]??"").trim(),a=i.toUpperCase().indexOf(" WITH ");return-1===a?{dimensions:i.split(",").map(e=>e.trim()).filter(Boolean),groupWithClause:e.EGroupWithClause.NONE}:{dimensions:i.slice(0,a).split(",").map(e=>e.trim()).filter(Boolean),groupWithClause:i.slice(a+1).trim()}},re=e=>e?`LIMIT ${e}`:"",ie=e=>{const t=e.match(/\bLIMIT\s+(\d+)/i);return t?parseInt(t[1]??"0",10):void 0},ae=e=>`MODE ${e}`,ne=e=>{const t=e.match(/\bMODE\s+(\S+)/i);return t?.[1]},oe=e=>!e||e<0?"":`OFFSET ${e}`,se=e=>{const t=e.match(/\bOFFSET\s+(\d+)/i);return t?parseInt(t[1]??"0",10):void 0},le=(e,t)=>{if(!e)return"";const r=Object.values(e).filter(e=>t?.includes(e.field)).map(e=>`${e.field} ${e.direction}`).join(", ");return r?`ORDER BY ${r}`:""},Ee=e=>{const t=e.match(new RegExp(`\\bORDER BY\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b|$)`,"i"));if(!t)return;const r={};return(t[1]??"").split(",").forEach(e=>{const t=e.trim().split(/\s+/);if(2===t.length){const e=t[0]??"",i=t[1]??"";e&&(r[e]={field:e,direction:i})}}),Object.keys(r).length>0?r:void 0},ue=e=>`SHOW ${e.join(", ")}`,ce=e=>{const t=e.match(new RegExp(`\\bSHOW\\s+([\\s\\S]+?)(?=\\s+(?:${x})\\b)`,"i"));return t?(t[1]??"").split(",").map(e=>e.trim()).filter(Boolean):[]};r.extend(n),r.extend(a),r.extend(i);let me="UTC";const de="YYYY-MM-DD HH:mm:ss";function pe(){return me}const Ae=e=>e?r(e).tz(me):r().tz(me),Te=e=>"string"==typeof e?Ae(e):e,Re=(e,t=!1)=>t&&(e=>0===e.hour()&&0===e.minute())(e)?e.endOf("day").format(U):e.format(U),Oe=e=>{const t=Te(e.startDate),r=Te(e.endDate);return t.isSame(r)?{dateGTE:Re(t),dateLTE:(i=r,Re(i?Ae(i).endOf("day"):Ae().endOf("day")))}:{dateGTE:Re(t),dateLTE:Re(r,!0)};var i},fe=e=>{const{dateRange:t,compareDateRange:r,overrideFilters:i,timeDimension:a}=e,n=a?i?.[a]:void 0;if(a&&n)return`DURING (${n}, ${a})`;if(!t)return"";const{dateGTE:o,dateLTE:s}=Oe(t),{dateGTE:l,dateLTE:E}=r?Oe(r):{};return`SINCE ${o} UNTIL ${s} ${r?`COMPARE TO ${l} UNTIL ${E}`:""}`},ye=e=>{const t=e.match(/\bDURING\s+\(([^,]+),\s*([^)]+)\)/i);if(t){const e=t[1]??"",r=t[2]??"";return{timeDimension:r.trim(),overrideFilters:{[r.trim()]:e.trim()}}}const r=e.match(/\bSINCE\s+(\S+)\s+UNTIL\s+(\S+)/i);if(!r)return{};const i={startDate:Ae(r[1]??""),endDate:Ae(r[2]??"")},a=e.match(/\bCOMPARE TO\s+(\S+)\s+UNTIL\s+(\S+)/i);return{dateRange:i,compareDateRange:a?{startDate:Ae(a[1]??""),endDate:Ae(a[2]??"")}:void 0}},Ie=e=>e?`TIMESERIES ${e}`:"",Se=e=>{const t=e.match(/\bTIMESERIES\s+(\S+)/i);return t?.[1]},De=e=>{const t=e??pe();return t?`TIMEZONE ${t}`:""},Fe=e=>{const t=e.match(/\bTIMEZONE\s+(\S+)/i);return t?.[1]};function Me(e){if("string"!=typeof e)return!1;const t=e.trim();return/^MODE\b[\s\S]*\bFROM\b[\s\S]*\bSHOW\b[\s\S]*$/.test(t)}const _e=e=>e?.gemxQLQuery?.tableData?.columns??[],ge=/\.0+$/,Ne=(e,t=2)=>(e=>`${e}`.replace(ge,""))(e.toFixed(t)),Ce=(e,t,r=2)=>{const i=((e,t,r=2)=>{if("number"!=typeof e||!t)return;return 0===e?0:parseFloat(Ne(e/t*100,r))})(e,t,r);if("number"==typeof i)return(e=>e>0&&e<.005)(i)?"~0%":`${i}%`};var Pe;function ve(e){return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}e.AnalyticInterval=void 0,(Pe=e.AnalyticInterval||(e.AnalyticInterval={})).DAY="DAY",Pe.HOUR="HOUR",Pe.MONTH="MONTH",Pe.QUARTER="QUARTER",Pe.WEEK="WEEK",Pe.YEAR="YEAR";const he=60,Ge=3600,Ye=e=>{let t=e;Number.isFinite(e)&&null!=e||(t=0);const r=Ne(t);if(t>=Ge){return`${Math.floor(t/Ge)}h ${Math.floor(t%Ge/he)}m ${Math.floor(t%he)}s`}if(t>=he){return`${Math.floor(t/he)}m ${Math.floor(t%he)}s`}return`${r}s`},$e=(t,r,i)=>{if(!t)return"";const a=i?.isExpandDetail?{formatHouse:"MMM D, h:mm A",formatDay:"MMM D, YYYY",formatMonth:"MMM YYYY",formatYear:"MMM YYYY"}:{formatHouse:"h A",formatDay:"MMM D",formatMonth:"MMM YYYY",formatYear:"YYYY"};switch(r){case e.AnalyticInterval.HOUR:return Ae(t).format(a.formatHouse);case e.AnalyticInterval.DAY:case e.AnalyticInterval.WEEK:return Ae(t).format(a.formatDay);case e.AnalyticInterval.MONTH:return Ae(t).format(a.formatMonth);case e.AnalyticInterval.QUARTER:{const e=Ae(t);return`Q${e.quarter()} ${e.format("YYYY")}`}case e.AnalyticInterval.YEAR:return Ae(t).format(a.formatYear)}return Ae(t).format(a.formatMonth)},Le=e=>{if(!e)return"None";const t=Ae(e),r=Ae(),i=Ae().subtract(1,"day"),a=t.format("YYYY-MM-DD")===r.format("YYYY-MM-DD"),n=t.format("YYYY-MM-DD")===i.format("YYYY-MM-DD");if(a)return`Today at ${t.format("HH:mm")}`;if(n)return`Yesterday at ${t.format("HH:mm")}`;const o=r.diff(t,"day");return o>=0&&o<7?`${t.format("dddd")} at ${t.format("HH:mm")}`:`${t.format("MMM D")} at ${t.format("hh:mm a")}`},be=({value:t,formatter:r,getTextPrice:i,name:a})=>{if(null!==t&&("object"==typeof t||Array.isArray(t)))return t;switch(r){case e.EAnalyticDataType.INTEGER:return ve((t??0).toString());case e.EAnalyticDataType.CURRENCY:return i?i(t,!1):`${t??0}`;case e.EAnalyticDataType.DATE:return Le(t);case e.EAnalyticDataType.PERCENT:return"number"!=typeof t?Ce(0,1,2)??"":Ce(t/100,1,2)??"";case e.EAnalyticDataType.DURATION:return Ye(Number(t));case e.EAnalyticDataType.STRING:{const r=a===e.EAnalyticColumnKey.CAMPAIGNS?"":d;return t??r}case e.EAnalyticDataType.DAY:return $e(t,e.AnalyticInterval.DAY,{isExpandDetail:!0});case e.EAnalyticDataType.HOUR:return $e(t,e.AnalyticInterval.HOUR,{isExpandDetail:!0});case e.EAnalyticDataType.MONTH:return $e(t,e.AnalyticInterval.MONTH,{isExpandDetail:!0});case e.EAnalyticDataType.YEAR:return $e(t,e.AnalyticInterval.YEAR);case e.EAnalyticDataType.WEEK:return $e(t,e.AnalyticInterval.WEEK,{isExpandDetail:!0});case e.EAnalyticDataType.QUARTER:return $e(t,e.AnalyticInterval.QUARTER,{isExpandDetail:!0});case e.EAnalyticDataType.OBJECT:case e.EAnalyticDataType.ARRAY:return t;default:return`${t}`}},Ue=e=>{const t=e?.sessions;return"number"==typeof t&&t>0},Qe=e=>{if(e)return"string"==typeof e?JSON.parse(e):e},xe=e=>{try{const t=Qe(e);return t&&"object"==typeof t?t:null}catch{return null}},He=e=>{try{const t=Qe(e);if(!Array.isArray(t))return;return t}catch{return}},Ve=(e,t)=>{const r=e?.[t];return"number"==typeof r?r:0};var je;e.GPaginationDirection=void 0,(je=e.GPaginationDirection||(e.GPaginationDirection={})).NEXT="NEXT",je.PREV="PREV";e.CLAUSE_KEYWORDS=Q,e.CLAUSE_KEYWORD_BOUNDARY=x,e.COMPARE_PREFIX=A,e.COMPARE_SUFFIX=T,e.COMPARE_TOTALS_SUFFIX=R,e.ColumnSelectFragmentDoc=s,e.DATE_QUERY_FORMAT=U,e.DEFAULT_QUERY_LIMIT=H,e.GemXqlResultSelectFragmentDoc=E,e.GemxQlDocument=u,e.NONE_VALUE=d,e.OPERATOR_IS=O,e.OPERATOR_IS_ONE_OF=f,e.PLACEHOLDER_VALUE="-",e.ROW_READER_MODE_CONFIG=b,e.TOTALS_SUFFIX=p,e.TableDataSelectFragmentDoc=l,e.buildConditionQuery=X,e.buildExtraCondition=W,e.buildExtraConditions=B,e.buildFromQuery=J,e.buildGemXQlQuery=e=>{const{mode:t,metrics:r,dimensions:i,dateRange:a,compareDateRange:n,filters:o,overrideFilters:s,versionIds:l,extraConditions:E,orderBy:u,sources:c,timeDimension:m,groupWithClause:d,timezone:p,limit:A=H,offset:T,extraOrderByFields:R}=e,O=[...i,...z(u,r),...R??[]],f=[ae(t),J(c),ue(r),ee(i,d),Ie(m),fe({dateRange:a,compareDateRange:n,timeDimension:m,overrideFilters:s}),De(p),X({filters:o,overrideFilters:s,versionIds:l,extraConditions:E}),le(u,O),re(A),oe(T)].filter(Boolean).join(" ");return Me(f)?f:""},e.buildGroupQuery=ee,e.buildLimitQuery=re,e.buildModeQuery=ae,e.buildOffsetQuery=oe,e.buildOrderByQuery=le,e.buildShowQuery=ue,e.buildTimeQuery=fe,e.buildTimeSeriesQuery=Ie,e.buildTimezoneQuery=De,e.buildVersionIdCondition=q,e.convertDateToTz=e=>e?r.tz(r(e).format(de),me):r.tz(r().format(de),me),e.createNumericRowReader=(t,r=e.ERowReaderMode.DEFAULT)=>e=>{const{prefix:i,suffix:a}=b[r],n=t[`${i}${e}${a}`];if("number"==typeof n)return n;if("string"==typeof n){const e=parseFloat(n);return isNaN(e)?0:e}return 0},e.dayjsTz=Ae,e.dayjsTzToLocalTZ=e=>r(e?Ae(e).format(de):Ae().format(de)),e.extractColumnTypes=e=>{const t=_e(e),r={};for(const e of t)e?.name&&(r[e.name]=e.dataType);return r},e.extractQueryColumns=_e,e.extractQueryRows=e=>e?.gemxQLQuery?.tableData?.rows??[],e.filterConfigs=K,e.formatAnalyticData=be,e.formatAnalyticDate=Le,e.generateFilterConditions=w,e.getComparisonKey=e=>`${A}${e}${T}`,e.getComparisonTotalsKey=e=>`${A}${e}${T}${p}`,e.getFirstMetricInOrderBy=z,e.getFormattedByInterval=$e,e.getInitialTimezone=pe,e.getTimeDimensionByDate=(t,r)=>{const i=r.diff(t,"day");return i<=3?e.ETimeDimension.HOUR:i<=93?e.ETimeDimension.DAY:e.ETimeDimension.MONTH},e.getTimeDurationLabel=Ye,e.getTotalsKey=e=>`${e}${p}`,e.hasMetricData=Ue,e.isValidQueryInput=Me,e.numberWithCommas=ve,e.parseBreakdownItems=e=>He(e)?.map(e=>({...e,total:Number(e.total)})),e.parseConditionQuery=k,e.parseFromQuery=Z,e.parseGemXQlQuery=e=>{const{dateRange:t,compareDateRange:r,timeDimension:i,overrideFilters:a}=ye(e),n=i??Se(e),{dimensions:o,groupWithClause:s}=te(e),{filters:l,versionIds:E}=k(e);return{mode:ne(e),sources:Z(e),metrics:ce(e),dimensions:o,groupWithClause:s,timeDimension:n,dateRange:t,compareDateRange:r,overrideFilters:a,filters:l,versionIds:E,timezone:Fe(e),orderBy:Ee(e),limit:ie(e),offset:se(e)}},e.parseGroupQuery=te,e.parseJsonArray=He,e.parseJsonObject=xe,e.parseLimitQuery=ie,e.parseModeQuery=ne,e.parseOffsetQuery=se,e.parseOrderByQuery=Ee,e.parsePageItems=e=>xe(e),e.parseShowQuery=ce,e.parseTimeQuery=ye,e.parseTimeSeriesQuery=Se,e.parseTimezoneQuery=Fe,e.readNumeric=Ve,e.setTz=function(e){me=e,r.tz.setDefault(e)},e.useAnalyticData=e=>{const t=({value:t,formatter:r,name:i})=>be({value:t,formatter:r,getTextPrice:e,name:i});return{formatData:t,computeMetric:({metric:e,previousMetric:r,metricKey:i,formatter:a})=>{if(!Ue(e))return{value:0,change:"-"};const n=Ve(e,i),o=Ve(r,i),s=t({value:n,formatter:a,name:i});if(0===n&&0!==o)return{value:s,change:-100};if(0===o)return{value:s,change:"-"};return{value:s,change:(n-o)/o*100}}}},e.useCustomGemXQlQuery=c,e.useGemXQlPagination=({resetKey:t,itemsPerPage:r})=>{const[i,a]=o.useState(1),n=o.useRef(),s=i>1&&void 0!==n.current&&n.current!==t?1:i,l=(s-1)*r,E=o.useCallback(t=>r=>{a(i=>{const a=r===e.GPaginationDirection.NEXT?i+1:i-1;return Math.min(Math.max(a,1),t)})},[]);o.useEffect(()=>{n.current!==t&&(n.current=t,a(1))},[t]);const u=o.useCallback(({totalRecords:e,isLoading:t})=>{const i=Math.max(1,Math.ceil(e/r));return{currentPage:s,totalPages:i,loading:t,handlePageChange:E(i)}},[s,r,E]);return{currentPage:s,offset:l,buildPagination:u}},e.useGemxQlNamedQuery=m});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levi-gemcommerce/analytics",
3
- "version": "1.0.0-dev.11",
3
+ "version": "1.0.0-dev.12",
4
4
  "license": "MIT",
5
5
  "author": "gemx-dev",
6
6
  "sideEffects": [