@quillsql/react 2.10.23 → 2.10.24

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA2BA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,UAAU,WAAY,SAAQ,cAAc;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,mBAAmB,GACnB,oBAAoB,GACpB,eAAe,GACf,cAAc,GACd,UAAU,GACV,aAAa,GACb,eAAe,GACf,oBAAoB,GACpB,UAAU,GACV,SAAS,GACT,QAAQ,CAAC;AAEb,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,UAAU,UAAW,SAAQ,cAAc;IACzC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC;CAC7B;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AA4D3C,wBAAgB,gBAAgB,CAAC,aAAa,KAAA,EAAE,OAAO,KAAA,WAQtD;AAKD,QAAA,MAAM,KAAK,8JAYR,UAAU,4CAkCZ,CAAC;AAkeF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA4BA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,UAAU,WAAY,SAAQ,cAAc;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,mBAAmB,GACnB,oBAAoB,GACpB,eAAe,GACf,cAAc,GACd,UAAU,GACV,aAAa,GACb,eAAe,GACf,oBAAoB,GACpB,UAAU,GACV,SAAS,GACT,QAAQ,CAAC;AAEb,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,UAAU,UAAW,SAAQ,cAAc;IACzC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC;CAC7B;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AA4D3C,wBAAgB,gBAAgB,CAAC,aAAa,KAAA,EAAE,OAAO,KAAA,WAQtD;AAKD,QAAA,MAAM,KAAK,8JAYR,UAAU,4CAkCZ,CAAC;AAicF,eAAe,KAAK,CAAC"}
package/dist/cjs/Chart.js CHANGED
@@ -7,8 +7,6 @@ exports.didFiltersChange = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  // @ts-nocheck
9
9
  const react_1 = require("react");
10
- const aggregate_1 = require("./utils/aggregate");
11
- const ReportBuilder_1 = require("./ReportBuilder");
12
10
  const date_fns_1 = require("date-fns");
13
11
  const BarList_1 = __importDefault(require("./BarList"));
14
12
  const PieChart_1 = __importDefault(require("./PieChart"));
@@ -22,6 +20,7 @@ const BarChart_1 = __importDefault(require("./components/Chart/BarChart"));
22
20
  const merge_1 = require("./utils/merge");
23
21
  const ChartSkeleton_1 = __importDefault(require("./components/Chart/ChartSkeleton"));
24
22
  const ChartError_1 = __importDefault(require("./components/Chart/ChartError"));
23
+ const dateRangePickerUtils_1 = require("./DateRangePicker/dateRangePickerUtils");
25
24
  // @ts-ignore
