@quillsql/react 2.10.19 → 2.10.21

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 (49) hide show
  1. package/dist/cjs/Chart.d.ts +1 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +1 -1
  4. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  5. package/dist/cjs/SQLEditor.js +0 -27
  6. package/dist/cjs/Table.d.ts +1 -1
  7. package/dist/cjs/Table.d.ts.map +1 -1
  8. package/dist/cjs/Table.js +4 -162
  9. package/dist/cjs/hooks/useExport.d.ts +15 -0
  10. package/dist/cjs/hooks/useExport.d.ts.map +1 -0
  11. package/dist/cjs/hooks/useExport.js +31 -0
  12. package/dist/cjs/hooks/useQuill.d.ts +1 -1
  13. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  14. package/dist/cjs/index.d.ts +2 -1
  15. package/dist/cjs/index.d.ts.map +1 -1
  16. package/dist/cjs/index.js +5 -3
  17. package/dist/cjs/utils/csv.d.ts +6 -0
  18. package/dist/cjs/utils/csv.d.ts.map +1 -0
  19. package/dist/cjs/utils/csv.js +80 -0
  20. package/dist/cjs/utils/valueFormatterCSV.d.ts +1 -1
  21. package/dist/cjs/utils/valueFormatterCSV.d.ts.map +1 -1
  22. package/dist/esm/Chart.d.ts +1 -1
  23. package/dist/esm/Chart.d.ts.map +1 -1
  24. package/dist/esm/Chart.js +1 -1
  25. package/dist/esm/SQLEditor.d.ts.map +1 -1
  26. package/dist/esm/SQLEditor.js +0 -27
  27. package/dist/esm/Table.d.ts +1 -1
  28. package/dist/esm/Table.d.ts.map +1 -1
  29. package/dist/esm/Table.js +4 -162
  30. package/dist/esm/hooks/useExport.d.ts +15 -0
  31. package/dist/esm/hooks/useExport.d.ts.map +1 -0
  32. package/dist/esm/hooks/useExport.js +27 -0
  33. package/dist/esm/hooks/useQuill.d.ts +1 -1
  34. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  35. package/dist/esm/index.d.ts +2 -1
  36. package/dist/esm/index.d.ts.map +1 -1
  37. package/dist/esm/index.js +2 -1
  38. package/dist/esm/utils/csv.d.ts +6 -0
  39. package/dist/esm/utils/csv.d.ts.map +1 -0
  40. package/dist/esm/utils/csv.js +76 -0
  41. package/dist/esm/utils/valueFormatterCSV.d.ts +1 -1
  42. package/dist/esm/utils/valueFormatterCSV.d.ts.map +1 -1
  43. package/package.json +1 -1
  44. package/dist/cjs/utils/downloadCSV.d.ts +0 -4
  45. package/dist/cjs/utils/downloadCSV.d.ts.map +0 -1
  46. package/dist/cjs/utils/downloadCSV.js +0 -28
  47. package/dist/esm/utils/downloadCSV.d.ts +0 -4
  48. package/dist/esm/utils/downloadCSV.d.ts.map +0 -1
  49. package/dist/esm/utils/downloadCSV.js +0 -24
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  interface BaseChartProps {
3
- colors: string[];
3
+ colors?: string[];
4
4
  containerStyle?: React.CSSProperties;
5
5
  dateFilter?: any;
6
6
  theme?: any;
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA2BA,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,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;AAieF,eAAe,KAAK,CAAC"}
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;AAieF,eAAe,KAAK,CAAC"}
package/dist/cjs/Chart.js CHANGED
@@ -273,7 +273,7 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
273
273
  });
274
274
  return ((0, jsx_runtime_1.jsx)(Table_1.SpecialTable, { rows: pivotTable?.rows ?? data.rows ?? [], columns: pivotTable?.columns ?? data.columns ?? data.yAxisFields, height: '400px', containerStyle: {
275
275
  ...containerStyle,
276
- }, theme: theme, isTableChart: true, name: data.name }));
276
+ }, theme: theme, isTableChart: true, csvFilename: data.name }));
277
277
  }
