@quillsql/react 2.13.44 → 2.13.46

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 (145) hide show
  1. package/dist/cjs/Chart.d.ts +3 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +27 -30
  4. package/dist/cjs/ChartBuilder.d.ts +1 -2
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +46 -26
  7. package/dist/cjs/ChartEditor.d.ts +1 -1
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +6 -8
  10. package/dist/cjs/Context.d.ts +18 -6
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +98 -54
  13. package/dist/cjs/Dashboard.d.ts +7 -1
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +74 -24
  16. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  17. package/dist/cjs/ReportBuilder.js +201 -76
  18. package/dist/cjs/Table.d.ts.map +1 -1
  19. package/dist/cjs/Table.js +3 -3
  20. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  21. package/dist/cjs/components/Chart/BarChart.js +1 -2
  22. package/dist/cjs/components/Chart/GaugeChart.js +1 -1
  23. package/dist/cjs/components/Chart/LineChart.js +1 -1
  24. package/dist/cjs/components/Chart/MapChart.js +1 -1
  25. package/dist/cjs/components/Chart/PieChart.js +1 -1
  26. package/dist/cjs/components/Dashboard/DashboardFilter.js +6 -4
  27. package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
  28. package/dist/cjs/components/Dashboard/DashboardSection.js +0 -1
  29. package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
  30. package/dist/cjs/components/Dashboard/DashboardSectionContainer.js +0 -1
  31. package/dist/cjs/components/Dashboard/DataLoader.d.ts +6 -4
  32. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  33. package/dist/cjs/components/Dashboard/DataLoader.js +108 -139
  34. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  35. package/dist/cjs/components/QuillTable.js +61 -59
  36. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +4 -1
  37. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  38. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +59 -63
  39. package/dist/cjs/components/ReportBuilder/schema.d.ts +7 -0
  40. package/dist/cjs/components/ReportBuilder/schema.d.ts.map +1 -1
  41. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  42. package/dist/cjs/components/UiComponents.js +11 -3
  43. package/dist/cjs/hooks/useDashboard.d.ts +23 -2
  44. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  45. package/dist/cjs/hooks/useDashboard.js +133 -3
  46. package/dist/cjs/hooks/useExport.js +3 -3
  47. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  48. package/dist/cjs/hooks/useQuill.js +8 -7
  49. package/dist/cjs/hooks/useReport.d.ts.map +1 -1
  50. package/dist/cjs/hooks/useReport.js +13 -12
  51. package/dist/cjs/index.d.ts +1 -1
  52. package/dist/cjs/index.d.ts.map +1 -1
  53. package/dist/cjs/index.js +2 -1
  54. package/dist/cjs/models/Client.d.ts +1 -0
  55. package/dist/cjs/models/Client.d.ts.map +1 -1
  56. package/dist/cjs/models/Dashboard.d.ts +5 -1
  57. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  58. package/dist/cjs/models/Filter.d.ts.map +1 -1
  59. package/dist/cjs/models/Filter.js +0 -2
  60. package/dist/cjs/models/Report.d.ts +1 -2
  61. package/dist/cjs/models/Report.d.ts.map +1 -1
  62. package/dist/cjs/utils/client.d.ts.map +1 -1
  63. package/dist/cjs/utils/client.js +1 -0
  64. package/dist/cjs/utils/dashboard.js +1 -1
  65. package/dist/cjs/utils/report.d.ts.map +1 -1
  66. package/dist/cjs/utils/report.js +2 -2
  67. package/dist/cjs/utils/reportBuilder.d.ts +11 -2
  68. package/dist/cjs/utils/reportBuilder.d.ts.map +1 -1
  69. package/dist/cjs/utils/reportBuilder.js +127 -1
  70. package/dist/cjs/utils/schema.d.ts +2 -7
  71. package/dist/cjs/utils/schema.d.ts.map +1 -1
  72. package/dist/cjs/utils/schema.js +4 -0
  73. package/dist/esm/Chart.d.ts +3 -1
  74. package/dist/esm/Chart.d.ts.map +1 -1
  75. package/dist/esm/Chart.js +28 -31
  76. package/dist/esm/ChartBuilder.d.ts +1 -2
  77. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  78. package/dist/esm/ChartBuilder.js +47 -27
  79. package/dist/esm/ChartEditor.d.ts +1 -1
  80. package/dist/esm/ChartEditor.d.ts.map +1 -1
  81. package/dist/esm/ChartEditor.js +7 -9
  82. package/dist/esm/Context.d.ts +18 -6
  83. package/dist/esm/Context.d.ts.map +1 -1
  84. package/dist/esm/Context.js +100 -56
  85. package/dist/esm/Dashboard.d.ts +7 -1
  86. package/dist/esm/Dashboard.d.ts.map +1 -1
  87. package/dist/esm/Dashboard.js +74 -24
  88. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  89. package/dist/esm/ReportBuilder.js +206 -81
  90. package/dist/esm/Table.d.ts.map +1 -1
  91. package/dist/esm/Table.js +3 -3
  92. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  93. package/dist/esm/components/Chart/BarChart.js +1 -2
  94. package/dist/esm/components/Chart/GaugeChart.js +1 -1
  95. package/dist/esm/components/Chart/LineChart.js +1 -1
  96. package/dist/esm/components/Chart/MapChart.js +1 -1
  97. package/dist/esm/components/Chart/PieChart.js +1 -1
  98. package/dist/esm/components/Dashboard/DashboardFilter.js +6 -4
  99. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
  100. package/dist/esm/components/Dashboard/DashboardSection.js +0 -1
  101. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
  102. package/dist/esm/components/Dashboard/DashboardSectionContainer.js +0 -1
  103. package/dist/esm/components/Dashboard/DataLoader.d.ts +6 -4
  104. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  105. package/dist/esm/components/Dashboard/DataLoader.js +109 -140
  106. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  107. package/dist/esm/components/QuillTable.js +61 -59
  108. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +4 -1
  109. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  110. package/dist/esm/components/ReportBuilder/AddColumnModal.js +59 -63
  111. package/dist/esm/components/ReportBuilder/schema.d.ts +7 -0
  112. package/dist/esm/components/ReportBuilder/schema.d.ts.map +1 -1
  113. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  114. package/dist/esm/components/UiComponents.js +11 -3
  115. package/dist/esm/hooks/useDashboard.d.ts +23 -2
  116. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  117. package/dist/esm/hooks/useDashboard.js +131 -3
  118. package/dist/esm/hooks/useExport.js +4 -4
  119. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  120. package/dist/esm/hooks/useQuill.js +9 -8
  121. package/dist/esm/hooks/useReport.d.ts.map +1 -1
  122. package/dist/esm/hooks/useReport.js +14 -13
  123. package/dist/esm/index.d.ts +1 -1
  124. package/dist/esm/index.d.ts.map +1 -1
  125. package/dist/esm/index.js +1 -1
  126. package/dist/esm/models/Client.d.ts +1 -0
  127. package/dist/esm/models/Client.d.ts.map +1 -1
  128. package/dist/esm/models/Dashboard.d.ts +5 -1
  129. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  130. package/dist/esm/models/Filter.d.ts.map +1 -1
  131. package/dist/esm/models/Filter.js +0 -2
  132. package/dist/esm/models/Report.d.ts +1 -2
  133. package/dist/esm/models/Report.d.ts.map +1 -1
  134. package/dist/esm/utils/client.d.ts.map +1 -1
  135. package/dist/esm/utils/client.js +1 -0
  136. package/dist/esm/utils/dashboard.js +1 -1
  137. package/dist/esm/utils/report.d.ts.map +1 -1
  138. package/dist/esm/utils/report.js +2 -2
  139. package/dist/esm/utils/reportBuilder.d.ts +11 -2
  140. package/dist/esm/utils/reportBuilder.d.ts.map +1 -1
  141. package/dist/esm/utils/reportBuilder.js +124 -0
  142. package/dist/esm/utils/schema.d.ts +2 -7
  143. package/dist/esm/utils/schema.d.ts.map +1 -1
  144. package/dist/esm/utils/schema.js +4 -0
  145. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { convertASTToPivotData } from '../components/ReportBuilder/convert';
