@quillsql/react 2.10.19 → 2.10.20
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.
- package/dist/cjs/Chart.d.ts +1 -1
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +1 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +0 -27
- package/dist/cjs/Table.d.ts +1 -1
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +4 -162
- package/dist/cjs/hooks/useExport.d.ts +15 -0
- package/dist/cjs/hooks/useExport.d.ts.map +1 -0
- package/dist/cjs/hooks/useExport.js +31 -0
- package/dist/cjs/hooks/useQuill.d.ts +1 -1
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/utils/csv.d.ts +6 -0
- package/dist/cjs/utils/csv.d.ts.map +1 -0
- package/dist/cjs/utils/csv.js +80 -0
- package/dist/cjs/utils/valueFormatterCSV.d.ts +1 -1
- package/dist/cjs/utils/valueFormatterCSV.d.ts.map +1 -1
- package/dist/esm/Chart.d.ts +1 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +1 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +0 -27
- package/dist/esm/Table.d.ts +1 -1
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +4 -162
- package/dist/esm/hooks/useExport.d.ts +15 -0
- package/dist/esm/hooks/useExport.d.ts.map +1 -0
- package/dist/esm/hooks/useExport.js +27 -0
- package/dist/esm/hooks/useQuill.d.ts +1 -1
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/utils/csv.d.ts +6 -0
- package/dist/esm/utils/csv.d.ts.map +1 -0
- package/dist/esm/utils/csv.js +76 -0
- package/dist/esm/utils/valueFormatterCSV.d.ts +1 -1
- package/dist/esm/utils/valueFormatterCSV.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/utils/downloadCSV.d.ts +0 -4
- package/dist/cjs/utils/downloadCSV.d.ts.map +0 -1
- package/dist/cjs/utils/downloadCSV.js +0 -28
- package/dist/esm/utils/downloadCSV.d.ts +0 -4
- package/dist/esm/utils/downloadCSV.d.ts.map +0 -1
- package/dist/esm/utils/downloadCSV.js +0 -24
package/dist/cjs/Chart.d.ts
CHANGED
package/dist/cjs/Chart.d.ts.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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,
|
|
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"}
|
package/dist/cjs/SQLEditor.js
CHANGED
|
@@ -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);
|
package/dist/cjs/Table.d.ts
CHANGED
|
@@ -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,
|
|
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;
|
package/dist/cjs/Table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,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 = (
|
|
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,
|
|
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;
|
|
@@ -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,
|
|
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"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ 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/
|
|
11
|
+
export { downloadCSV } from './utils/csv';
|
|
12
12
|
export type { QuillTheme } from './QuillProvider';
|
|
13
13
|
export { ThemeContext } from './Context';
|
|
14
14
|
export type { TextInputComponentProps, ButtonComponentProps, Option, PopoverComponentProps, ModalComponentProps, TableComponentProps, HeaderProps, } from './components/UiComponents';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,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
|
@@ -26,7 +26,7 @@ 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
|
|
30
|
-
Object.defineProperty(exports, "downloadCSV", { enumerable: true, get: function () { return
|
|
29
|
+
var csv_1 = require("./utils/csv");
|
|
30
|
+
Object.defineProperty(exports, "downloadCSV", { enumerable: true, get: function () { return csv_1.downloadCSV; } });
|
|
31
31
|
var Context_1 = require("./Context");
|
|
32
32
|
Object.defineProperty(exports, "ThemeContext", { enumerable: true, get: function () { return Context_1.ThemeContext; } });
|
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,
|
|
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/dist/esm/Chart.d.ts
CHANGED
package/dist/esm/Chart.d.ts.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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,
|
|
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"}
|
package/dist/esm/SQLEditor.js
CHANGED
|
@@ -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);
|
package/dist/esm/Table.d.ts
CHANGED
|
@@ -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,
|
|
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;
|
package/dist/esm/Table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,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 = (
|
|
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,
|
|
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
|
+
};
|
|
@@ -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,
|
|
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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ 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/
|
|
11
|
+
export { downloadCSV } from './utils/csv';
|
|
12
12
|
export type { QuillTheme } from './QuillProvider';
|
|
13
13
|
export { ThemeContext } from './Context';
|
|
14
14
|
export type { TextInputComponentProps, ButtonComponentProps, Option, PopoverComponentProps, ModalComponentProps, TableComponentProps, HeaderProps, } from './components/UiComponents';
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,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,5 @@ 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/
|
|
12
|
+
export { downloadCSV } from './utils/csv';
|
|
13
13
|
export { ThemeContext } from './Context';
|
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,
|
|
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 +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 +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
|
-
}
|