278
278
  if (chartTypes.includes('bar')) {
279
279
  return ((0, jsx_runtime_1.jsx)(BarList_1.default, { data: pivotTable
@@ -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;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,2CAwXhB;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,2CAuVhB;AA8LD,eAAO,MAAM,mBAAmB;;;;;;6CAqG/B,CAAC"}
@@ -263,33 +263,6 @@ function QueryEditor({ containerStyle = { height: '100vh' }, ButtonComponent, Se
263
263
  setIsOpen(true);
264
264
  };
265
265
  /* all your useState and useContext calls and your useEffect hooks */
266
- const downloadCSV = () => {
267
- // report.rows
268
- if (!rows.length) {
269
- return;
270
- }
271
- const json = rows; // JSON data passed as a prop
272
- const fields = Object.keys(json[0]); // Assumes all objects have same keys
273
- const csvRows = [];
274
- // Header row
275
- csvRows.push(fields.join(','));
276
- // Data rows
277
- for (const row of json) {
278
- const values = fields.map((field) => JSON.stringify(row[field] || ''));
279
- csvRows.push(values.join(','));
280
- }
281
- // Create CSV string and create a 'blob' with it
282
- const csvString = csvRows.join('\r\n');
283
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
284
- // Create a download link and click it
285
- const downloadLink = document.createElement('a');
286
- downloadLink.download = `${query}.csv`;
287
- downloadLink.href = URL.createObjectURL(csvBlob);
288
- downloadLink.style.display = 'none';
289
- document.body.appendChild(downloadLink);
290
- downloadLink.click();
291
- document.body.removeChild(downloadLink);
292
- };
293
266
  (0, react_1.useEffect)(() => {
294
267
  if (onChangeQuery) {
295
268
  onChangeQuery(query);
@@ -22,7 +22,7 @@ declare const Table: ({ chartId, columns, rows, containerStyle, csvFilename, sho
22
22
  interface TableButtonComponentProps {
23
23
  onClick: () => void;
24
24
  }
25
- export declare function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingComponent, theme, showDownloadCsvButton, csvFilename, DownloadCSVButtonComponent, AddToDashboardButtonComponent, isTableChart, name, }: {
25
+ export declare function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingComponent, theme, showDownloadCsvButton, csvFilename, DownloadCSVButtonComponent, AddToDashboardButtonComponent, isTableChart, }: {
26
26
  columns: any[];
27
27
  rows: any[];
28
28
  height: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAcxE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,KAAK,uHAUR,iBAAiB,GAAG,cAAc,4CAsEpC,CAAC;AAEF,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkCD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,qBAA4B,EAC5B,WAAW,EACX,0BAA0B,EAC1B,6BAA6B,EAC7B,YAAoB,EACpB,IAAI,GACL,EAAE;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,CAC3B,KAAK,EAAE,yBAAyB,KAC7B,GAAG,CAAC,OAAO,CAAC;IACjB,6BAA6B,CAAC,EAAE,CAC9B,KAAK,EAAE,yBAAyB,KAC7B,GAAG,CAAC,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,kDAomBA;AA6UD,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAexE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,KAAK,uHAUR,iBAAiB,GAAG,cAAc,4CAuCpC,CAAC;AAEF,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkCD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,qBAA4B,EAC5B,WAAW,EACX,0BAA0B,EAC1B,6BAA6B,EAC7B,YAAoB,GACrB,EAAE;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,CAC3B,KAAK,EAAE,yBAAyB,KAC7B,GAAG,CAAC,OAAO,CAAC;IACjB,6BAA6B,CAAC,EAAE,CAC9B,KAAK,EAAE,yBAAyB,KAC7B,GAAG,CAAC,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,kDAohBA;AAuND,eAAe,KAAK,CAAC"}
package/dist/cjs/Table.js CHANGED
@@ -8,40 +8,14 @@ const react_1 = require("react");
8
8
  const Context_1 = require("./Context");
9
9
  const dataFetcher_1 = require("./utils/dataFetcher");
10
10
  const valueFormatter_1 = require("./utils/valueFormatter");
11
- const valueFormatterCSV_1 = require("./utils/valueFormatterCSV");
12
11
  const merge_1 = require("./utils/merge");
12
+ const useExport_1 = require("./hooks/useExport");
13
13
  const Table = ({ chartId, columns, rows, containerStyle, csvFilename, showDownloadCsvButton, LoadingComponent, loading, height, }) => {
14
14
  const { dispatch, dashboard } = (0, react_1.useContext)(Context_1.DashboardContext);
15
15
  const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
16
16
  const [client, _] = (0, react_1.useContext)(Context_1.ClientContext);
17
17
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
18
- const downloadCSV = (rows, name) => {
19
- // report.rows
20
- if (!rows.length) {
21
- return;
22
- }
23
- const json = rows; // JSON data passed as a prop
24
- const fields = Object.keys(json[0]); // Assumes all objects have same keys
25
- const csvRows = [];
26
- // Header row
27
- csvRows.push(fields.join(','));
28
- // Data rows
29
- for (const row of json) {
30
- const values = fields.map((field) => JSON.stringify(row[field] || ''));
31
- csvRows.push(values.join(','));
32
- }
33
- // Create CSV string and create a 'blob' with it
34
- const csvString = csvRows.join('\r\n');
35
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
36
- // Create a download link and click it
37
- const downloadLink = document.createElement('a');
38
- downloadLink.download = `${name}.csv`;
39
- downloadLink.href = URL.createObjectURL(csvBlob);
40
- downloadLink.style.display = 'none';
41
- document.body.appendChild(downloadLink);
42
- downloadLink.click();
43
- document.body.removeChild(downloadLink);
44
- };
18
+ const { downloadCSV } = (0, useExport_1.useExport)({ chartId });
45
19
  if (!chartId && rows && columns) {
46
20
  return ((0, jsx_runtime_1.jsx)(SpecialTable, { showDownloadCsvButton: showDownloadCsvButton, csvFilename: csvFilename || 'table', columns: columns, rows: rows ?? [], height: containerStyle?.height || height || '100%', theme: theme, containerStyle: containerStyle, LoadingComponent: LoadingComponent, loading: loading }));
47
21
  }
@@ -74,12 +48,13 @@ const compareValues = (a, b, column) => {
74
48
  // For strings
75
49
  return valueA.localeCompare(valueB);
76
50
  };
77
- function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingComponent, theme, showDownloadCsvButton = true, csvFilename, DownloadCSVButtonComponent, AddToDashboardButtonComponent, isTableChart = false, name, }) {
51
+ function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingComponent, theme, showDownloadCsvButton = true, csvFilename, DownloadCSVButtonComponent, AddToDashboardButtonComponent, isTableChart = false, }) {
78
52
  const [activeRows, setActiveRows] = (0, react_1.useState)([]);
79
53
  const [page, setPage] = (0, react_1.useState)(1);
80
54
  const [maxPage, setMaxPage] = (0, react_1.useState)(1);
81
55
  const [sortColumn, setSortColumn] = (0, react_1.useState)(null);
82
56
  const [sortDirection, setSortDirection] = (0, react_1.useState)('desc');
57
+ const { downloadCSV } = (0, useExport_1.useExport)({ rows, fields: columns, name: csvFilename }, isTableChart);
83
58
  (0, react_1.useEffect)(() => {
84
59
  const sortedRows = [...rows];
85
60
  if (sortColumn) {
@@ -116,73 +91,6 @@ function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingC
116
91
  setSortDirection('desc');
117
92
  }
118
93
  };
119
- const downloadCSV = () => {
120
- // report.rows
121
- if (rows && !rows.length) {
122
- return;
123
- }
124
- // if table chart, use columns and valueFormatter
125
- if (isTableChart) {
126
- const newRows = [];
127
- for (let i = 0; i < rows.length; i++) {
128
- const newRow = {};
129
- Object.keys(rows[i]).forEach((field) => (newRow[field] = (0, valueFormatterCSV_1.valueFormatterCSV)({
130
- value: rows[i][field],
131
- field: field,
132
- fields: columns,
133
- })));
134
- newRows.push(newRow);
135
- }
136
- const fields = columns.map((col) => col.field); // Assumes all objects have same keys
137
- const csvRows = [];
138
- // Header row
139
- csvRows.push(columns.map((col) => col.label || col.field).join(','));
140
- // Data rows
141
- for (const row of newRows) {
142
- const values = fields.map((field) => {
143
- let value = JSON.stringify(row[field] ?? '');
144
- if (value.includes('\\"')) {
145
- value = value.replaceAll('\\"', '""');
146
- }
147
- return value;
148
- });
149
- csvRows.push(values.join(','));
150
- }
151
- // Create CSV string and create a 'blob' with it
152
- const csvString = csvRows.join('\r\n');
153
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
154
- // Create a download link and click it
155
- const downloadLink = document.createElement('a');
156
- downloadLink.download = `${name}.csv`;
157
- downloadLink.href = URL.createObjectURL(csvBlob);
158
- downloadLink.style.display = 'none';
159
- document.body.appendChild(downloadLink);
160
- downloadLink.click();
161
- document.body.removeChild(downloadLink);
162
- return;
163
- }
164
- const json = rows; // JSON data passed as a prop
165
- const fields = Object.keys(json[0]); // Assumes all objects have same keys
166
- const csvRows = [];
167
- // Header row
168
- csvRows.push(fields.join(','));
169
- // Data rows
170
- for (const row of json) {
171
- const values = fields.map((field) => JSON.stringify(row[field] || ''));
172
- csvRows.push(values.join(','));
173
- }
174
- // Create CSV string and create a 'blob' with it
175
- const csvString = csvRows.join('\r\n');
176
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
177
- // Create a download link and click it
178
- const downloadLink = document.createElement('a');
179
- downloadLink.download = `${csvFilename}.csv`;
180
- downloadLink.href = URL.createObjectURL(csvBlob);
181
- downloadLink.style.display = 'none';
182
- document.body.appendChild(downloadLink);
183
- downloadLink.click();
184
- document.body.removeChild(downloadLink);
185
- };
186
94
  if (loading) {
187
95
  return ((0, jsx_runtime_1.jsx)("div", { style: {
188
96
  ...containerStyle,
@@ -486,9 +394,6 @@ const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, da
486
394
  isSubscribed = false;
487
395
  };
488
396
  }, [dashboardFilters, client.customerId, chartId]);
489
- const handleDownloadCSV = () => {
490
- downloadCSV(memoizedData, chartConfig.name);
491
- };
492
397
  // const dateFilter = Object.values(dashboardFilters).find(
493
398
  // (filter) => filter.filterType == 'date_range',
494
399
  // );
@@ -525,67 +430,4 @@ const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, da
525
430
  }
526
431
  return ((0, jsx_runtime_1.jsx)(SpecialTable, { showDownloadCsvButton: showDownloadCsvButton, csvFilename: csvFilename || dashboard[chartId].name, columns: dashboard[chartId].columns, rows: dashboard[chartId].rows ?? [], height: containerStyle?.height || '100%', theme: theme, containerStyle: containerStyle, LoadingComponent: LoadingComponent }));
527
432
  };
528
- function Columns({ columns, data, theme, handleDownloadCSV, numToShow }) {
529
- return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', height: '100%' }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
530
- display: 'flex',
531
- flexDirection: 'row',
532
- // overflowX: 'scroll',
533
- // overflowY: 'hidden',
534
- overflow: 'scroll',
535
- height: '100%',
536
- }, children: columns.map((elem) => ((0, jsx_runtime_1.jsx)(Column, { column: elem, data: data, theme: theme }, elem.field))) }), (0, jsx_runtime_1.jsxs)("div", { style: {
537
- display: 'flex',
538
- flexDirection: 'row',
539
- alignItems: 'center',
540
- justifyContent: 'space-between',
541
- // background: 'black',
542
- }, children: [data.length > numToShow && ((0, jsx_runtime_1.jsxs)("div", { style: {
543
- color: theme?.chartLabelColor,
544
- boxSizing: 'content-box',
545
- fontFamily: theme?.chartLabelFontFamily || theme?.fontFamily,
546
- fontSize: theme?.fontSizeSmall || '0.875rem',
547
- marginLeft: 12,
548
- marginTop: 8,
549
- }, children: ["...", data.length - numToShow, " more"] })), (0, jsx_runtime_1.jsx)("div", { onClick: handleDownloadCSV, style: {
550
- height: 40,
551
- minHeight: 40,
552
- color: theme?.primaryTextColor,
553
- boxSizing: 'content-box',
554
- fontFamily: theme?.chartLabelFontFamily || theme?.fontFamily,
555
- fontSize: theme?.fontSizeSmall || '0.875rem',
556
- fontWeight: theme?.fontWeightMedium || '500',
557
- marginTop: 8,
558
- marginLeft: 20,
559
- cursor: 'pointer',
560
- }, children: "Download CSV" })] })] }));
561
- }
562
- function Column({ column, data, theme }) {
563
- return ((0, jsx_runtime_1.jsxs)("div", { style: {
564
- paddingLeft: 20,
565
- paddingRight: 20,
566
- // width: 'max-content',
567
- display: 'inline-flex',
568
- flexDirection: 'column',
569
- whiteSpace: 'nowrap',
570
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
571
- height: 40,
572
- minHeight: 40,
573
- color: theme?.primaryTextColor,
574
- boxSizing: 'content-box',
575
- fontFamily: theme?.chartLabelFontFamily || theme?.fontFamily,
576
- fontSize: theme?.fontSizeSmall || '0.875rem',
577
- fontWeight: theme?.fontWeightMedium || '500',
578
- }, children: column.label || column.field }), data.map((elem) => ((0, jsx_runtime_1.jsx)(Cell, { item: elem[column.field], theme: theme })))] }));
579
- }
580
- function Cell({ item, theme }) {
581
- return ((0, jsx_runtime_1.jsx)("div", { style: {
582
- height: 40,
583
- minHeight: 40,
584
- whiteSpace: 'nowrap',
585
- width: '100%',
586
- fontFamily: theme?.chartLabelFontFamily || theme?.fontFamily,
587
- fontSize: theme?.fontSizeSmall || '0.875rem',
588
- color: theme?.chartLabelColor,
589
- }, children: item }));
590
- }
591
433
  exports.default = Table;