26
25
  function sumByKey(arr, key) {
27
26
  // @ts-ignore
@@ -95,7 +94,6 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
95
94
  const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
96
95
  const [loading, setLoading] = (0, react_1.useState)(false);
97
96
  const [isComparison, setIsComparison] = (0, react_1.useState)(false);
98
- const [bucketData, setBucketData] = (0, react_1.useState)(null);
99
97
  (0, react_1.useEffect)(() => {
100
98
  async function getChartOptions() {
101
99
  if (!didFiltersChange(dashboard[chartId], dashboardFilters)) {
@@ -162,42 +160,6 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
162
160
  setInitialLoad(false);
163
161
  getChartOptions();
164
162
  }, [dashboardFilters, client, chartId]);
165
- (0, react_1.useEffect)(() => {
166
- if (!dashboardFilters ||
167
- !chartId ||
168
- !dashboard[chartId] ||
169
- !dashboard[chartId].buckets ||
170
- !dashboard[chartId].buckets.length) {
171
- return;
172
- }
173
- const dateFilter = Object.values(dashboardFilters).find((filter) => filter.filterType == 'date_range');
174
- if (dateFilter && dashboard[chartId].rows.length) {
175
- const aggregatedObj = (0, aggregate_1.aggregate)(dashboard[chartId], dashboard[chartId].buckets, dateFilter);
176
- setBucketData({
177
- name: dashboard[chartId].name,
178
- xAxisFormat: aggregatedObj.xAxisFormat,
179
- xAxisField: aggregatedObj.xAxisField,
180
- xAxisLabel: aggregatedObj.xAxisLabel,
181
- rows: aggregatedObj.bucketedRows,
182
- });
183
- }
184
- const stringFilters = dashboard[chartId].buckets.filter((bucket) => {
185
- return ((0, ReportBuilder_1.getPostgresBasicType)(dashboard[chartId].fields.find((field) => field.name === bucket.field)) === 'string');
186
- });
187
- if (stringFilters.length && dashboard[chartId].rows.length) {
188
- const aggregatedObj = (0, aggregate_1.aggregate)(dashboard[chartId], dashboard[chartId].buckets, null);
189
- setBucketData({
190
- name: dashboard[chartId].name,
191
- xAxisFormat: aggregatedObj.xAxisFormat,
192
- xAxisField: aggregatedObj.xAxisField,
193
- xAxisLabel: aggregatedObj.xAxisLabel,
194
- rows: aggregatedObj.bucketedRows,
195
- });
196
- }
197
- if (!dashboard[chartId].rows.length && bucketData !== null) {
198
- setBucketData(null);
199
- }
200
- }, [dashboard[chartId]]);
201
163
  const dateFilter = Object.values(dashboardFilters ?? {}).find((filter) => filter.filterType == 'date_range');
202
164
  const isPivot = dashboard[chartId]?.pivot || config?.pivot;
203
165
  const pivotTable = (0, react_1.useMemo)(() => {
@@ -281,25 +243,12 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
281
243
  return ((0, jsx_runtime_1.jsx)(BarList_1.default, { data: pivotTable
282
244
  ? pivotTable.rows
283
245
  : config
284
- ? (config.bucketedRows &&
285
- config.bucketedRows.length > 0 &&
286
- config.bucketedRows) ||
287
- config.rows
288
- : bucketData && bucketData.rows
289
- ? bucketData.rows
290
- : dashboard[chartId].rows, theme: theme, yAxisFields: pivotTableYAxis
246
+ ? config.rows
247
+ : dashboard[chartId].rows, theme: theme, yAxisFields: pivotTableYAxis
291
248
  ? pivotTableYAxis
292
249
  : config
293
250
  ? config.yAxisFields
294
- : dashboard[chartId].yAxisFields, colors: colors, xAxisField: config
295
- ? config.xAxisField
296
- : bucketData
297
- ? bucketData.xAxisField
298
- : dashboard[chartId].xAxisField, xAxisFormat: config
299
- ? config.xAxisFormat
300
- : bucketData
301
- ? bucketData.xAxisFormat
302
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle }));
251
+ : dashboard[chartId].yAxisFields, colors: colors, xAxisField: config ? config.xAxisField : dashboard[chartId].xAxisField, xAxisFormat: config ? config.xAxisFormat : dashboard[chartId].xAxisFormat, containerStyle: containerStyle }));
303
252
  }
304
253
  const yAxisFields = pivotTableYAxis
305
254
  ? pivotTableYAxis
@@ -317,13 +266,8 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
317
266
  const data = (pivotTable
318
267
  ? pivotTable.rows
319
268
  : config
320
- ? (config.bucketedRows &&
321
- config.bucketedRows.length > 0 &&
322
- config.bucketedRows) ||
323
- config.rows
324
- : bucketData && bucketData.rows && bucketData.rows.length > 0
325
- ? bucketData.rows
326
- : dashboard[chartId].rows)
269
+ ? config.rows
270
+ : dashboard[chartId].rows)
327
271
  // filter out any rows with a comparison key but no corresponding primary
