@quillsql/react 2.12.3 → 2.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +192 -72
  3. package/dist/cjs/ChartBuilder.d.ts +24 -1
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +43 -36
  6. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  7. package/dist/cjs/ChartEditor.js +97 -41
  8. package/dist/cjs/Context.d.ts +1 -0
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +59 -30
  11. package/dist/cjs/Dashboard.d.ts +22 -1
  12. package/dist/cjs/Dashboard.d.ts.map +1 -1
  13. package/dist/cjs/Dashboard.js +2 -2
  14. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  15. package/dist/cjs/ReportBuilder.js +47 -80
  16. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  17. package/dist/cjs/SQLEditor.js +13 -27
  18. package/dist/cjs/Table.d.ts.map +1 -1
  19. package/dist/cjs/Table.js +3 -3
  20. package/dist/cjs/components/Dashboard/DataLoader.d.ts +9 -1
  21. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  22. package/dist/cjs/components/Dashboard/DataLoader.js +146 -112
  23. package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
  24. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  25. package/dist/cjs/components/Dashboard/TableComponent.js +29 -11
  26. package/dist/cjs/components/QuillTable.d.ts +15 -2
  27. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  28. package/dist/cjs/components/QuillTable.js +58 -29
  29. package/dist/cjs/components/UiComponents.d.ts +11 -1
  30. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  31. package/dist/cjs/components/UiComponents.js +48 -4
  32. package/dist/cjs/hooks/useExport.d.ts +2 -1
  33. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  34. package/dist/cjs/hooks/useExport.js +44 -9
  35. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  36. package/dist/cjs/hooks/useQuill.js +2 -0
  37. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  38. package/dist/cjs/internals/ReportBuilder/PivotModal.js +2 -1
  39. package/dist/cjs/utils/csv.d.ts.map +1 -1
  40. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  41. package/dist/cjs/utils/dashboard.js +2 -0
  42. package/dist/cjs/utils/pivotProcessing.d.ts +2 -6
  43. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  44. package/dist/cjs/utils/pivotProcessing.js +31 -28
  45. package/dist/cjs/utils/schema.d.ts +6 -0
  46. package/dist/cjs/utils/schema.d.ts.map +1 -0
  47. package/dist/cjs/utils/schema.js +122 -0
  48. package/dist/cjs/utils/tableProcessing.d.ts +1 -1
  49. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  50. package/dist/cjs/utils/tableProcessing.js +5 -3
  51. package/dist/cjs/utils/valueFormatter.js +1 -1
  52. package/dist/esm/Chart.d.ts.map +1 -1
  53. package/dist/esm/Chart.js +193 -73
  54. package/dist/esm/ChartBuilder.d.ts +24 -1
  55. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  56. package/dist/esm/ChartBuilder.js +43 -36
  57. package/dist/esm/ChartEditor.d.ts.map +1 -1
  58. package/dist/esm/ChartEditor.js +98 -42
  59. package/dist/esm/Context.d.ts +1 -0
  60. package/dist/esm/Context.d.ts.map +1 -1
  61. package/dist/esm/Context.js +58 -29
  62. package/dist/esm/Dashboard.d.ts +22 -1
  63. package/dist/esm/Dashboard.d.ts.map +1 -1
  64. package/dist/esm/Dashboard.js +2 -2
  65. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  66. package/dist/esm/ReportBuilder.js +50 -83
  67. package/dist/esm/SQLEditor.d.ts.map +1 -1
  68. package/dist/esm/SQLEditor.js +15 -29
  69. package/dist/esm/Table.d.ts.map +1 -1
  70. package/dist/esm/Table.js +4 -4
  71. package/dist/esm/components/Dashboard/DataLoader.d.ts +9 -1
  72. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  73. package/dist/esm/components/Dashboard/DataLoader.js +147 -113
  74. package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
  75. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  76. package/dist/esm/components/Dashboard/TableComponent.js +30 -12
  77. package/dist/esm/components/QuillTable.d.ts +15 -2
  78. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  79. package/dist/esm/components/QuillTable.js +58 -26
  80. package/dist/esm/components/UiComponents.d.ts +11 -1
  81. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  82. package/dist/esm/components/UiComponents.js +47 -4
  83. package/dist/esm/hooks/useExport.d.ts +2 -1
  84. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  85. package/dist/esm/hooks/useExport.js +44 -9
  86. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  87. package/dist/esm/hooks/useQuill.js +3 -1
  88. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  89. package/dist/esm/internals/ReportBuilder/PivotModal.js +3 -2
  90. package/dist/esm/utils/csv.d.ts.map +1 -1
  91. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  92. package/dist/esm/utils/dashboard.js +2 -0
  93. package/dist/esm/utils/pivotProcessing.d.ts +2 -6
  94. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  95. package/dist/esm/utils/pivotProcessing.js +31 -28
  96. package/dist/esm/utils/schema.d.ts +6 -0
  97. package/dist/esm/utils/schema.d.ts.map +1 -0
  98. package/dist/esm/utils/schema.js +117 -0
  99. package/dist/esm/utils/tableProcessing.d.ts +1 -1
  100. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  101. package/dist/esm/utils/tableProcessing.js +5 -3
  102. package/dist/esm/utils/valueFormatter.js +1 -1
  103. package/package.json +1 -1