@@ -0,0 +1,15 @@
1
+ interface WithChartId {
2
+ chartId: string;
3
+ }
4
+ interface WithData {
5
+ rows: any[];
6
+ fields?: any[];
7
+ name?: string;
8
+ }
9
+ type UseExportProps = WithChartId | WithData;
10
+ export declare const useExport: (data: UseExportProps, isTableChart?: boolean) => {
11
+ downloadCSV: () => void;
12
+ downloadPDF: () => void;
13
+ };
14
+ export {};
15
+ //# sourceMappingURL=useExport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,KAAK,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE7C,eAAO,MAAM,SAAS,SAAU,cAAc;;;CA2B7C,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useExport = void 0;
4
+ const csv_1 = require("../utils/csv");
5
+ const useQuill_1 = require("../hooks/useQuill");
6
+ const useExport = (data, isTableChart = false) => {
7
+ if ('chartId' in data) {
8
+ const chartData = (0, useQuill_1.useQuill)(data.chartId).data;
9
+ if (!chartData)
10
+ return { downloadCSV: () => { }, downloadPDF: () => { } };
11
+ return {
12
+ downloadCSV: () => (0, csv_1.downloadCSV)({
13
+ rows: chartData.rows,
14
+ fields: chartData.fields,
15
+ name: chartData.name,
16
+ }, isTableChart),
17
+ downloadPDF: () => { },
18
+ };
19
+ }
20
+ if ('rows' in data) {
21
+ return {
22
+ downloadCSV: () => (0, csv_1.downloadCSV)({ ...data }, isTableChart),
23
+ downloadPDF: () => { },
24
+ };
25
+ }
26
+ return {
27
+ downloadCSV: () => { },
28
+ downloadPDF: () => { },
29
+ };
30
+ };
31
+ exports.useExport = useExport;
@@ -19,7 +19,7 @@ interface YAxisField {
19
19
  chartType: string;
20
20
  format: string;
21
21
  }