328
272
  ?.filter((row) => Object.keys(row).every((key) => !key.startsWith('comparison_') ||
329
273
  (key.startsWith('comparison_') &&
@@ -331,23 +275,16 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
331
275
  if (chartTypes.includes('column')) {
332
276
  return ((0, jsx_runtime_1.jsx)(BarChart_1.default, { colors: colors, theme: theme, isStacked: isPivot && yAxisFields.length > (dateFilter?.comparison ? 2 : 1), yAxisFields: yAxisFields,
333
277
  // @ts-ignore
334
- data: data, xAxisField: config
335
- ? config.xAxisField
336
- : bucketData
337
- ? bucketData.xAxisField
338
- : dashboard[chartId].xAxisField, xAxisLabel: config
339
- ? config.xAxisLabel
340
- : bucketData
341
- ? bucketData.xAxisLabel
342
- : dashboard[chartId].xAxisLabel, xAxisFormat: config
343
- ? config.xAxisFormat
344
- : bucketData
345
- ? bucketData.xAxisFormat
346
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
278
+ data: data, xAxisField: config ? config.xAxisField : dashboard[chartId].xAxisField, xAxisLabel: config ? config.xAxisLabel : dashboard[chartId].xAxisLabel, xAxisFormat: config ? config.xAxisFormat : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
347
279
  }
348
280
  if (chartTypes.includes('metric')) {
349
281
  const data = dashboard[chartId] ? dashboard[chartId] : config;
350
- return ((0, jsx_runtime_1.jsx)("div", { style: {
282
+ const isComparison = data.rows.length > 0 &&
283
+ Object.keys(data.rows[0]).includes(`comparison_${data.xAxisField}`);
284
+ const primaryMetricLabel = data?.filtersApplied?.date_range?.preset?.label;
285
+ const comparisonKey = data?.filtersApplied?.date_range?.comparisonRange?.value;
286
+ const comparisonLabel = dateRangePickerUtils_1.COMPARISON_OPTIONS.find((opt) => opt.value === comparisonKey)?.text;
287
+ return ((0, jsx_runtime_1.jsxs)("div", { style: {
351
288
  fontFamily: theme?.fontFamily,
352
289
  fontSize: 32,
353
290
  color: theme?.primaryTextColor,
@@ -361,31 +298,62 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
361
298
  overflow: 'hidden',
362
299
  height: containerStyle?.height || '100%',
363
300
  display: 'flex',
364
- flexDirection: 'column',
365
- }, children: data.rows.length > 0 &&
366
- (0, valueFormatter_1.valueFormatter)({
367
- value: data.rows[0][data.xAxisField],
368
- field: data.xAxisField,
369
- fields: [
370
- {
371
- field: data.xAxisField,
372
- format: data.xAxisFormat,
373
- },
374
- ],
375
- }) }));
301
+ width: '100%',
302
+ flexDirection: 'row',
303
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
304
+ display: 'flex',
305
+ gap: 4,
306
+ alignItems: 'baseline',
307
+ marginRight: 'auto',
308
+ }, children: [(0, jsx_runtime_1.jsx)("span", { children: data.rows.length > 0 &&
309
+ (0, valueFormatter_1.valueFormatter)({
310
+ value: data.rows[0][data.xAxisField],
311
+ field: data.xAxisField,
312
+ fields: [
313
+ {
314
+ field: data.xAxisField,
315
+ format: data.xAxisFormat,
316
+ },
317
+ ],
318
+ }) }), isComparison && ((0, jsx_runtime_1.jsx)("span", { style: {
319
+ fontSize: 13,
320
+ fontWeight: '500',
321
+ fontFamily: theme?.fontFamily,
322
+ color: theme?.primaryTextColor,
323
+ marginLeft: 2,
324
+ }, children: primaryMetricLabel
325
+ ? `in ${primaryMetricLabel.toLowerCase()}`
326
+ : 'this period' }))] }), isComparison && ((0, jsx_runtime_1.jsxs)("div", { style: {
327
+ display: 'flex',
328
+ gap: 4,
329
+ alignItems: 'baseline',
330
+ paddingTop: 4,
331
+ color: theme?.secondaryTextColor,
332
+ }, children: [(0, jsx_runtime_1.jsx)("span", { style: {
333
+ fontSize: 28,
334
+ fontWeight: '500',
335
+ fontFamily: theme?.fontFamily,
336
+ color: theme?.secondaryTextColor,
337
+ }, children: data.rows.length > 0 &&
338
+ (0, valueFormatter_1.valueFormatter)({
339
+ value: data.rows[0][`comparison_${data.xAxisField}`],
340
+ field: data.xAxisField,
341
+ fields: [
342
+ {
343
+ field: data.xAxisField,
344
+ format: data.xAxisFormat,
345
+ },
346
+ ],
347
+ }) }), (0, jsx_runtime_1.jsx)("span", { style: {
348
+ fontSize: 13,
349
+ fontWeight: '500',
350
+ fontFamily: theme?.fontFamily,
351
+ color: theme?.secondaryTextColor,
352
+ marginLeft: 2,
353
+ }, children: comparisonLabel
354
+ ? 'in ' + comparisonLabel.toLowerCase()
355
+ : 'previous period' })] }))] }));
376
356
  }
377
- return ((0, jsx_runtime_1.jsx)(LineChart_1.default, { colors: colors, yAxisFields: yAxisFields, data: data, xAxisField: config
378
- ? config.xAxisField
379
- : bucketData
380
- ? bucketData.xAxisField
381
- : dashboard[chartId].xAxisField, xAxisLabel: config
382
- ? config.xAxisLabel
383
- : bucketData
384
- ? bucketData.xAxisLabel
385
- : dashboard[chartId].xAxisLabel, xAxisFormat: config
386
- ? config.xAxisFormat
387
- : bucketData
388
- ? bucketData.xAxisFormat
389
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
357
+ return ((0, jsx_runtime_1.jsx)(LineChart_1.default, { colors: colors, yAxisFields: yAxisFields, data: data, xAxisField: config ? config.xAxisField : dashboard[chartId].xAxisField, xAxisLabel: config ? config.xAxisLabel : dashboard[chartId].xAxisLabel, xAxisFormat: config ? config.xAxisFormat : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
390
358
  };
391
359
  exports.default = Chart;
@@ -34,7 +34,6 @@ interface SQLEditorProps {
34
34
  addToDashboardButtonLabel?: string;
35
35
  onAddToDashboardComplete?: () => void;
36
36
  organizationName?: string;
37
- onlyQueryQuillViews?: boolean;
38
37
  }
39
38
  interface TableComponentProps {
40
39
  rows: any[];
@@ -47,7 +46,7 @@ interface TextInputComponentProps {
47
46
  id: string;
48
47
  placeholder?: string;
49
48
  }
50
- export default function QueryEditor({ containerStyle, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled, LoadingComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode, chartBuilderEnabled, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel, dashboardItem, organizationName, onlyQueryQuillViews, }: SQLEditorProps): import("react/jsx-runtime").JSX.Element;
49
+ export default function QueryEditor({ containerStyle, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled, LoadingComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode, chartBuilderEnabled, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel, dashboardItem, organizationName, }: SQLEditorProps): import("react/jsx-runtime").JSX.Element;
51
50
  export declare const SchemaListComponent: ({ schema, theme, loading, LoadingComponent, width, }: {
52
51
  schema: any;
53
52
  theme: any;
@@ -1 +1 @@
1
- {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EAwE3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAQD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+ED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,eAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,EACzB,gBAA4B,EAC5B,mBAA2B,GAC5B,EAAE,cAAc,2CAwWhB;AA8LD,eAAO,MAAM,mBAAmB;;;;;;6CAqG/B,CAAC"}
1
+ {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EAwE3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+ED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,eAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,EACzB,gBAA4B,GAC7B,EAAE,cAAc,2CAgVhB;AA8LD,eAAO,MAAM,mBAAmB;;;;;;6CAqG/B,CAAC"}
@@ -148,7 +148,7 @@ const QuillTextInput = ({ onChange, value, id, placeholder, theme, }) => {
148
148
  borderRadius: '6px',
149
149
  }, id: id, onChange: onChange, value: value, placeholder: placeholder }));
150
150
  };
151
- function QueryEditor({ containerStyle = { height: '100vh' }, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled = false, LoadingComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode = false, chartBuilderEnabled = false, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel = 'Add to dashboard', dashboardItem = undefined, organizationName = undefined, onlyQueryQuillViews = false, }) {
151
+ function QueryEditor({ containerStyle = { height: '100vh' }, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled = false, LoadingComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode = false, chartBuilderEnabled = false, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel = 'Add to dashboard', dashboardItem = undefined, organizationName = undefined, }) {
152
152
  const [sqlPrompt, setSqlPrompt] = (0, react_1.useState)('');
153
153
  const [isOpen, setIsOpen] = (0, react_1.useState)(false);
154
154
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
@@ -210,21 +210,6 @@ function QueryEditor({ containerStyle = { height: '100vh' }, ButtonComponent, Se
210
210
  try {
211
211
  setSqlQueryLoading(true);
212
212
  setErrorMessage('');
213
- if (onlyQueryQuillViews) {
214
- const tableAlias = query.match(/(\w+) AS \(/gi)?.map((match) => match.split(' ')[0]) ||
215
- [];
216
- const tableNames = query
217
- .match(/FROM\s+(\w+)/gi)
218
- .map((match) => match.split(' ')[1])
219
- .filter((tableName) => !tableAlias.includes(tableName) &&
220
- tableName?.toLocaleLowerCase() !== '(select');
221
- const unselectableTables = tableNames.filter((tableName) => !schema.some((table) => table.displayName === tableName));
222
- if (unselectableTables.length !== 0) {
223
- setSqlQueryLoading(false);
224
- setErrorMessage('No Quill SQL views with the name ' + unselectableTables[0]);
225
- return;
226
- }
227
- }
228
213
  const hostedBody = {
229
214
  metadata: {
230
215
  query,
@@ -1 +1 @@
1
- {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,aAAa,EACb,oBAAoB,EACpB,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAqGnB"}
1
+ {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,aAAa,EACb,oBAAoB,EACpB,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAsGnB"}
@@ -58,6 +58,7 @@ function DashboardItem({ dashboardItem, onClickDashboardItem, theme, style, chil
58
58
  }, children: 'view report →' })) : null] }), (0, jsx_runtime_1.jsx)("div", { style: {
59
59
  padding: 0,
60
60
  height: '100%',
61
+ width: '100%',
61
62
  boxSizing: 'content-box',
62
63
  }, children: children })] }) }) }) }, dashboardItem?.name));
63
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA2BA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,UAAU,WAAY,SAAQ,cAAc;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,mBAAmB,GACnB,oBAAoB,GACpB,eAAe,GACf,cAAc,GACd,UAAU,GACV,aAAa,GACb,eAAe,GACf,oBAAoB,GACpB,UAAU,GACV,SAAS,GACT,QAAQ,CAAC;AAEb,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,UAAU,UAAW,SAAQ,cAAc;IACzC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC;CAC7B;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AA4D3C,wBAAgB,gBAAgB,CAAC,aAAa,KAAA,EAAE,OAAO,KAAA,WAQtD;AAKD,QAAA,MAAM,KAAK,8JAYR,UAAU,4CAkCZ,CAAC;AAkeF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA4BA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,UAAU,WAAY,SAAQ,cAAc;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,mBAAmB,GACnB,oBAAoB,GACpB,eAAe,GACf,cAAc,GACd,UAAU,GACV,aAAa,GACb,eAAe,GACf,oBAAoB,GACpB,UAAU,GACV,SAAS,GACT,QAAQ,CAAC;AAEb,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,UAAU,UAAW,SAAQ,cAAc;IACzC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC;CAC7B;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AA4D3C,wBAAgB,gBAAgB,CAAC,aAAa,KAAA,EAAE,OAAO,KAAA,WAQtD;AAKD,QAAA,MAAM,KAAK,8JAYR,UAAU,4CAkCZ,CAAC;AAicF,eAAe,KAAK,CAAC"}
package/dist/esm/Chart.js CHANGED
@@ -1,8 +1,6 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // @ts-nocheck
3
3
  import { useState, useEffect, useContext, useMemo } from 'react';
4
- import { aggregate } from './utils/aggregate';
5
- import { getPostgresBasicType } from './ReportBuilder';
6
4
  import { differenceInHours } from 'date-fns';
7
5
  import BarList from './BarList';
8
6
  import PieChart from './PieChart';
@@ -16,6 +14,7 @@ import BarChart from './components/Chart/BarChart';
16
14
  import { mergeComparisonRange } from './utils/merge';
17
15
  import ChartSkeleton from './components/Chart/ChartSkeleton';
18
16
  import ChartError from './components/Chart/ChartError';
17
+ import { COMPARISON_OPTIONS } from './DateRangePicker/dateRangePickerUtils';
19
18
  // @ts-ignore
20
19
  function sumByKey(arr, key) {
21
20
  // @ts-ignore
@@ -88,7 +87,6 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
88
87
  const [initialLoad, setInitialLoad] = useState(true);
89
88
  const [loading, setLoading] = useState(false);
90
89
  const [isComparison, setIsComparison] = useState(false);
91
- const [bucketData, setBucketData] = useState(null);
92
90
  useEffect(() => {
93
91
  async function getChartOptions() {
94
92
  if (!didFiltersChange(dashboard[chartId], dashboardFilters)) {
@@ -155,42 +153,6 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
155
153
  setInitialLoad(false);
156
154
  getChartOptions();
157
155
  }, [dashboardFilters, client, chartId]);
158
- useEffect(() => {
159
- if (!dashboardFilters ||
160
- !chartId ||
161
- !dashboard[chartId] ||
162
- !dashboard[chartId].buckets ||
163
- !dashboard[chartId].buckets.length) {
164
- return;
165
- }
166
- const dateFilter = Object.values(dashboardFilters).find((filter) => filter.filterType == 'date_range');
167
- if (dateFilter && dashboard[chartId].rows.length) {
168
- const aggregatedObj = aggregate(dashboard[chartId], dashboard[chartId].buckets, dateFilter);
169
- setBucketData({
170
- name: dashboard[chartId].name,
171
- xAxisFormat: aggregatedObj.xAxisFormat,
172
- xAxisField: aggregatedObj.xAxisField,
173
- xAxisLabel: aggregatedObj.xAxisLabel,
174
- rows: aggregatedObj.bucketedRows,
175
- });
176
- }
177
- const stringFilters = dashboard[chartId].buckets.filter((bucket) => {
178
- return (getPostgresBasicType(dashboard[chartId].fields.find((field) => field.name === bucket.field)) === 'string');
179
- });
180
- if (stringFilters.length && dashboard[chartId].rows.length) {
181
- const aggregatedObj = aggregate(dashboard[chartId], dashboard[chartId].buckets, null);
182
- setBucketData({
183
- name: dashboard[chartId].name,
184
- xAxisFormat: aggregatedObj.xAxisFormat,
185
- xAxisField: aggregatedObj.xAxisField,
186
- xAxisLabel: aggregatedObj.xAxisLabel,
187
- rows: aggregatedObj.bucketedRows,
188
- });
189
- }
190
- if (!dashboard[chartId].rows.length && bucketData !== null) {
191
- setBucketData(null);
192
- }
193
- }, [dashboard[chartId]]);
194
156
  const dateFilter = Object.values(dashboardFilters ?? {}).find((filter) => filter.filterType == 'date_range');
195
157
  const isPivot = dashboard[chartId]?.pivot || config?.pivot;
196
158
  const pivotTable = useMemo(() => {
@@ -274,25 +236,12 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
274
236
  return (_jsx(BarList, { data: pivotTable
275
237
  ? pivotTable.rows
276
238
  : config
277
- ? (config.bucketedRows &&
278
- config.bucketedRows.length > 0 &&
279
- config.bucketedRows) ||
280
- config.rows
281
- : bucketData && bucketData.rows
282
- ? bucketData.rows
283
- : dashboard[chartId].rows, theme: theme, yAxisFields: pivotTableYAxis
239
+ ? config.rows
240
+ : dashboard[chartId].rows, theme: theme, yAxisFields: pivotTableYAxis
284
241
  ? pivotTableYAxis
285
242
  : config
286
243
  ? config.yAxisFields
287
- : dashboard[chartId].yAxisFields, colors: colors, xAxisField: config
288
- ? config.xAxisField
289
- : bucketData
290
- ? bucketData.xAxisField
291
- : dashboard[chartId].xAxisField, xAxisFormat: config
292
- ? config.xAxisFormat
293
- : bucketData
294
- ? bucketData.xAxisFormat
295
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle }));
244
+ : dashboard[chartId].yAxisFields, colors: colors, xAxisField: config ? config.xAxisField : dashboard[chartId].xAxisField, xAxisFormat: config ? config.xAxisFormat : dashboard[chartId].xAxisFormat, containerStyle: containerStyle }));
296
245
  }
297
246
  const yAxisFields = pivotTableYAxis
298
247
  ? pivotTableYAxis
@@ -310,13 +259,8 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
310
259
  const data = (pivotTable
311
260
  ? pivotTable.rows
312
261
  : config
313
- ? (config.bucketedRows &&
314
- config.bucketedRows.length > 0 &&
315
- config.bucketedRows) ||
316
- config.rows
317
- : bucketData && bucketData.rows && bucketData.rows.length > 0
318
- ? bucketData.rows
319
- : dashboard[chartId].rows)
262
+ ? config.rows
263
+ : dashboard[chartId].rows)
320
264
  // filter out any rows with a comparison key but no corresponding primary
321
265
  ?.filter((row) => Object.keys(row).every((key) => !key.startsWith('comparison_') ||
322
266
  (key.startsWith('comparison_') &&
@@ -324,23 +268,16 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
324
268
  if (chartTypes.includes('column')) {
325
269
  return (_jsx(BarChart, { colors: colors, theme: theme, isStacked: isPivot && yAxisFields.length > (dateFilter?.comparison ? 2 : 1), yAxisFields: yAxisFields,
326
270
  // @ts-ignore
327
- data: data, xAxisField: config
328
- ? config.xAxisField
329
- : bucketData
330
- ? bucketData.xAxisField
331
- : dashboard[chartId].xAxisField, xAxisLabel: config
332
- ? config.xAxisLabel
333
- : bucketData
334
- ? bucketData.xAxisLabel
335
- : dashboard[chartId].xAxisLabel, xAxisFormat: config
336
- ? config.xAxisFormat
337
- : bucketData
338
- ? bucketData.xAxisFormat
339
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
271
+ data: data, xAxisField: config ? config.xAxisField : dashboard[chartId].xAxisField, xAxisLabel: config ? config.xAxisLabel : dashboard[chartId].xAxisLabel, xAxisFormat: config ? config.xAxisFormat : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
340
272
  }
341
273
  if (chartTypes.includes('metric')) {
342
274
  const data = dashboard[chartId] ? dashboard[chartId] : config;
343
- return (_jsx("div", { style: {
275
+ const isComparison = data.rows.length > 0 &&
276
+ Object.keys(data.rows[0]).includes(`comparison_${data.xAxisField}`);
277
+ const primaryMetricLabel = data?.filtersApplied?.date_range?.preset?.label;
278
+ const comparisonKey = data?.filtersApplied?.date_range?.comparisonRange?.value;
279
+ const comparisonLabel = COMPARISON_OPTIONS.find((opt) => opt.value === comparisonKey)?.text;
280
+ return (_jsxs("div", { style: {
344
281
  fontFamily: theme?.fontFamily,
345
282
  fontSize: 32,
346
283
  color: theme?.primaryTextColor,
@@ -354,31 +291,62 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
354
291
  overflow: 'hidden',
355
292
  height: containerStyle?.height || '100%',
356
293
  display: 'flex',
357
- flexDirection: 'column',
358
- }, children: data.rows.length > 0 &&
359
- valueFormatter({
360
- value: data.rows[0][data.xAxisField],
361
- field: data.xAxisField,
362
- fields: [
363
- {
364
- field: data.xAxisField,
365
- format: data.xAxisFormat,
366
- },
367
- ],
368
- }) }));
294
+ width: '100%',
295
+ flexDirection: 'row',
296
+ }, children: [_jsxs("div", { style: {
297
+ display: 'flex',
298
+ gap: 4,
299
+ alignItems: 'baseline',
300
+ marginRight: 'auto',
301
+ }, children: [_jsx("span", { children: data.rows.length > 0 &&
302
+ valueFormatter({
303
+ value: data.rows[0][data.xAxisField],
304
+ field: data.xAxisField,
305
+ fields: [
306
+ {
307
+ field: data.xAxisField,
308
+ format: data.xAxisFormat,
309
+ },
310
+ ],
311
+ }) }), isComparison && (_jsx("span", { style: {
312
+ fontSize: 13,
313
+ fontWeight: '500',
314
+ fontFamily: theme?.fontFamily,
315
+ color: theme?.primaryTextColor,
316
+ marginLeft: 2,
317
+ }, children: primaryMetricLabel
318
+ ? `in ${primaryMetricLabel.toLowerCase()}`
319
+ : 'this period' }))] }), isComparison && (_jsxs("div", { style: {
320
+ display: 'flex',
321
+ gap: 4,
322
+ alignItems: 'baseline',
323
+ paddingTop: 4,
324
+ color: theme?.secondaryTextColor,
325
+ }, children: [_jsx("span", { style: {
326
+ fontSize: 28,
327
+ fontWeight: '500',
328
+ fontFamily: theme?.fontFamily,
329
+ color: theme?.secondaryTextColor,
330
+ }, children: data.rows.length > 0 &&
331
+ valueFormatter({
332
+ value: data.rows[0][`comparison_${data.xAxisField}`],
333
+ field: data.xAxisField,
334
+ fields: [
335
+ {
336
+ field: data.xAxisField,
337
+ format: data.xAxisFormat,
338
+ },
339
+ ],
340
+ }) }), _jsx("span", { style: {
341
+ fontSize: 13,
342
+ fontWeight: '500',
343
+ fontFamily: theme?.fontFamily,
344
+ color: theme?.secondaryTextColor,
345
+ marginLeft: 2,
346
+ }, children: comparisonLabel
347
+ ? 'in ' + comparisonLabel.toLowerCase()
348
+ : 'previous period' })] }))] }));
369
349
  }
370
- return (_jsx(LineChart, { colors: colors, yAxisFields: yAxisFields, data: data, xAxisField: config
371
- ? config.xAxisField
372
- : bucketData
373
- ? bucketData.xAxisField
374
- : dashboard[chartId].xAxisField, xAxisLabel: config
375
- ? config.xAxisLabel
376
- : bucketData
377
- ? bucketData.xAxisLabel
378
- : dashboard[chartId].xAxisLabel, xAxisFormat: config
379
- ? config.xAxisFormat
380
- : bucketData
381
- ? bucketData.xAxisFormat
382
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
350
+ return (_jsx(LineChart, { colors: colors, yAxisFields: yAxisFields, data: data, xAxisField: config ? config.xAxisField : dashboard[chartId].xAxisField, xAxisLabel: config ? config.xAxisLabel : dashboard[chartId].xAxisLabel, xAxisFormat: config ? config.xAxisFormat : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
383
351
  };
384
352
  export default Chart;
@@ -34,7 +34,6 @@ interface SQLEditorProps {
34
34
  addToDashboardButtonLabel?: string;
35
35
  onAddToDashboardComplete?: () => void;
36
36
  organizationName?: string;
37
- onlyQueryQuillViews?: boolean;
38
37
  }
39
38
  interface TableComponentProps {
40
39
  rows: any[];
@@ -47,7 +46,7 @@ interface TextInputComponentProps {
47
46
  id: string;
48
47
  placeholder?: string;
49
48
  }
50
- export default function QueryEditor({ containerStyle, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled, LoadingComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode, chartBuilderEnabled, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel, dashboardItem, organizationName, onlyQueryQuillViews, }: SQLEditorProps): import("react/jsx-runtime").JSX.Element;
49
+ export default function QueryEditor({ containerStyle, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled, LoadingComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode, chartBuilderEnabled, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel, dashboardItem, organizationName, }: SQLEditorProps): import("react/jsx-runtime").JSX.Element;
51
50
  export declare const SchemaListComponent: ({ schema, theme, loading, LoadingComponent, width, }: {
52
51
  schema: any;
53
52
  theme: any;
@@ -1 +1 @@
1
- {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EAwE3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAQD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+ED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,eAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,EACzB,gBAA4B,EAC5B,mBAA2B,GAC5B,EAAE,cAAc,2CAwWhB;AA8LD,eAAO,MAAM,mBAAmB;;;;;;6CAqG/B,CAAC"}
1
+ {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EAwE3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+ED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,eAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,EACzB,gBAA4B,GAC7B,EAAE,cAAc,2CAgVhB;AA8LD,eAAO,MAAM,mBAAmB;;;;;;6CAqG/B,CAAC"}
@@ -141,7 +141,7 @@ const QuillTextInput = ({ onChange, value, id, placeholder, theme, }) => {
141
141
  borderRadius: '6px',
142
142
  }, id: id, onChange: onChange, value: value, placeholder: placeholder }));
143
143
  };
144
- export default function QueryEditor({ containerStyle = { height: '100vh' }, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled = false, LoadingComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode = false, chartBuilderEnabled = false, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel = 'Add to dashboard', dashboardItem = undefined, organizationName = undefined, onlyQueryQuillViews = false, }) {
144
+ export default function QueryEditor({ containerStyle = { height: '100vh' }, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled = false, LoadingComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode = false, chartBuilderEnabled = false, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel = 'Add to dashboard', dashboardItem = undefined, organizationName = undefined, }) {
145
145
  const [sqlPrompt, setSqlPrompt] = useState('');
146
146
  const [isOpen, setIsOpen] = useState(false);
147
147
  const [client] = useContext(ClientContext);
@@ -203,21 +203,6 @@ export default function QueryEditor({ containerStyle = { height: '100vh' }, Butt
203
203
  try {
204
204
  setSqlQueryLoading(true);
205
205
  setErrorMessage('');
206
- if (onlyQueryQuillViews) {
207
- const tableAlias = query.match(/(\w+) AS \(/gi)?.map((match) => match.split(' ')[0]) ||
208
- [];
209
- const tableNames = query
210
- .match(/FROM\s+(\w+)/gi)
211
- .map((match) => match.split(' ')[1])
212
- .filter((tableName) => !tableAlias.includes(tableName) &&
213
- tableName?.toLocaleLowerCase() !== '(select');
214
- const unselectableTables = tableNames.filter((tableName) => !schema.some((table) => table.displayName === tableName));
215
- if (unselectableTables.length !== 0) {
216
- setSqlQueryLoading(false);
217
- setErrorMessage('No Quill SQL views with the name ' + unselectableTables[0]);
218
- return;
219
- }
220
- }
221
206
  const hostedBody = {
222
207
  metadata: {
223
208
  query,
@@ -1 +1 @@
1
- {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,aAAa,EACb,oBAAoB,EACpB,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAqGnB"}
1
+ {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,aAAa,EACb,oBAAoB,EACpB,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAsGnB"}
@@ -56,6 +56,7 @@ export default function DashboardItem({ dashboardItem, onClickDashboardItem, the
56
56
  }, children: 'view report →' })) : null] }), _jsx("div", { style: {
57
57
  padding: 0,
58
58
  height: '100%',
59
+ width: '100%',
59
60
  boxSizing: 'content-box',
60
61
  }, children: children })] }) }) }) }, dashboardItem?.name));
61
62
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.10.23",
3
+ "version": "2.10.24",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",