2
2
  import { deepCopy } from '../components/ReportBuilder/util';
3
+ import { JoinType, } from '../models/ReportBuilder';
3
4
  import { astToFilterTree, filterTreeToAst, getFieldFromExpression, } from './astFilterProcessing';
4
5
  import { getDateFormatFromBucket } from './dates';
5
6
  import { filterStackToFilterTree, generateFilterStack, } from './filterProcessing';
@@ -384,3 +385,126 @@ export const setTypesOnPivot = (newPivot, searchColumns) => ({
384
385
  valueFieldType: searchColumns.find((c) => c.field === newPivot.aggregations?.[0]?.valueField)?.jsType,
385
386
  valueField2Type: searchColumns.find((c) => c.field === newPivot.aggregations?.[0]?.valueField2)?.jsType,
386
387
  });
388
+ export const orderTablesByBestPrimaryTable = (tables, foreignKeyMap) => {
389
+ const getPrimaryTableMappings = (table) => {
390
+ const tablesMappedByPrimaryTable = [{ ...table }];
391
+ foreignKeyMap[table.name]?.forEach((mapping) => {
392
+ if (tables.some((t) => t.name === mapping.foreignTable)) {
393
+ tablesMappedByPrimaryTable.push({
394
+ name: mapping.foreignTable,
395
+ join: {
396
+ type: JoinType.INNER,
397
+ condition: {
398
+ operator: '=',
399
+ left: { field: mapping.foreignKey, table: table.name },
400
+ right: {
401
+ field: mapping.foreignTablePrimaryKey,
402
+ table: mapping.foreignTable,
403
+ },
404
+ },
405
+ },
406
+ });
407
+ }
408
+ });
409
+ return tablesMappedByPrimaryTable;
410
+ };
411
+ if (tables.length === 0) {
412
+ return [];
413
+ }
414
+ let primaryTableMappings = [];
415
+ tables.forEach((table) => {
416
+ const mappedByTable = getPrimaryTableMappings(table);
417
+ if (mappedByTable.length > primaryTableMappings.length) {
418
+ primaryTableMappings = mappedByTable;
419
+ }
420
+ });
421
+ return primaryTableMappings;
422
+ };
423
+ export const validatedReportBuilderState = (state, foreignKeyMap) => {
424
+ let { tables, columns, filterStack, sort } = state;
425
+ const { pivot, limit } = state;
426
+ if (columns.length === 0) {
427
+ return {
428
+ tables: [],
429
+ columns: [],
430
+ filterStack: [],
431
+ pivot: null,
432
+ sort: [],
433
+ limit: null,
434
+ };
435
+ }
436
+ const tablesReferencedInColumns = tables.filter((table) => {
437
+ return columns.some((col) => col.table === table.name);
438
+ });
439
+ tables = columns.some((col) => col.table === tables[0]?.name)
440
+ ? tablesReferencedInColumns
441
+ : orderTablesByBestPrimaryTable(tablesReferencedInColumns, foreignKeyMap);
442
+ columns = columns.filter((col) => {
443
+ return tables.some((table) => table.name === col.table);
444
+ });
445
+ filterStack = filterStack.filter((filter, index) => {
446
+ if (!filter.value) {
447
+ let prevFilterValid = true;
448
+ let nextFilterValid = true;
449
+ if (index === 1) {
450
+ const prevFilter = filterStack[0];
451
+ prevFilterValid =
452
+ !!prevFilter.value &&
453
+ columns.some((col) => col.field === prevFilter.value?.field) &&
454
+ tables.some((table) => table.name === prevFilter.value?.table);
455
+ }
456
+ const nextFilter = filterStack[index + 1];
457
+ if (nextFilter) {
458
+ nextFilterValid =
459
+ !!nextFilter.value &&
460
+ columns.some((col) => col.field === nextFilter.value?.field) &&
461
+ tables.some((table) => table.name === nextFilter.value?.table);
462
+ }
463
+ return prevFilterValid && nextFilterValid;
464
+ }
465
+ else {
466
+ return (columns.some((col) => col.field === filter.value?.field) &&
467
+ tables.some((table) => table.name === filter.value?.table));
468
+ }
469
+ });
470
+ sort = sort.filter((sort) => {
471
+ return columns.some((col) => (col.alias ?? col.field) === sort.field);
472
+ });
473
+ // If pivot is using removed columns, remove pivot
474
+ let removePivot = false;
475
+ if (pivot) {
476
+ const referencedColumns = [];
477
+ if (pivot.rowField) {
478
+ referencedColumns.push(pivot.rowField);
479
+ }
480
+ if (pivot.columnField) {
481
+ referencedColumns.push(pivot.columnField);
482
+ }
483
+ if (pivot.aggregations) {
484
+ pivot.aggregations.forEach((agg) => {
485
+ if (agg.valueField) {
486
+ referencedColumns.push(agg.valueField);
487
+ }
488
+ if (agg.valueField2) {
489
+ referencedColumns.push(agg.valueField2);
490
+ }
491
+ });
492
+ }
493
+ const columnMapping = referencedColumns
494
+ .map((col) => {
495
+ const column = columns.find((c) => (c.alias || c.field) === col);
496
+ return column;
497
+ })
498
+ .filter((c) => c !== undefined);
499
+ removePivot = !columnMapping.every((col) => columns.some((c) => (c.alias || c.field) === (col.alias || col.field) &&
500
+ c.table === col.table));
501
+ }
502
+ return {
503
+ tables,
504
+ columns,
505
+ filterStack,
506
+ pivot: removePivot ? null : pivot,
507
+ sort,
508
+ limit,
509
+ };
510
+ };
@@ -1,3 +1,4 @@
1
+ import { ForeignKeyMap } from '../components/ReportBuilder/schema';
1
2
  import { QuillProviderClient } from '../models/Client';