22
- interface QuillReport {
22
+ export interface QuillReport {
23
23
  name: string;
24
24
  rows: any[];
25
25
  columns: Array<Column>;
@@ -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,UAAU,KAAK;IACb,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;CACf;AAED,eAAO,MAAM,QAAQ,YACV,MAAM;UAET,WAAW,GAAG,IAAI;aACf,OAAO;WACT,MAAM,GAAG,IAAI;CAiFrB,CAAC"}
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,UAAU,KAAK;IACb,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,MAAM,WAAW,WAAW;IAC1B,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;CACf;AAED,eAAO,MAAM,QAAQ,YACV,MAAM;UAET,WAAW,GAAG,IAAI;aACf,OAAO;WACT,MAAM,GAAG,IAAI;CAiFrB,CAAC"}
@@ -8,7 +8,8 @@ export { default as ChartBuilder } from './ChartBuilder';
8
8
  export { default as ChartEditor } from './ChartEditor';
9
9
  export { useDashboard } from './hooks/useDashboard';
10
10
  export { useQuill } from './hooks/useQuill';
11
- export { downloadCSV } from './utils/downloadCSV';
11
+ export { useExport } from './hooks/useExport';
12
+ export { downloadCSV } from './utils/csv';
12
13
  export type { QuillTheme } from './QuillProvider';
13
14
  export { ThemeContext } from './Context';
14
15
  export type { TextInputComponentProps, ButtonComponentProps, Option, PopoverComponentProps, ModalComponentProps, TableComponentProps, HeaderProps, } from './components/UiComponents';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,IAAI,SAAS,EACpB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,SAAS,GACV,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,IAAI,SAAS,EACpB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,SAAS,GACV,MAAM,mCAAmC,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ThemeContext = exports.downloadCSV = exports.useQuill = exports.useDashboard = exports.ChartEditor = exports.ChartBuilder = exports.ReportBuilder = exports.SchemaListComponent = exports.SQLEditor = exports.Table = exports.Chart = exports.QuillProvider = exports.Dashboard = void 0;
6
+ exports.ThemeContext = exports.downloadCSV = exports.useExport = exports.useQuill = exports.useDashboard = exports.ChartEditor = exports.ChartBuilder = exports.ReportBuilder = exports.SchemaListComponent = exports.SQLEditor = exports.Table = exports.Chart = exports.QuillProvider = exports.Dashboard = void 0;
7
7
  // src/index.ts
8
8
  var Dashboard_1 = require("./Dashboard");
9
9
  Object.defineProperty(exports, "Dashboard", { enumerable: true, get: function () { return __importDefault(Dashboard_1).default; } });
@@ -26,7 +26,9 @@ var useDashboard_1 = require("./hooks/useDashboard");
26
26
  Object.defineProperty(exports, "useDashboard", { enumerable: true, get: function () { return useDashboard_1.useDashboard; } });
27
27
  var useQuill_1 = require("./hooks/useQuill");
28
28
  Object.defineProperty(exports, "useQuill", { enumerable: true, get: function () { return useQuill_1.useQuill; } });
29
- var downloadCSV_1 = require("./utils/downloadCSV");
30
- Object.defineProperty(exports, "downloadCSV", { enumerable: true, get: function () { return downloadCSV_1.downloadCSV; } });
29
+ var useExport_1 = require("./hooks/useExport");
30
+ Object.defineProperty(exports, "useExport", { enumerable: true, get: function () { return useExport_1.useExport; } });
31
+ var csv_1 = require("./utils/csv");
32
+ Object.defineProperty(exports, "downloadCSV", { enumerable: true, get: function () { return csv_1.downloadCSV; } });
31
33
  var Context_1 = require("./Context");
32
34
  Object.defineProperty(exports, "ThemeContext", { enumerable: true, get: function () { return Context_1.ThemeContext; } });
@@ -0,0 +1,6 @@
1
+ export declare const downloadCSV: (data: {
2
+ rows: any[];
3
+ fields?: any[];
4
+ name?: string;
5
+ }, isTableChart?: boolean) => void;
6
+ //# sourceMappingURL=csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../src/utils/csv.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,SAChB;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iCA8FrD,CAAC"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.downloadCSV = void 0;
4
+ const valueFormatterCSV_1 = require("./valueFormatterCSV");
5
+ const downloadCSV = (data, isTableChart = false) => {
6
+ const { rows, fields, name } = data;
7
+ // report.rows
8
+ if (rows && !rows.length) {
9
+ return;
10
+ }
11
+ // if table chart, use columns and valueFormatter
12
+ if (isTableChart && fields) {
13
+ const newRows = [];
14
+ for (let i = 0; i < rows.length; i++) {
15
+ const newRow = {};
16
+ Object.keys(rows[i]).forEach((field) => (newRow[field] = (0, valueFormatterCSV_1.valueFormatterCSV)({
17
+ value: rows[i][field],
18
+ field: field,
19
+ fields: fields,
20
+ })));
21
+ newRows.push(newRow);
22
+ }
23
+ const fieldsProcessed = fields?.map((col) => {
24
+ return {
25
+ label: col.field,
26
+ _id: col.field,
27
+ field: col.field,
28
+ format: 'percent',
29
+ };
30
+ });
31
+ const csvRows = [];
32
+ // Header row
33
+ csvRows.push(fields?.map((col) => col.label || col.field).join(','));
34
+ // Data rows
35
+ for (const row of newRows) {
36
+ const values = fieldsProcessed.map((field) => {
37
+ let value = JSON.stringify(row[field.label] ?? '');
38
+ if (value.includes('\\"')) {
39
+ value = value.replaceAll('\\"', '""');
40
+ }
41
+ return value;
42
+ });
43
+ csvRows.push(values.join(','));
44
+ }
45
+ // Create CSV string and create a 'blob' with it
46
+ const csvString = csvRows.join('\r\n');
47
+ const csvBlob = new Blob([csvString], { type: 'text/csv' });
48
+ // Create a download link and click it
49
+ const downloadLink = document.createElement('a');
50
+ downloadLink.download = `${name}.csv`;
51
+ downloadLink.href = URL.createObjectURL(csvBlob);
52
+ downloadLink.style.display = 'none';
53
+ document.body.appendChild(downloadLink);
54
+ downloadLink.click();
55
+ document.body.removeChild(downloadLink);
56
+ return;
57
+ }
58
+ const json = rows; // JSON data passed as a prop
59
+ const fieldsProcessed = Object.keys(json[0]); // Assumes all objects have same keys
60
+ const csvRows = [];
61
+ // Header row
62
+ csvRows.push(fieldsProcessed.join(','));
63
+ // Data rows
64
+ for (const row of json) {
65
+ const values = fieldsProcessed.map((field) => JSON.stringify(row[field] || ''));
66
+ csvRows.push(values.join(','));
67
+ }
68
+ // Create CSV string and create a 'blob' with it
69
+ const csvString = csvRows.join('\r\n');
70
+ const csvBlob = new Blob([csvString], { type: 'text/csv' });
71
+ // Create a download link and click it
72
+ const downloadLink = document.createElement('a');
73
+ downloadLink.download = `${name}.csv`;
74
+ downloadLink.href = URL.createObjectURL(csvBlob);
75
+ downloadLink.style.display = 'none';
76
+ document.body.appendChild(downloadLink);
77
+ downloadLink.click();
78
+ document.body.removeChild(downloadLink);
79
+ };
80
+ exports.downloadCSV = downloadCSV;
@@ -1,4 +1,4 @@
1
- type Field = {
1
+ export type Field = {
2
2
  _id: string;
3
3
  label: string;
4
4
  field: string;
@@ -1 +1 @@
1
- {"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,8BAI3B,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
1
+ {"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,KAAK,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,8BAI3B,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  interface BaseChartProps {
3
- colors: string[];
3
+ colors?: string[];
4
4
  containerStyle?: React.CSSProperties;
5
5
  dateFilter?: any;
6
6
  theme?: any;
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA2BA,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,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;AAieF,eAAe,KAAK,CAAC"}
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;AAieF,eAAe,KAAK,CAAC"}
package/dist/esm/Chart.js CHANGED
@@ -266,7 +266,7 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
266
266
  });
267
267
  return (_jsx(SpecialTable, { rows: pivotTable?.rows ?? data.rows ?? [], columns: pivotTable?.columns ?? data.columns ?? data.yAxisFields, height: '400px', containerStyle: {
268
268
  ...containerStyle,
269
- }, theme: theme, isTableChart: true, name: data.name }));
269
+ }, theme: theme, isTableChart: true, csvFilename: data.name }));
270
270
  }