@@ -1,9 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useContext, useEffect, useRef, } from 'react';
2
+ import { useContext, useEffect, useRef, useState, } from 'react';
3
3
  import { XIcon } from '../assets';
4
4
  import { ThemeContext } from '../Context';
5
5
  import { useTheme } from '../hooks';
6
6
  import QuillTable from './QuillTable';
7
+ import ChartSkeleton from './Chart/ChartSkeleton';
7
8
  /**
8
9
  * The fallback TextInput element for Quill.
9
10
  */
@@ -330,11 +331,53 @@ export const LoadingSpinner = () => (_jsx("div", { style: {
330
331
  justifyContent: 'center',
331
332
  alignItems: 'center',
332
333
  }, children: _jsxs("svg", { width: "24", height: "24", children: [_jsx("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 6)", stroke: "#364153", fill: "none", transform: "rotate(-90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "-180 12 12", to: "180 12 12", dur: "0.8s", repeatCount: "indefinite" }) }), _jsx("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 1 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", stroke: '#ADB1B9', fill: "none", transform: "rotate(90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "0 12 12", to: "360 12 12", dur: "0.8s", repeatCount: "indefinite" }) })] }) }));
333
- export const QuillTableComponent = ({ rows, columns, isLoading = false, }) => {
334
+ export const QuillTableSQLEditorComponent = ({ rows, columns, isLoading = false, numberOfRows, onPageChange, onSortChange, }) => {
335
+ const [sort, setSort] = useState({ field: '', direction: '' });
336
+ const [page, setPage] = useState(0);
334
337
  if (isLoading) {
335
- return (_jsx("div", { style: { display: 'flex', flexDirection: 'column', margin: 'auto' }, children: _jsx(LoadingSpinner, {}) }));
338
+ return (_jsx("div", { style: {
339
+ display: 'flex',
340
+ flexDirection: 'column',
341
+ margin: 'auto',
342
+ width: '100%',
343
+ height: '100%',
344
+ }, children: _jsx(LoadingSpinner, {}) }));
336
345
  }
337
- return _jsx(QuillTable, { rows: rows, columns: columns, rowsPerPage: 20 });
346
+ return (_jsx(QuillTable, { rows: rows, columns: columns, rowsPerPage: 20, numberOfRows: numberOfRows, onPageChange: (page) => {
347
+ setPage(page.currentPage);
348
+ onPageChange && onPageChange(page);
349
+ }, onSortChange: (sort) => {
350
+ setSort(sort);
351
+ setPage(0);
352
+ onSortChange && onSortChange(sort);
353
+ }, sort: sort, currentPage: page, isLoading: isLoading }));
354
+ };
355
+ export const QuillTableComponent = ({ rows, columns, isLoading = false, numberOfRows, onPageChange, onSortChange, }) => {
356
+ const [sort, setSort] = useState({ field: '', direction: '' });
357
+ const [page, setPage] = useState(0);
358
+ const [initialLoad, setInitialLoad] = useState(true);
359
+ useEffect(() => {
360
+ if (initialLoad && !isLoading) {
361
+ setInitialLoad(false);
362
+ }
363
+ }, [isLoading]);
364
+ if (initialLoad) {
365
+ return (_jsx("div", { style: {
366
+ display: 'flex',
367
+ flexDirection: 'column',
368
+ margin: 'auto',
369
+ width: '100%',
370
+ height: '100%',
371
+ }, children: _jsx(ChartSkeleton, {}) }));
372
+ }
373
+ return (_jsx(QuillTable, { rows: rows, columns: columns, rowsPerPage: 20, numberOfRows: numberOfRows, onPageChange: (page) => {
374
+ setPage(page.currentPage);
375
+ onPageChange && onPageChange(page);
376
+ }, onSortChange: (sort) => {
377
+ setSort(sort);
378
+ setPage(0);
379
+ onSortChange && onSortChange(sort);
380
+ }, sort: sort, currentPage: page, isLoading: isLoading }));
338
381
  };
339
382
  export const QuillEmptyDashboardComponent = () => _jsx("div", {});
340
383
  export const QuillChartBuilderInputRowContainer = ({ children, }) => {
@@ -1,5 +1,6 @@
1
- export declare const useExport: (reportId: string) => {
1
+ export declare const useExport: (reportId?: string) => {
2
2
  downloadCSV: () => void;
3
3
  downloadPDF: () => void;
4
+ isLoading: boolean;
4
5
  };
5
6
  //# sourceMappingURL=useExport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,SAAS,aAAc,MAAM;;;CAYzC,CAAC"}
1
+ {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,SAAS,cAAe,MAAM;;;;CAmD1C,CAAC"}
@@ -1,15 +1,50 @@
1
1
  import { downloadCSV } from '../utils/csv';
2
- import { useQuill } from '../hooks/useQuill';
2
+ import { useContext, useState } from 'react';
3
+ import { getData } from '../utils/dataFetcher';
4
+ import { ClientContext, DashboardFiltersContext } from '../Context';
3
5
  export const useExport = (reportId) => {
4
- const chartData = useQuill(reportId).data;
5
- if (!chartData)
6
- return { downloadCSV: () => { }, downloadPDF: () => { } };
6
+ const { dashboardFilters } = useContext(DashboardFiltersContext);
7
+ const [client] = useContext(ClientContext);
8
+ const [isLoading, setIsLoading] = useState(false);
9
+ if (!reportId) {
10
+ return { downloadCSV: () => { }, downloadPDF: () => { }, isLoading: false };
11
+ }
7
12
  return {
8
- downloadCSV: () => downloadCSV({
9
- rows: chartData.rows,
10
- fields: chartData.columns,
11
- name: chartData.name,
12
- }),
13
+ downloadCSV: async () => {
14
+ setIsLoading(true);
15
+ const minimalFilters = Object.values(dashboardFilters).length
16
+ ? Object.values(dashboardFilters).map((filter) => {
17
+ const newFilter = { ...filter };
18
+ if (newFilter.filterType === 'date_range') {
19
+ delete newFilter['field'];
20
+ delete newFilter['options'];
21
+ delete newFilter['selectedValue'];
22
+ }
23
+ return newFilter;
24
+ })
25
+ : [];
26
+ const hostedBody = {
27
+ metadata: {
28
+ dashboardItemId: reportId,
29
+ orgId: client.customerId || '*',
30
+ clientId: client.publicKey,
31
+ task: 'item',
32
+ databaseType: client?.databaseType,
33
+ filters: minimalFilters,
34
+ },
35
+ };
36
+ const cloudBody = {
37
+ id: reportId,
38
+ };
39
+ const resp = await getData(client, 'itempost', 'same-origin', hostedBody, cloudBody);
40
+ downloadCSV({
41
+ rows: resp.rows,
42
+ fields: resp.columns,
43
+ name: resp.name,
44
+ });
45
+ setIsLoading(false);
46
+ },
13
47
  downloadPDF: () => { },
48
+ isLoading,
14
49
  };
15
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useQuill.d.ts","sourceRoot":"","sources":["../../../src/hooks/useQuill.ts"],"names":[],"mappings":"AAUA,UAAU,MAAM;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,QAAQ,aACT,MAAM;UAEV,WAAW,GAAG,IAAI;aACf,OAAO;WACT,MAAM,GAAG,IAAI;CAkFrB,CAAC"}
1
+ {"version":3,"file":"useQuill.d.ts","sourceRoot":"","sources":["../../../src/hooks/useQuill.ts"],"names":[],"mappings":"AAWA,UAAU,MAAM;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,QAAQ,aACT,MAAM;UAEV,WAAW,GAAG,IAAI;aACf,OAAO;WACT,MAAM,GAAG,IAAI;CAoFrB,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { useContext, useEffect, useState } from 'react';
2
- import { ClientContext, DashboardContext, DashboardFiltersContext, } from '../Context';
2
+ import { ClientContext, CustomFieldContext, DashboardContext, DashboardFiltersContext, } from '../Context';
3
3
  import { getData } from '../utils/dataFetcher';
4
4
  import { mergeComparisonRange } from '../utils/merge';
5
5
  import { processFilterErrorList } from '../utils/errorProcessing';
6
6
  export const useQuill = (reportId) => {
7
7
  const { dashboard, dispatch } = useContext(DashboardContext);
8
8
  const { dashboardFilters } = useContext(DashboardFiltersContext);
9
+ const [customFields] = useContext(CustomFieldContext);
9
10
  const [client] = useContext(ClientContext);
10
11
  const [data, setData] = useState(null);
11
12
  const [loading, setLoading] = useState(true);
@@ -32,6 +33,7 @@ export const useQuill = (reportId) => {
32
33
  task: 'item',
33
34
  filters: [...Object.values(dashboardFilters)],
34
35
  databaseType: client?.databaseType,
36
+ customFields,
35
37
  },
36
38
  };
37
39
  const cloudBody = {
@@ -1 +1 @@
1
- {"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useContext, useMemo, useState, useEffect, useRef, } from 'react';
3
- import { ClientContext } from '../../Context';
3
+ import { ClientContext, CustomFieldContext } from '../../Context';
4
4
  import { getDataFromCloud } from '../../utils/dataFetcher';
5
5
  import { PivotList, PivotCard } from './PivotList';
6
6
  import { differenceInDays, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, eachYearOfInterval, endOfDay, isWithinInterval, subMilliseconds, } from 'date-fns';
@@ -31,6 +31,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
31
31
  const [selectedPivotType, setSelectedPivotType] = useState('recommended');
32
32
  const [errors, setErrors] = useState([]);
33
33
  const [client] = useContext(ClientContext);
34
+ const [customFields] = useContext(CustomFieldContext);
34
35
  const rowFieldRef = useRef(null);
35
36
  const colFieldRef = useRef(null);
36
37
  const [pivotCardWidth, setPivotCardWidth] = useState(420);
@@ -52,7 +53,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
52
53
  setAllowedValueFields(possibleColumns.valueFields);
53
54
  return possibleColumns;
54
55
  }
55
- const newUniqueValues = await getUniqueValuesByColumns(stringColumns, query || '', data.rows || [], client);
56
+ const newUniqueValues = await getUniqueValuesByColumns(stringColumns, query || '', data.rows || [], client, customFields);
56
57
  if (!uniqueValues ||
57
58
  hashCode(uniqueValues) !== hashCode(newUniqueValues)) {
58
59
  const possibleColumns = getPossiblePivotFieldOptions(columns, newUniqueValues || {});
@@ -1 +1 @@
1
- {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../src/utils/csv.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,SAAU;IAChC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,SA2FA,CAAC"}
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../src/utils/csv.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,SAAU;IAChC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,SA2FA,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA6B3C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,GACpB,WAAW,CAmCb"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA6B3C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,GACpB,WAAW,CAqCb"}
@@ -58,6 +58,8 @@ export function cleanDashboardItem(item, dashboardFilters) {
58
58
  xAxisFormat: item.xAxisFormat,
59
59
  order: item.order,
60
60
  filtersApplied: item.filtersApplied,
61
+ sort: item.sort,
62
+ page: item.page,
61
63
  };
62
64
  }
63
65
  /**
@@ -1,10 +1,6 @@
1
1
  import { Pivot } from '../internals/ReportBuilder/PivotModal';
2
- import { Column } from '../models/Columns';
3
- export declare function pivotToSql(pivot: Pivot, query: string, client: any): {
4
- query: string;
5
- preQueries?: string[];
6
- runQueryConfig?: any;
7
- } | undefined;
2
+ import { Column, ColumnInternal } from '../models/Columns';
3
+ export declare function pivotToSql(pivot: Pivot, query: string, columns: ColumnInternal[]): string;
8
4
  export declare function isValidPivot(pivot: Pivot): boolean;
9
5
  export declare function getPossiblePivotFieldOptions(columns: Column[], uniqueValues: {
10
6
  [field: string]: any;
@@ -1 +1 @@
1
- {"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAkB,MAAM,mBAAmB,CAAC;AAG3D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,GAAG,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,GAAG,CAAA;CAAE,GAAG,SAAS,CAgD5E;AAmDD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,WAgBxC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE;;;;EAsCvC;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAqCP"}
1
+ {"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG3D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAsCR;AAmED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,WAgBxC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE;;;;EAsCvC;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAqCP"}
@@ -1,53 +1,45 @@
1
1
  import { isIdColumn } from '../components/ReportBuilder/util';
2
2
  import { DATE_FORMAT_TYPES, NUMBER_FORMAT_TYPES } from './valueFormatter';
3
- export function pivotToSql(pivot, query, client) {
3
+ export function pivotToSql(pivot, query, columns) {
4
4
  const processedAggType = pivot.aggregationType?.toLowerCase() === 'average'
5
5
  ? 'avg'
6
6
  : pivot.aggregationType?.toLowerCase();
7
7
  if ((!pivot.rowField && pivot.valueField && processedAggType) ||
8
8
  (!pivot.valueField && pivot.rowField && processedAggType === 'count')) {
9
9
  // table aggregation
10
- return {
11
- query: `with
12
- prePivotQuery as (${query})
13
- SELECT ${processedAggType}(${pivot.valueField ?? pivot.rowField}) FROM prePivotQuery`,
14
- };
10
+ return `with
11
+ original_query as (${query})
12
+ SELECT ${processedAggType}(${pivot.valueField ?? pivot.rowField}) FROM original_query`;
15
13
  }
16
14
  else if (!pivot.columnField &&
17
15
  processedAggType &&
18
16
  pivot.rowField &&
19
17
  pivot.valueField) {
20
18
  // 1-d pivot
21
- return {
22
- query: `with
23
- prePivotQuery as (${query})
24
- SELECT ${pivot.rowField}, ${processedAggType}(${pivot.valueField}) FROM prePivotQuery GROUP BY ${pivot.rowField}`,
25
- };
19
+ return `with
20
+ original_query as (${query})
21
+ SELECT ${pivot.rowField}, ${processedAggType}(${pivot.valueField}) FROM original_query GROUP BY ${pivot.rowField}`;
26
22
  }
27
23
  else if (pivot.columnField &&
28
24
  pivot.rowField &&
29
25
  pivot.valueField &&
30
26
  processedAggType) {
31
27
  // 2-d pivot
32
- const sqlQuery = createPivotSqlQuery(pivot.rowField, pivot.columnField, pivot.valueField, processedAggType, query);
33
- return {
34
- preQueries: [sqlQuery],
35
- query: '',
36
- runQueryConfig: { getPivotQuery: true },
37
- };
28
+ const sqlQuery = generateTwoDPivotQuery({ ...pivot, aggregationType: processedAggType }, query, columns);
29
+ return sqlQuery;
38
30
  }
39
- return undefined;
31
+ return query;
40
32
  }
41
33
  function createPivotSqlQuery(rowField, columnField, valueField, aggregationType, query) {
42
34
  // const sqlAggregationType = convertToSqlAggregationType(aggregationType);
43
- return `with querytable as (${query}),
44
- DistinctProducts as (
35
+ return `with query_table as (${query}),
36
+ distinct_column_fields as (
45
37
  select distinct
46
38
  ${columnField}
47
39
  from
48
- querytable
40
+ query_table
49
41
  ),
50
- DynamicSQL as (
42
+ case_when_query as (
51
43
  select
52
44
  string_agg(
53
45
  concat(
@@ -60,25 +52,36 @@ function createPivotSqlQuery(rowField, columnField, valueField, aggregationType,
60
52
  '
61
53
  ) as sql_part
62
54
  from
63
- DistinctProducts
55
+ distinct_column_fields
64
56
  ),
65
- FinalQuery as (
57
+ joined_queries as (
66
58
  select
67
59
  concat(
68
- 'WITH querytable as (${query}) SELECT ${rowField}, ',
60
+ 'WITH query_table as (${query}) SELECT ${rowField}, ',
69
61
  sql_part,
70
62
  '
71
- FROM querytable
63
+ FROM query_table
72
64
  GROUP BY ${rowField}
73
65
  ORDER BY ${rowField}'
74
66
  ) as query
75
67
  from
76
- DynamicSQL
68
+ case_when_query
77
69
  )
78
70
  select
79
71
  query
80
72
  from
81
- FinalQuery;`;
73
+ joined_queries;`;
74
+ }
75
+ function generateTwoDPivotQuery(pivot, query, columns) {
76
+ const caseWhens = columns.map((column) => {
77
+ return `${pivot.aggregationType}(
78
+ CASE WHEN ${pivot.columnField} = '${column.field}' THEN ${pivot.valueField} ELSE 0 END
79
+ ) AS "${column.field}"`;
80
+ });
81
+ return `WITH
82
+ original_query as (${query})
83
+ SELECT ${pivot.rowField}, ${caseWhens.join(', ')}
84
+ FROM original_query GROUP BY ${pivot.rowField}`;
82
85
  }
83
86
  export function isValidPivot(pivot) {
84
87
  if (pivot.rowField && pivot.aggregationType === 'count') {
@@ -0,0 +1,6 @@
1
+ export declare const getCustomFieldInfo: (client: any, caller?: string) => Promise<any[]>;
2
+ export declare const getSchemaInfoWithCustomFields: (client: any, caller?: string) => Promise<{
3
+ schemaData: any;
4
+ customFieldsByTable: any[];
5
+ }>;
6
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,kBAAkB,WAAkB,GAAG,oCAqEnD,CAAC;AAEF,eAAO,MAAM,6BAA6B,WAChC,GAAG;;;EA2CZ,CAAC"}
@@ -0,0 +1,117 @@
1
+ const parseResponse = (results) => {
2
+ if (results.data?.data) {
3
+ if (results.data.data.queries &&
4
+ results.data.data.queries.queryResults.length > 0) {
5
+ return results.data.data.queries.queryResults;
6
+ }
7
+ else {
8
+ return results.data.data.tables;
9
+ }
10
+ }
11
+ else {
12
+ if (results.queries &&
13
+ results.queries.queryResults &&
14
+ results.queries.queryResults.length > 0) {
15
+ return results.queries.queryResults;
16
+ }
17
+ else {
18
+ return results.data.tables;
19
+ }
20
+ }
21
+ };
22
+ export const getCustomFieldInfo = async (client, caller = 'se') => {
23
+ let customFieldsByTableUnique = [];
24
+ try {
25
+ const { queryEndpoint, queryHeaders, publicKey, databaseType, customerId } = client;
26
+ if (databaseType.toLowerCase() !== 'postgresql' ||
27
+ !['65d65b57cdd8ae70a5648d9c', '665610862cf7a3000be66453'].includes(publicKey)) {
28
+ throw new Error('CUSTOM FIELDS IS ONLY ALLOWED FOR POSTGRESQL DATABASES');
29
+ }
30
+ let response = await fetch(`${queryEndpoint}?cfr-${caller}`, {
31
+ method: 'POST',
32
+ headers: {
33
+ ...queryHeaders,
34
+ 'Content-Type': 'application/json',
35
+ },
36
+ body: JSON.stringify({
37
+ metadata: {
38
+ clientId: publicKey,
39
+ publicKey,
40
+ task: 'custom-field-records',
41
+ databaseType: databaseType,
42
+ orgId: customerId,
43
+ },
44
+ }),
45
+ });
46
+ let result = await response.json();
47
+ const extractedData = parseResponse(result);
48
+ const customFieldsByTable = [];
49
+ extractedData.forEach((table) => {
50
+ if (!table.rows) {
51
+ return;
52
+ }
53
+ table.rows.forEach((row) => {
54
+ customFieldsByTable.push({
55
+ ref_table: row.ref_table,
56
+ field: row.field,
57
+ ref_column: row.ref_column,
58
+ type: row.type,
59
+ });
60
+ });
61
+ });
62
+ // make sure the are no duplicate records in extractedData
63
+ const customFieldsByTableSet = new Set();
64
+ customFieldsByTableUnique = customFieldsByTable.filter((item) => {
65
+ if (customFieldsByTableSet.has(item.ref_table + item.field + item.ref_column + item.type)) {
66
+ return false;
67
+ }
68
+ customFieldsByTableSet.add(item.ref_table + item.field + item.ref_column + item.type);
69
+ return true;
70
+ });
71
+ }
72
+ catch (e) {
73
+ console.error('CUSTOM FIELDS DISABLED');
74
+ }
75
+ return customFieldsByTableUnique;
76
+ };
77
+ export const getSchemaInfoWithCustomFields = async (client, caller = 'se') => {
78
+ const { queryEndpoint, queryHeaders, publicKey, databaseType, customerId } = client;
79
+ let customFieldsByTableUnique = [];
80
+ let getCustomFields = true;
81
+ if (!customerId || customerId !== '*') {
82
+ try {
83
+ customFieldsByTableUnique = await getCustomFieldInfo(client, caller);
84
+ }
85
+ catch (e) {
86
+ getCustomFields = false;
87
+ }
88
+ }
89
+ const response = await fetch(`${queryEndpoint}?schema-${caller}`, {
90
+ method: 'POST',
91
+ headers: {
92
+ ...queryHeaders,
93
+ 'Content-Type': 'application/json',
94
+ },
95
+ body: JSON.stringify({
96
+ metadata: {
97
+ clientId: publicKey,
98
+ publicKey: publicKey,
99
+ task: 'schema',
100
+ removeCustomerField: true,
101
+ getCustomFields: !client.customerId ||
102
+ client.customerId === '*' ||
103
+ (customFieldsByTableUnique.length === 0 && !getCustomFields)
104
+ ? false
105
+ : true,
106
+ orgId: client.customerId || '*',
107
+ customFieldsByTable: customFieldsByTableUnique,
108
+ gatherSchemaData: true,
109
+ },
110
+ }),
111
+ });
112
+ const result = await response.json();
113
+ return {
114
+ schemaData: parseResponse(result),
115
+ customFieldsByTable: customFieldsByTableUnique,
116
+ };
117
+ };
@@ -1,6 +1,6 @@
1
1
  import { Column } from '../models/Columns';
2
2
  export declare const hasColumnAlias: (columns: Column[], referencedColumns: string[]) => boolean;
3
- export declare const getUniqueValuesByColumns: (columns: Column[], query: string, rows: any, client: any) => Promise<{
3
+ export declare const getUniqueValuesByColumns: (columns: Column[], query: string, rows: any, client: any, customFields: any[]) => Promise<{
4
4
  [column: string]: {
5
5
  [value: string]: boolean;
6
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tableProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/tableProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,eAAO,MAAM,cAAc,YAChB,MAAM,EAAE,qBACE,MAAM,EAAE,KAC1B,OAUF,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAC1B,MAAM,EAAE,SACV,MAAM,QACP,GAAG,UACD,GAAG;;;;SA2DZ,CAAC"}
1
+ {"version":3,"file":"tableProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/tableProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,eAAO,MAAM,cAAc,YAChB,MAAM,EAAE,qBACE,MAAM,EAAE,KAC1B,OAUF,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAC1B,MAAM,EAAE,SACV,MAAM,QACP,GAAG,UACD,GAAG,gBACG,GAAG,EAAE;;;;SA6DpB,CAAC"}
@@ -11,7 +11,7 @@ export const hasColumnAlias = (columns, referencedColumns) => {
11
11
  }
12
12
  return false;
13
13
  };
14
- export const getUniqueValuesByColumns = async (columns, query, rows, client) => {
14
+ export const getUniqueValuesByColumns = async (columns, query, rows, client, customFields) => {
15
15
  const stringNames = columns.map((column) => column.field);
16
16
  const uniqueValues = {};
17
17
  if (!client.databaseType ||
@@ -24,6 +24,7 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client) =>
24
24
  orgId: client.customerId || '*',
25
25
  clientId: client.publicKey,
26
26
  databaseType: client?.databaseType,
27
+ customFieldsByTable: customFields,
27
28
  },
28
29
  };
29
30
  const cloudBody = { query };
@@ -46,7 +47,7 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client) =>
46
47
  }
47
48
  else {
48
49
  const distinctValueQuery = generateDistinctQuery(stringNames, query);
49
- const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client);
50
+ const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client, customFields);
50
51
  if (!distinctStrings) {
51
52
  return {};
52
53
  }
@@ -56,7 +57,7 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client) =>
56
57
  }
57
58
  return uniqueValues;
58
59
  };
59
- const fetchDistinctStrings = async (query, client) => {
60
+ const fetchDistinctStrings = async (query, client, customFields) => {
60
61
  try {
61
62
  const hostedBody = {
62
63
  metadata: {
@@ -65,6 +66,7 @@ const fetchDistinctStrings = async (query, client) => {
65
66
  orgId: client.customerId || '*',
66
67
  clientId: client.publicKey,
67
68
  databaseType: client?.databaseType,
69
+ customFieldsByTable: customFields,
68
70
  },
69
71
  };
70
72
  const cloudBody = { query };
@@ -100,7 +100,7 @@ export const quillFormat = ({ value, format, }) => {
100
100
  */
101
101
  const formatString = (value) => {
102
102
  if (value === null || value === undefined) {
103
- return 'null';
103
+ return '-';
104
104
  }
105
105
  if (typeof value === 'object') {
106
106
  return JSON.stringify(value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.12.3",
3
+ "version": "2.12.5",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",