2
3
  import { ColumnInternal } from '../models/Columns';
3
4
  import { CustomField } from '../models/Schema';
@@ -30,11 +31,5 @@ export declare const getSchemaInfo: ({ client, caller, tenants, tableIds, abortS
30
31
  schemaWithCustomFields: Table[];
31
32
  }>;
32
33
  export declare const customFieldToColumnInternal: (customField: CustomField) => ColumnInternal;
33
- export declare const getSchemaForeignKeyMapping: (schema: Table[]) => {
34
- [table: string]: {
35
- foreignTable: string;
36
- foreignTablePrimaryKey: string;
37
- foreignKey: string;
38
- }[];
39
- };
34
+ export declare const getSchemaForeignKeyMapping: (schema: Table[]) => ForeignKeyMap;
40
35
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AA8BzC,eAAO,MAAM,kBAAkB,8CAK5B;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EACH;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,KAAG,OAAO,CAAC;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;CAAE,GAAG,IAAI,CAwFxD,CAAC;AAEF,eAAO,MAAM,aAAa,wDAMvB;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,KAAG,OAAO,CAAC;IACV,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,mBAAmB,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,sBAAsB,EAAE,KAAK,EAAE,CAAC;CACjC,CAgEA,CAAC;AA2BF,eAAO,MAAM,2BAA2B,gBACzB,WAAW,KACvB,cAaF,CAAC;AAIF,eAAO,MAAM,0BAA0B,WAC7B,KAAK,EAAE,KACd;IACD,CAAC,KAAK,EAAE,MAAM,GAAG;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB,EAAE,CAAC;CAiCL,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAEd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AA8BzC,eAAO,MAAM,kBAAkB,8CAK5B;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EACH;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,KAAG,OAAO,CAAC;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;CAAE,GAAG,IAAI,CAwFxD,CAAC;AAEF,eAAO,MAAM,aAAa,wDAMvB;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,KAAG,OAAO,CAAC;IACV,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,mBAAmB,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,sBAAsB,EAAE,KAAK,EAAE,CAAC;CACjC,CAgEA,CAAC;AA2BF,eAAO,MAAM,2BAA2B,gBACzB,WAAW,KACvB,cAaF,CAAC;AAIF,eAAO,MAAM,0BAA0B,WAAY,KAAK,EAAE,KAAG,aA8B5D,CAAC"}
@@ -203,6 +203,10 @@ export const getSchemaForeignKeyMapping = (schema) => {
203
203
  table.columns.forEach((column) => {
204
204
  if (column.field.toLowerCase().endsWith('_id')) {
205
205
  const foreignTableName = `${column.field.slice(0, -3)}s`;
206
+ if (foreignTableName === table.name) {
207
+ // avoid self-referential foreign keys
208
+ return;
209
+ }
206
210
  const foreignTable = schema.find((t) => t.name === foreignTableName);
207
211
  if (foreignTable &&
208
212
  foreignTable.columns.some((c) => c.field === 'id')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.13.44",
3
+ "version": "2.13.46",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",