271
271
  if (chartTypes.includes('bar')) {
272
272
  return (_jsx(BarList, { data: pivotTable
@@ -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;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,2CAwXhB;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,2CAuVhB;AA8LD,eAAO,MAAM,mBAAmB;;;;;;6CAqG/B,CAAC"}
@@ -256,33 +256,6 @@ export default function QueryEditor({ containerStyle = { height: '100vh' }, Butt
256
256
  setIsOpen(true);
257
257
  };
258
258
  /* all your useState and useContext calls and your useEffect hooks */
259
- const downloadCSV = () => {
260
- // report.rows
261
- if (!rows.length) {
262
- return;
263
- }
264
- const json = rows; // JSON data passed as a prop
265
- const fields = Object.keys(json[0]); // Assumes all objects have same keys
266
- const csvRows = [];
267
- // Header row
268
- csvRows.push(fields.join(','));
269
- // Data rows
270
- for (const row of json) {
271
- const values = fields.map((field) => JSON.stringify(row[field] || ''));
272
- csvRows.push(values.join(','));
273
- }
274
- // Create CSV string and create a 'blob' with it
275
- const csvString = csvRows.join('\r\n');
276
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
277
- // Create a download link and click it
278
- const downloadLink = document.createElement('a');
279
- downloadLink.download = `${query}.csv`;
280
- downloadLink.href = URL.createObjectURL(csvBlob);
281
- downloadLink.style.display = 'none';
282
- document.body.appendChild(downloadLink);
283
- downloadLink.click();
284
- document.body.removeChild(downloadLink);
285
- };
286
259
  useEffect(() => {
287
260
  if (onChangeQuery) {
288
261
  onChangeQuery(query);
@@ -22,7 +22,7 @@ declare const Table: ({ chartId, columns, rows, containerStyle, csvFilename, sho
22
22
  interface TableButtonComponentProps {
23
23
  onClick: () => void;
24
24
  }
25
- export declare function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingComponent, theme, showDownloadCsvButton, csvFilename, DownloadCSVButtonComponent, AddToDashboardButtonComponent, isTableChart, name, }: {
25
+ export declare function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingComponent, theme, showDownloadCsvButton, csvFilename, DownloadCSVButtonComponent, AddToDashboardButtonComponent, isTableChart, }: {
26
26
  columns: any[];
27
27
  rows: any[];
28
28
  height: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAcxE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,KAAK,uHAUR,iBAAiB,GAAG,cAAc,4CAsEpC,CAAC;AAEF,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkCD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,qBAA4B,EAC5B,WAAW,EACX,0BAA0B,EAC1B,6BAA6B,EAC7B,YAAoB,EACpB,IAAI,GACL,EAAE;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,CAC3B,KAAK,EAAE,yBAAyB,KAC7B,GAAG,CAAC,OAAO,CAAC;IACjB,6BAA6B,CAAC,EAAE,CAC9B,KAAK,EAAE,yBAAyB,KAC7B,GAAG,CAAC,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,kDAomBA;AA6UD,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAexE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,KAAK,uHAUR,iBAAiB,GAAG,cAAc,4CAuCpC,CAAC;AAEF,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkCD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,qBAA4B,EAC5B,WAAW,EACX,0BAA0B,EAC1B,6BAA6B,EAC7B,YAAoB,GACrB,EAAE;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,CAC3B,KAAK,EAAE,yBAAyB,KAC7B,GAAG,CAAC,OAAO,CAAC;IACjB,6BAA6B,CAAC,EAAE,CAC9B,KAAK,EAAE,yBAAyB,KAC7B,GAAG,CAAC,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,kDAohBA;AAuND,eAAe,KAAK,CAAC"}
package/dist/esm/Table.js CHANGED
@@ -5,40 +5,14 @@ import { useContext, useEffect, useState } from 'react';
5
5
  import { ClientContext, DashboardContext, ThemeContext, DashboardFiltersContext, } from './Context';
6
6
  import { getData } from './utils/dataFetcher';
7
7
  import { valueFormatter } from './utils/valueFormatter';
8
- import { valueFormatterCSV } from './utils/valueFormatterCSV';
9
8
  import { mergeComparisonRange } from './utils/merge';
9
+ import { useExport } from './hooks/useExport';
10
10
  const Table = ({ chartId, columns, rows, containerStyle, csvFilename, showDownloadCsvButton, LoadingComponent, loading, height, }) => {
11
11
  const { dispatch, dashboard } = useContext(DashboardContext);
12
12
  const { dashboardFilters } = useContext(DashboardFiltersContext);
13
13
  const [client, _] = useContext(ClientContext);
14
14
  const [theme] = useContext(ThemeContext);
15
- const downloadCSV = (rows, name) => {
16
- // report.rows
17
- if (!rows.length) {
18
- return;
19
- }
20
- const json = rows; // JSON data passed as a prop
21
- const fields = Object.keys(json[0]); // Assumes all objects have same keys
22
- const csvRows = [];
23
- // Header row
24
- csvRows.push(fields.join(','));
25
- // Data rows
26
- for (const row of json) {
27
- const values = fields.map((field) => JSON.stringify(row[field] || ''));
28
- csvRows.push(values.join(','));
29
- }
30
- // Create CSV string and create a 'blob' with it
31
- const csvString = csvRows.join('\r\n');
32
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
33
- // Create a download link and click it
34
- const downloadLink = document.createElement('a');
35
- downloadLink.download = `${name}.csv`;
36
- downloadLink.href = URL.createObjectURL(csvBlob);
37
- downloadLink.style.display = 'none';
38
- document.body.appendChild(downloadLink);
39
- downloadLink.click();
40
- document.body.removeChild(downloadLink);
41
- };
15
+ const { downloadCSV } = useExport({ chartId });
42
16
  if (!chartId && rows && columns) {
43
17
  return (_jsx(SpecialTable, { showDownloadCsvButton: showDownloadCsvButton, csvFilename: csvFilename || 'table', columns: columns, rows: rows ?? [], height: containerStyle?.height || height || '100%', theme: theme, containerStyle: containerStyle, LoadingComponent: LoadingComponent, loading: loading }));
44
18
  }
@@ -71,12 +45,13 @@ const compareValues = (a, b, column) => {
71
45
  // For strings
72
46
  return valueA.localeCompare(valueB);
73
47
  };
74
- export function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingComponent, theme, showDownloadCsvButton = true, csvFilename, DownloadCSVButtonComponent, AddToDashboardButtonComponent, isTableChart = false, name, }) {
48
+ export function SpecialTable({ columns, rows, height, containerStyle, loading, LoadingComponent, theme, showDownloadCsvButton = true, csvFilename, DownloadCSVButtonComponent, AddToDashboardButtonComponent, isTableChart = false, }) {
75
49
  const [activeRows, setActiveRows] = useState([]);
76
50
  const [page, setPage] = useState(1);
77
51
  const [maxPage, setMaxPage] = useState(1);
78
52
  const [sortColumn, setSortColumn] = useState(null);
79
53
  const [sortDirection, setSortDirection] = useState('desc');
54
+ const { downloadCSV } = useExport({ rows, fields: columns, name: csvFilename }, isTableChart);
80
55
  useEffect(() => {
81
56
  const sortedRows = [...rows];
82
57
  if (sortColumn) {
@@ -113,73 +88,6 @@ export function SpecialTable({ columns, rows, height, containerStyle, loading, L
113
88
  setSortDirection('desc');
114
89
  }
115
90
  };
116
- const downloadCSV = () => {
117
- // report.rows
118
- if (rows && !rows.length) {
119
- return;
120
- }
121
- // if table chart, use columns and valueFormatter
122
- if (isTableChart) {
123
- const newRows = [];
124
- for (let i = 0; i < rows.length; i++) {
125
- const newRow = {};
126
- Object.keys(rows[i]).forEach((field) => (newRow[field] = valueFormatterCSV({
127
- value: rows[i][field],
128
- field: field,
129
- fields: columns,
130
- })));
131
- newRows.push(newRow);
132
- }
133
- const fields = columns.map((col) => col.field); // Assumes all objects have same keys
134
- const csvRows = [];
135
- // Header row
136
- csvRows.push(columns.map((col) => col.label || col.field).join(','));
137
- // Data rows
138
- for (const row of newRows) {
139
- const values = fields.map((field) => {
140
- let value = JSON.stringify(row[field] ?? '');
141
- if (value.includes('\\"')) {
142
- value = value.replaceAll('\\"', '""');
143
- }
144
- return value;
145
- });
146
- csvRows.push(values.join(','));
147
- }
148
- // Create CSV string and create a 'blob' with it
149
- const csvString = csvRows.join('\r\n');
150
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
151
- // Create a download link and click it
152
- const downloadLink = document.createElement('a');
153
- downloadLink.download = `${name}.csv`;
154
- downloadLink.href = URL.createObjectURL(csvBlob);
155
- downloadLink.style.display = 'none';
156
- document.body.appendChild(downloadLink);
157
- downloadLink.click();
158
- document.body.removeChild(downloadLink);
159
- return;
160
- }
161
- const json = rows; // JSON data passed as a prop
162
- const fields = Object.keys(json[0]); // Assumes all objects have same keys
163
- const csvRows = [];
164
- // Header row
165
- csvRows.push(fields.join(','));
166
- // Data rows
167
- for (const row of json) {
168
- const values = fields.map((field) => JSON.stringify(row[field] || ''));
169
- csvRows.push(values.join(','));
170
- }
171
- // Create CSV string and create a 'blob' with it
172
- const csvString = csvRows.join('\r\n');
173
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
174
- // Create a download link and click it
175
- const downloadLink = document.createElement('a');
176
- downloadLink.download = `${csvFilename}.csv`;
177
- downloadLink.href = URL.createObjectURL(csvBlob);
178
- downloadLink.style.display = 'none';
179
- document.body.appendChild(downloadLink);
180
- downloadLink.click();
181
- document.body.removeChild(downloadLink);
182
- };
183
91
  if (loading) {
184
92
  return (_jsx("div", { style: {
185
93
  ...containerStyle,
@@ -482,9 +390,6 @@ const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, da
482
390
  isSubscribed = false;
483
391
  };
484
392
  }, [dashboardFilters, client.customerId, chartId]);
485
- const handleDownloadCSV = () => {
486
- downloadCSV(memoizedData, chartConfig.name);
487
- };
488
393
  // const dateFilter = Object.values(dashboardFilters).find(
489
394
  // (filter) => filter.filterType == 'date_range',
490
395
  // );
@@ -521,67 +426,4 @@ const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, da
521
426
  }
522
427
  return (_jsx(SpecialTable, { showDownloadCsvButton: showDownloadCsvButton, csvFilename: csvFilename || dashboard[chartId].name, columns: dashboard[chartId].columns, rows: dashboard[chartId].rows ?? [], height: containerStyle?.height || '100%', theme: theme, containerStyle: containerStyle, LoadingComponent: LoadingComponent }));
523
428
  };
524
- function Columns({ columns, data, theme, handleDownloadCSV, numToShow }) {
525
- return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', height: '100%' }, children: [_jsx("div", { style: {
526
- display: 'flex',
527
- flexDirection: 'row',
528
- // overflowX: 'scroll',
529
- // overflowY: 'hidden',
530
- overflow: 'scroll',
531
- height: '100%',
532
- }, children: columns.map((elem) => (_jsx(Column, { column: elem, data: data, theme: theme }, elem.field))) }), _jsxs("div", { style: {
533
- display: 'flex',
534
- flexDirection: 'row',
535
- alignItems: 'center',
536
- justifyContent: 'space-between',
537
- // background: 'black',
538
- }, children: [data.length > numToShow && (_jsxs("div", { style: {
539
- color: theme?.chartLabelColor,
540
- boxSizing: 'content-box',
541
- fontFamily: theme?.chartLabelFontFamily || theme?.fontFamily,
542
- fontSize: theme?.fontSizeSmall || '0.875rem',
543
- marginLeft: 12,
544
- marginTop: 8,
545
- }, children: ["...", data.length - numToShow, " more"] })), _jsx("div", { onClick: handleDownloadCSV, style: {
546
- height: 40,
547
- minHeight: 40,
548
- color: theme?.primaryTextColor,
549
- boxSizing: 'content-box',
550
- fontFamily: theme?.chartLabelFontFamily || theme?.fontFamily,
551
- fontSize: theme?.fontSizeSmall || '0.875rem',
552
- fontWeight: theme?.fontWeightMedium || '500',
553
- marginTop: 8,
554
- marginLeft: 20,
555
- cursor: 'pointer',
556
- }, children: "Download CSV" })] })] }));
557
- }
558
- function Column({ column, data, theme }) {
559
- return (_jsxs("div", { style: {
560
- paddingLeft: 20,
561
- paddingRight: 20,
562
- // width: 'max-content',
563
- display: 'inline-flex',
564
- flexDirection: 'column',
565
- whiteSpace: 'nowrap',
566
- }, children: [_jsx("div", { style: {
567
- height: 40,
568
- minHeight: 40,
569
- color: theme?.primaryTextColor,
570
- boxSizing: 'content-box',
571
- fontFamily: theme?.chartLabelFontFamily || theme?.fontFamily,
572
- fontSize: theme?.fontSizeSmall || '0.875rem',
573
- fontWeight: theme?.fontWeightMedium || '500',
574
- }, children: column.label || column.field }), data.map((elem) => (_jsx(Cell, { item: elem[column.field], theme: theme })))] }));
575
- }
576
- function Cell({ item, theme }) {
577
- return (_jsx("div", { style: {
578
- height: 40,
579
- minHeight: 40,
580
- whiteSpace: 'nowrap',
581
- width: '100%',
582
- fontFamily: theme?.chartLabelFontFamily || theme?.fontFamily,
583
- fontSize: theme?.fontSizeSmall || '0.875rem',
584
- color: theme?.chartLabelColor,
585
- }, children: item }));
586
- }
587
429
  export default Table;
@@ -0,0 +1,15 @@
1
+ interface WithChartId {
2
+ chartId: string;
3
+ }
4
+ interface WithData {
5
+ rows: any[];
6
+ fields?: any[];
7
+ name?: string;
8
+ }
9
+ type UseExportProps = WithChartId | WithData;
10
+ export declare const useExport: (data: UseExportProps, isTableChart?: boolean) => {
11
+ downloadCSV: () => void;
12
+ downloadPDF: () => void;
13
+ };
14
+ export {};
15
+ //# sourceMappingURL=useExport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,KAAK,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE7C,eAAO,MAAM,SAAS,SAAU,cAAc;;;CA2B7C,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { downloadCSV } from '../utils/csv';
2
+ import { useQuill } from '../hooks/useQuill';
3
+ export const useExport = (data, isTableChart = false) => {
4
+ if ('chartId' in data) {
5
+ const chartData = useQuill(data.chartId).data;
6
+ if (!chartData)
7
+ return { downloadCSV: () => { }, downloadPDF: () => { } };
8
+ return {
9
+ downloadCSV: () => downloadCSV({
10
+ rows: chartData.rows,
11
+ fields: chartData.fields,
12
+ name: chartData.name,
13
+ }, isTableChart),
14
+ downloadPDF: () => { },
15
+ };
16
+ }
17
+ if ('rows' in data) {
18
+ return {
19
+ downloadCSV: () => downloadCSV({ ...data }, isTableChart),
20
+ downloadPDF: () => { },
21
+ };
22
+ }
23
+ return {
24
+ downloadCSV: () => { },
25
+ downloadPDF: () => { },
26
+ };
27
+ };
@@ -19,7 +19,7 @@ interface YAxisField {
19
19
  chartType: string;
20
20
  format: string;
21
21
  }
22
- interface QuillReport {
22
+ export interface QuillReport {
23
23
  name: string;
24
24
  rows: any[];
25
25
  columns: Array<Column>;
@@ -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,UAAU,KAAK;IACb,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;CACf;AAED,eAAO,MAAM,QAAQ,YACV,MAAM;UAET,WAAW,GAAG,IAAI;aACf,OAAO;WACT,MAAM,GAAG,IAAI;CAiFrB,CAAC"}
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,UAAU,KAAK;IACb,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,MAAM,WAAW,WAAW;IAC1B,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;CACf;AAED,eAAO,MAAM,QAAQ,YACV,MAAM;UAET,WAAW,GAAG,IAAI;aACf,OAAO;WACT,MAAM,GAAG,IAAI;CAiFrB,CAAC"}
@@ -8,7 +8,8 @@ export { default as ChartBuilder } from './ChartBuilder';
8
8
  export { default as ChartEditor } from './ChartEditor';
9
9
  export { useDashboard } from './hooks/useDashboard';
10
10
  export { useQuill } from './hooks/useQuill';
11
- export { downloadCSV } from './utils/downloadCSV';
11
+ export { useExport } from './hooks/useExport';
12
+ export { downloadCSV } from './utils/csv';
12
13
  export type { QuillTheme } from './QuillProvider';
13
14
  export { ThemeContext } from './Context';
14
15
  export type { TextInputComponentProps, ButtonComponentProps, Option, PopoverComponentProps, ModalComponentProps, TableComponentProps, HeaderProps, } from './components/UiComponents';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,IAAI,SAAS,EACpB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,SAAS,GACV,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,IAAI,SAAS,EACpB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,SAAS,GACV,MAAM,mCAAmC,CAAC"}
package/dist/esm/index.js CHANGED
@@ -9,5 +9,6 @@ export { default as ChartBuilder } from './ChartBuilder';
9
9
  export { default as ChartEditor } from './ChartEditor';
10
10
  export { useDashboard } from './hooks/useDashboard';
11
11
  export { useQuill } from './hooks/useQuill';
12
- export { downloadCSV } from './utils/downloadCSV';
12
+ export { useExport } from './hooks/useExport';
13
+ export { downloadCSV } from './utils/csv';
13
14
  export { ThemeContext } from './Context';
@@ -0,0 +1,6 @@
1
+ export declare const downloadCSV: (data: {
2
+ rows: any[];
3
+ fields?: any[];
4
+ name?: string;
5
+ }, isTableChart?: boolean) => void;
6
+ //# sourceMappingURL=csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../src/utils/csv.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,SAChB;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iCA8FrD,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { valueFormatterCSV } from './valueFormatterCSV';
2
+ export const downloadCSV = (data, isTableChart = false) => {
3
+ const { rows, fields, name } = data;
4
+ // report.rows
5
+ if (rows && !rows.length) {
6
+ return;
7
+ }
8
+ // if table chart, use columns and valueFormatter
9
+ if (isTableChart && fields) {
10
+ const newRows = [];
11
+ for (let i = 0; i < rows.length; i++) {
12
+ const newRow = {};
13
+ Object.keys(rows[i]).forEach((field) => (newRow[field] = valueFormatterCSV({
14
+ value: rows[i][field],
15
+ field: field,
16
+ fields: fields,
17
+ })));
18
+ newRows.push(newRow);
19
+ }
20
+ const fieldsProcessed = fields?.map((col) => {
21
+ return {
22
+ label: col.field,
23
+ _id: col.field,
24
+ field: col.field,
25
+ format: 'percent',
26
+ };
27
+ });
28
+ const csvRows = [];
29
+ // Header row
30
+ csvRows.push(fields?.map((col) => col.label || col.field).join(','));
31
+ // Data rows
32
+ for (const row of newRows) {
33
+ const values = fieldsProcessed.map((field) => {
34
+ let value = JSON.stringify(row[field.label] ?? '');
35
+ if (value.includes('\\"')) {
36
+ value = value.replaceAll('\\"', '""');
37
+ }
38
+ return value;
39
+ });
40
+ csvRows.push(values.join(','));
41
+ }
42
+ // Create CSV string and create a 'blob' with it
43
+ const csvString = csvRows.join('\r\n');
44
+ const csvBlob = new Blob([csvString], { type: 'text/csv' });
45
+ // Create a download link and click it
46
+ const downloadLink = document.createElement('a');
47
+ downloadLink.download = `${name}.csv`;
48
+ downloadLink.href = URL.createObjectURL(csvBlob);
49
+ downloadLink.style.display = 'none';
50
+ document.body.appendChild(downloadLink);
51
+ downloadLink.click();
52
+ document.body.removeChild(downloadLink);
53
+ return;
54
+ }
55
+ const json = rows; // JSON data passed as a prop
56
+ const fieldsProcessed = Object.keys(json[0]); // Assumes all objects have same keys
57
+ const csvRows = [];
58
+ // Header row
59
+ csvRows.push(fieldsProcessed.join(','));
60
+ // Data rows
61
+ for (const row of json) {
62
+ const values = fieldsProcessed.map((field) => JSON.stringify(row[field] || ''));
63
+ csvRows.push(values.join(','));
64
+ }
65
+ // Create CSV string and create a 'blob' with it
66
+ const csvString = csvRows.join('\r\n');
67
+ const csvBlob = new Blob([csvString], { type: 'text/csv' });
68
+ // Create a download link and click it
69
+ const downloadLink = document.createElement('a');
70
+ downloadLink.download = `${name}.csv`;
71
+ downloadLink.href = URL.createObjectURL(csvBlob);
72
+ downloadLink.style.display = 'none';
73
+ document.body.appendChild(downloadLink);
74
+ downloadLink.click();
75
+ document.body.removeChild(downloadLink);
76
+ };
@@ -1,4 +1,4 @@
1
- type Field = {
1
+ export type Field = {
2
2
  _id: string;
3
3
  label: string;
4
4
  field: string;
@@ -1 +1 @@
1
- {"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,8BAI3B,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
1
+ {"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,KAAK,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,8BAI3B,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.10.19",
3
+ "version": "2.10.21",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",
@@ -1,4 +0,0 @@
1
- export declare function downloadCSV(rows: {
2
- [key: string]: any;
3
- }[], filename: string): void;
4
- //# sourceMappingURL=downloadCSV.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"downloadCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/downloadCSV.ts"],"names":[],"mappings":"AACA,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,QA2B3E"}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.downloadCSV = void 0;
4
- // @ts-nocheck
5
- function downloadCSV(rows, filename) {
6
- const json = rows;
7
- const fields = Object.keys(json[0]);
8
- const csvRows = [];
9
- // Header row
10
- csvRows.push(fields.join(','));
11
- // Data rows
12
- for (const row of json) {
13
- const values = fields.map(field => JSON.stringify(row[field] || ''));
14
- csvRows.push(values.join(','));
15
- }
16
- // Create CSV string and create a 'blob' with it
17
- const csvString = csvRows.join('\r\n');
18
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
19
- // Create a download link and click it
20
- const downloadLink = document.createElement('a');
21
- downloadLink.download = `${filename}.csv`;
22
- downloadLink.href = URL.createObjectURL(csvBlob);
23
- downloadLink.style.display = 'none';
24
- document.body.appendChild(downloadLink);
25
- downloadLink.click();
26
- document.body.removeChild(downloadLink);
27
- }
28
- exports.downloadCSV = downloadCSV;
@@ -1,4 +0,0 @@
1
- export declare function downloadCSV(rows: {
2
- [key: string]: any;
3
- }[], filename: string): void;
4
- //# sourceMappingURL=downloadCSV.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"downloadCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/downloadCSV.ts"],"names":[],"mappings":"AACA,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,QA2B3E"}
@@ -1,24 +0,0 @@
1
- // @ts-nocheck
2
- export function downloadCSV(rows, filename) {
3
- const json = rows;
4
- const fields = Object.keys(json[0]);
5
- const csvRows = [];
6
- // Header row
7
- csvRows.push(fields.join(','));
8
- // Data rows
9
- for (const row of json) {
10
- const values = fields.map(field => JSON.stringify(row[field] || ''));
11
- csvRows.push(values.join(','));
12
- }
13
- // Create CSV string and create a 'blob' with it
14
- const csvString = csvRows.join('\r\n');
15
- const csvBlob = new Blob([csvString], { type: 'text/csv' });
16
- // Create a download link and click it
17
- const downloadLink = document.createElement('a');
18
- downloadLink.download = `${filename}.csv`;
19
- downloadLink.href = URL.createObjectURL(csvBlob);
20
- downloadLink.style.display = 'none';
21
- document.body.appendChild(downloadLink);
22
- downloadLink.click();
23
- document.body.removeChild(downloadLink);
24
- }