@stenajs-webui/grid-export 17.13.0 → 17.13.3

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/index.es.js CHANGED
@@ -1,112 +1,98 @@
1
- (function(){ try {var elementStyle = document.createElement('style'); elementStyle.appendChild(document.createTextNode("")); document.head.appendChild(elementStyle);} catch(e) {console.error('vite-plugin-css-injected-by-js', e);} })();import { useCallback, useState } from "react";
2
- import zipcelx from "zipcelx";
3
- import { formatColumnIdToHeaderCellLabel, createGroupConfigAndIdsForRows } from "@stenajs-webui/grid";
4
- import { flatten } from "lodash";
5
- import { format } from "date-fns";
6
- import { FlatButton } from "@stenajs-webui/elements";
7
- import { faFileDownload } from "@fortawesome/free-solid-svg-icons/faFileDownload";
8
- import { jsx } from "react/jsx-runtime";
9
- import * as clipboard from "clipboard-polyfill";
10
- const transformTableHeaders$1 = (config, groupConfigs) => {
11
- return flatten(groupConfigs.map((groupConfig) => groupConfig.columnOrder.map((columnId) => {
12
- var _a;
13
- const columnConfig = config.columns[columnId];
14
- return {
15
- type: "string",
16
- value: (_a = columnConfig.columnLabel) != null ? _a : formatColumnIdToHeaderCellLabel(String(columnId))
17
- };
18
- })));
19
- };
20
- const transformGroupHeaders$1 = (groupConfigs) => {
21
- return flatten(groupConfigs.map((groupConfig) => groupConfig.columnOrder.map((_, index) => {
22
- var _a;
23
- return {
24
- type: "string",
25
- value: index === 0 ? (_a = groupConfig.label) != null ? _a : "" : ""
26
- };
27
- })));
28
- };
29
- const transformItemToCell$1 = (item, itemValueResolver, itemLabelFormatter, formatter) => {
30
- if (formatter) {
31
- return createCell$1(formatter(item));
32
- }
33
- const value = itemValueResolver(item);
34
- if (itemLabelFormatter) {
35
- const label = itemLabelFormatter == null ? void 0 : itemLabelFormatter(value, item);
36
- return createCell$1(label);
37
- }
38
- if (typeof value === "number" || typeof value === "string") {
39
- return createCell$1(value);
40
- }
41
- if (typeof value === "boolean") {
42
- return createCell$1(value ? "Y" : "");
43
- }
44
- if (value instanceof Date) {
45
- return createCell$1(format(value, "yyyy-MM-dd HH:mm"));
46
- }
47
- if (value == null) {
48
- return createCell$1("");
49
- }
50
- return createCell$1(String(value));
51
- };
52
- const createCell$1 = (value) => {
53
- const type = typeof value === "number" ? "number" : "string";
54
- return {
55
- type,
56
- value
57
- };
58
- };
59
- const transformTableRow$1 = (item, config, groupConfigs, formatters) => {
60
- return flatten(groupConfigs.map((groupConfig) => groupConfig.columnOrder.map((columnId) => transformCell$1(item, columnId, config, formatters))));
61
- };
62
- const transformCell$1 = (item, columnId, config, formatters) => {
63
- const columnConfig = config.columns[columnId];
64
- const formatter = formatters == null ? void 0 : formatters[columnId];
65
- return transformItemToCell$1(item, columnConfig.itemValueResolver, columnConfig.itemLabelFormatter, formatter);
66
- };
67
- const createZipcelxConfig = (filename, config, items, formatters) => {
68
- const groupConfigsAndIds = createGroupConfigAndIdsForRows("columnGroups" in config ? config.columnGroups : void 0, "columnGroupOrder" in config ? config.columnGroupOrder : void 0, "columnOrder" in config ? config.columnOrder : void 0);
69
- const headerRows = [];
70
- const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);
71
- if ("columnGroups" in config) {
72
- headerRows.push(transformGroupHeaders$1(groupConfigs));
73
- }
74
- headerRows.push(transformTableHeaders$1(config, groupConfigs));
75
- return {
76
- filename,
1
+ (function(){"use strict";try{var e=document.createElement("style");e.appendChild(document.createTextNode("")),document.head.appendChild(e)}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
+ import { useCallback as y, useState as w } from "react";
3
+ import T from "zipcelx";
4
+ import { formatColumnIdToHeaderCellLabel as m, createGroupConfigAndIdsForRows as b } from "@stenajs-webui/grid";
5
+ import { flatten as d } from "lodash";
6
+ import { format as h } from "date-fns";
7
+ import { FlatButton as x } from "@stenajs-webui/elements";
8
+ import { faFileDownload as H } from "@fortawesome/free-solid-svg-icons/faFileDownload";
9
+ import { jsx as C } from "react/jsx-runtime";
10
+ import * as f from "clipboard-polyfill";
11
+ const O = (r, o) => d(
12
+ o.map(
13
+ (e) => e.columnOrder.map((t) => {
14
+ var l;
15
+ const n = r.columns[t];
16
+ return {
17
+ type: "string",
18
+ value: (l = n.columnLabel) != null ? l : m(String(t))
19
+ };
20
+ })
21
+ )
22
+ ), G = (r) => d(
23
+ r.map(
24
+ (o) => o.columnOrder.map((e, t) => {
25
+ var n;
26
+ return {
27
+ type: "string",
28
+ value: t === 0 && (n = o.label) != null ? n : ""
29
+ };
30
+ })
31
+ )
32
+ ), S = (r, o, e, t) => {
33
+ if (t)
34
+ return c(t(r));
35
+ const n = o(r);
36
+ if (e) {
37
+ const l = e == null ? void 0 : e(n, r);
38
+ return c(l);
39
+ }
40
+ return typeof n == "number" || typeof n == "string" ? c(n) : typeof n == "boolean" ? c(n ? "Y" : "") : n instanceof Date ? c(h(n, "yyyy-MM-dd HH:mm")) : n == null ? c("") : c(String(n));
41
+ }, c = (r) => ({
42
+ type: typeof r == "number" ? "number" : "string",
43
+ value: r
44
+ }), v = (r, o, e, t) => d(
45
+ e.map(
46
+ (n) => n.columnOrder.map(
47
+ (l) => E(r, l, o, t)
48
+ )
49
+ )
50
+ ), E = (r, o, e, t) => {
51
+ const n = e.columns[o], l = t == null ? void 0 : t[o];
52
+ return S(
53
+ r,
54
+ n.itemValueResolver,
55
+ n.itemLabelFormatter,
56
+ l
57
+ );
58
+ }, R = (r, o, e, t) => {
59
+ const n = b(
60
+ "columnGroups" in o ? o.columnGroups : void 0,
61
+ "columnGroupOrder" in o ? o.columnGroupOrder : void 0,
62
+ "columnOrder" in o ? o.columnOrder : void 0
63
+ ), l = [], a = n.map((s) => s.groupConfig);
64
+ return "columnGroups" in o && l.push(G(a)), l.push(O(o, a)), {
65
+ filename: r,
77
66
  sheet: {
78
67
  data: [
79
- ...headerRows,
80
- ...items.map((item) => transformTableRow$1(item, config, groupConfigs, formatters))
68
+ ...l,
69
+ ...e.map(
70
+ (s) => v(s, o, a, t)
71
+ )
81
72
  ]
82
73
  }
83
74
  };
84
- };
85
- const downloadExcelForStandardTable = async (filename, config, items, formatters) => {
86
- const excelConfig = createZipcelxConfig(filename, config, items, formatters);
87
- await zipcelx(excelConfig);
88
- };
89
- const StandardTableExcelExportButton = function StandardTableExcelExportButton2({
90
- config,
91
- size,
92
- items,
93
- filename = "exported-spreadsheet",
94
- formatters
75
+ }, k = async (r, o, e, t) => {
76
+ const n = R(r, o, e, t);
77
+ await T(n);
78
+ }, U = function({
79
+ config: o,
80
+ size: e,
81
+ items: t,
82
+ filename: n = "exported-spreadsheet",
83
+ formatters: l
95
84
  }) {
96
- const onClickExportExcel = useCallback(async () => {
97
- if (items && items.length) {
98
- await downloadExcelForStandardTable(filename, config, items, formatters);
99
- }
100
- }, [config, items, filename, formatters]);
101
- return /* @__PURE__ */ jsx(FlatButton, {
102
- size,
103
- leftIcon: faFileDownload,
104
- onClick: onClickExportExcel,
105
- disabled: !items || !items.length
85
+ const a = y(async () => {
86
+ t && t.length && await k(n, o, t, l);
87
+ }, [o, t, n, l]);
88
+ return /* @__PURE__ */ C(x, {
89
+ size: e,
90
+ leftIcon: H,
91
+ onClick: a,
92
+ disabled: !t || !t.length
106
93
  });
107
- };
108
- const transformJustifyContentToTextAlign = (justifyContent) => {
109
- switch (justifyContent == null ? void 0 : justifyContent.toLowerCase()) {
94
+ }, g = (r) => {
95
+ switch (r == null ? void 0 : r.toLowerCase()) {
110
96
  case "left":
111
97
  case "start":
112
98
  case "flex-start":
@@ -118,117 +104,101 @@ const transformJustifyContentToTextAlign = (justifyContent) => {
118
104
  case "center":
119
105
  return "text-align: center";
120
106
  default:
121
- return void 0;
122
- }
123
- };
124
- const transformTableHeaders = (config, groupConfigs) => {
125
- return flatten(groupConfigs.map((groupConfig) => groupConfig.columnOrder.map((columnId) => {
126
- var _a, _b;
127
- const columnConfig = config.columns[columnId];
128
- if (columnConfig.justifyContentHeader) {
129
- const styleProperty = transformJustifyContentToTextAlign(columnConfig.justifyContentHeader);
130
- return `<th${styleProperty ? ' style="' + styleProperty + '"' : ""}>${(_a = columnConfig.columnLabel) != null ? _a : formatColumnIdToHeaderCellLabel(String(columnId))}</th>`;
131
- }
132
- return `<th>${(_b = columnConfig.columnLabel) != null ? _b : formatColumnIdToHeaderCellLabel(String(columnId))}</th>`;
133
- })));
134
- };
135
- const transformGroupHeaders = (groupConfigs) => {
136
- return flatten(groupConfigs.map((groupConfig) => {
137
- var _a;
138
- return `<th style="text-align: left" colspan="${groupConfig.columnOrder.length}">${(_a = groupConfig.label) != null ? _a : ""}</th>`;
139
- }));
140
- };
141
- const transformItemToCell = (item, itemValueResolver, justifyContentCell, itemLabelFormatter, formatter) => {
142
- if (formatter) {
143
- return createCell(formatter(item), justifyContentCell);
144
- }
145
- const value = itemValueResolver(item);
146
- if (itemLabelFormatter) {
147
- const label = itemLabelFormatter == null ? void 0 : itemLabelFormatter(value, item);
148
- return createCell(label, justifyContentCell);
149
- }
150
- if (typeof value === "number" || typeof value === "string") {
151
- return createCell(value, justifyContentCell);
152
- }
153
- if (typeof value === "boolean") {
154
- return createCell(value ? "Y" : "", justifyContentCell);
155
- }
156
- if (value instanceof Date) {
157
- return createCell(format(value, "yyyy-MM-dd HH:mm"), justifyContentCell);
158
- }
159
- if (value == null) {
160
- return createCell("", justifyContentCell);
161
- }
162
- return createCell(String(value), justifyContentCell);
163
- };
164
- const createCell = (value, justifyContentCell) => {
165
- if (justifyContentCell) {
166
- const styleProperty = transformJustifyContentToTextAlign(justifyContentCell);
167
- return `<td${styleProperty ? ' style="' + styleProperty + '"' : ""}>${value}</td>`;
168
- }
169
- return `<td>${value}</td>`;
170
- };
171
- const transformTableRow = (item, config, groupConfigs, formatters) => {
172
- return flatten(groupConfigs.map((groupConfig) => groupConfig.columnOrder.map((columnId) => transformCell(item, columnId, config, formatters)))).join("");
173
- };
174
- const transformCell = (item, columnId, config, formatters) => {
175
- const columnConfig = config.columns[columnId];
176
- const formatter = formatters == null ? void 0 : formatters[columnId];
177
- return transformItemToCell(item, columnConfig.itemValueResolver, columnConfig.justifyContentCell, columnConfig.itemLabelFormatter, formatter);
178
- };
179
- const createHtmlConfig = (config, items, formatters) => {
180
- const groupConfigsAndIds = createGroupConfigAndIdsForRows("columnGroups" in config ? config.columnGroups : void 0, "columnGroupOrder" in config ? config.columnGroupOrder : void 0, "columnOrder" in config ? config.columnOrder : void 0);
181
- const headerRows = [];
182
- const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);
183
- if ("columnGroups" in config) {
184
- headerRows.push(transformGroupHeaders(groupConfigs).join(""));
185
- }
186
- headerRows.push(transformTableHeaders(config, groupConfigs).join(""));
187
- const header = `<thead>${headerRows.map((headerRow) => `<tr>${headerRow}</tr>`).join("")}</thead>`;
188
- const tbodyRows = items.map((item) => transformTableRow(item, config, groupConfigs, formatters)).map((row) => `<tr>${row}</tr>`);
189
- const body = `<tbody>${tbodyRows.join("")}</tbody>`;
190
- return `<table>${header}${body}</table>`;
191
- };
192
- const renderHtmlForStandardTable = (config, items, formatters) => {
193
- return createHtmlConfig(config, items, formatters);
194
- };
195
- async function copyContentToClipboard(items, config, formatters, renderContent) {
196
- let htmlToCopy = "";
197
- if (items && items.length) {
198
- htmlToCopy = renderHtmlForStandardTable(config, items, formatters);
199
- }
200
- if (renderContent) {
201
- htmlToCopy = renderContent(htmlToCopy);
202
- }
203
- if (htmlToCopy) {
204
- const item = new clipboard.ClipboardItem({
205
- "text/html": new Blob([htmlToCopy], { type: "text/html" })
107
+ return;
108
+ }
109
+ }, B = (r, o) => d(
110
+ o.map(
111
+ (e) => e.columnOrder.map((t) => {
112
+ var l, a;
113
+ const n = r.columns[t];
114
+ if (n.justifyContentHeader) {
115
+ const s = g(
116
+ n.justifyContentHeader
117
+ );
118
+ return `<th${s ? ' style="' + s + '"' : ""}>${(l = n.columnLabel) != null ? l : m(String(t))}</th>`;
119
+ }
120
+ return `<th>${(a = n.columnLabel) != null ? a : m(String(t))}</th>`;
121
+ })
122
+ )
123
+ ), A = (r) => d(
124
+ r.map((o) => {
125
+ var e;
126
+ return `<th style="text-align: left" colspan="${o.columnOrder.length}">${(e = o.label) != null ? e : ""}</th>`;
127
+ })
128
+ ), M = (r, o, e, t, n) => {
129
+ if (n)
130
+ return p(n(r), e);
131
+ const l = o(r);
132
+ if (t) {
133
+ const a = t == null ? void 0 : t(l, r);
134
+ return p(a, e);
135
+ }
136
+ return typeof l == "number" || typeof l == "string" ? p(l, e) : typeof l == "boolean" ? p(l ? "Y" : "", e) : l instanceof Date ? p(h(l, "yyyy-MM-dd HH:mm"), e) : l == null ? p("", e) : p(String(l), e);
137
+ }, p = (r, o) => {
138
+ if (o) {
139
+ const e = g(o);
140
+ return `<td${e ? ' style="' + e + '"' : ""}>${r}</td>`;
141
+ }
142
+ return `<td>${r}</td>`;
143
+ }, D = (r, o, e, t) => d(
144
+ e.map(
145
+ (n) => n.columnOrder.map(
146
+ (l) => I(r, l, o, t)
147
+ )
148
+ )
149
+ ).join(""), I = (r, o, e, t) => {
150
+ const n = e.columns[o], l = t == null ? void 0 : t[o];
151
+ return M(
152
+ r,
153
+ n.itemValueResolver,
154
+ n.justifyContentCell,
155
+ n.itemLabelFormatter,
156
+ l
157
+ );
158
+ }, P = (r, o, e) => {
159
+ const t = b(
160
+ "columnGroups" in r ? r.columnGroups : void 0,
161
+ "columnGroupOrder" in r ? r.columnGroupOrder : void 0,
162
+ "columnOrder" in r ? r.columnOrder : void 0
163
+ ), n = [], l = t.map((u) => u.groupConfig);
164
+ "columnGroups" in r && n.push(A(l).join("")), n.push(B(r, l).join(""));
165
+ const a = `<thead>${n.map((u) => `<tr>${u}</tr>`).join("")}</thead>`, i = `<tbody>${o.map((u) => D(u, r, l, e)).map((u) => `<tr>${u}</tr>`).join("")}</tbody>`;
166
+ return `<table>${a}${i}</table>`;
167
+ }, V = (r, o, e) => P(r, o, e);
168
+ async function Y(r, o, e, t) {
169
+ let n = "";
170
+ if (r && r.length && (n = V(o, r, e)), t && (n = t(n)), n) {
171
+ const l = new f.ClipboardItem({
172
+ "text/html": new Blob([n], { type: "text/html" })
206
173
  });
207
- await clipboard.write([item]);
174
+ await f.write([l]);
208
175
  }
209
176
  }
210
- function StandardTableHtmlCopyToClipboardButton({
211
- config,
212
- renderContent,
213
- size,
214
- items,
215
- formatters,
216
- label = "Copy to clipboard",
217
- labelAfterCopy = "Content copied!",
218
- numTimeToRevertLabel = 2e3
177
+ function W({
178
+ config: r,
179
+ renderContent: o,
180
+ size: e,
181
+ items: t,
182
+ formatters: n,
183
+ label: l = "Copy to clipboard",
184
+ labelAfterCopy: a = "Content copied!",
185
+ numTimeToRevertLabel: s = 2e3
219
186
  }) {
220
- const [contentCopied, setContentCopied] = useState(false);
221
- const onClickExportHtml = useCallback(async () => {
222
- await copyContentToClipboard(items, config, formatters, renderContent);
223
- setContentCopied(true);
224
- setTimeout(() => setContentCopied(false), numTimeToRevertLabel);
225
- }, [config, items, formatters, numTimeToRevertLabel, renderContent]);
226
- return /* @__PURE__ */ jsx(FlatButton, {
227
- size,
228
- onClick: onClickExportHtml,
229
- disabled: !items || !items.length,
230
- label: contentCopied ? labelAfterCopy : label
187
+ const [i, u] = w(!1), $ = y(async () => {
188
+ await Y(t, r, n, o), u(!0), setTimeout(() => u(!1), s);
189
+ }, [r, t, n, s, o]);
190
+ return /* @__PURE__ */ C(x, {
191
+ size: e,
192
+ onClick: $,
193
+ disabled: !t || !t.length,
194
+ label: i ? a : l
231
195
  });
232
196
  }
233
- export { StandardTableExcelExportButton, StandardTableHtmlCopyToClipboardButton, createHtmlConfig, createZipcelxConfig, downloadExcelForStandardTable };
197
+ export {
198
+ U as StandardTableExcelExportButton,
199
+ W as StandardTableHtmlCopyToClipboardButton,
200
+ P as createHtmlConfig,
201
+ R as createZipcelxConfig,
202
+ k as downloadExcelForStandardTable
203
+ };
234
204
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/features/grid-excel-export/transformers/HeaderTransformer.ts","../src/features/grid-excel-export/transformers/CellTransformer.ts","../src/features/grid-excel-export/transformers/RowTransformer.ts","../src/features/grid-excel-export/transformers/ConfigTransformer.ts","../src/features/grid-excel-export/util/ExcelDownloader.ts","../src/features/grid-excel-export/components/StandardTableExcelExportButton.tsx","../src/features/grid-copy-to-clipboard/transformers/AlignmentTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/HeaderTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/CellTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/RowTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/ConfigTransformer.ts","../src/features/grid-copy-to-clipboard/util/HtmlRenderer.ts","../src/features/grid-copy-to-clipboard/util/CopyContentToClipboard.ts","../src/features/grid-copy-to-clipboard/components/StandardTableHtmlCopyToClipboardButton.tsx"],"sourcesContent":["import {\n formatColumnIdToHeaderCellLabel,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { ZipCelXRow } from \"zipcelx\";\nimport { StandardTableColumnGroupConfig } from \"@stenajs-webui/grid\";\n\nexport const transformTableHeaders = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((columnId) => {\n const columnConfig = config.columns[columnId];\n return {\n type: \"string\",\n value:\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId)),\n };\n })\n )\n );\n};\n\nexport const transformGroupHeaders = <TColumnKey extends string>(\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((_, index) => {\n return {\n type: \"string\",\n value: index === 0 ? groupConfig.label ?? \"\" : \"\",\n };\n })\n )\n );\n};\n","import { StandardTableColumnConfig } from \"@stenajs-webui/grid\";\nimport { format } from \"date-fns\";\nimport { ZipCelXCell } from \"zipcelx\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\n\nexport const transformItemToCell = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n item: TItem,\n itemValueResolver: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemValueResolver\"],\n itemLabelFormatter:\n | StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemLabelFormatter\"]\n | undefined,\n formatter?: CustomCellFormatter<TItem>\n): ZipCelXCell => {\n if (formatter) {\n return createCell(formatter(item));\n }\n\n const value = itemValueResolver(item);\n\n if (itemLabelFormatter) {\n const label = itemLabelFormatter?.(value, item);\n return createCell(label);\n }\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n return createCell(value);\n }\n\n if (typeof value === \"boolean\") {\n return createCell(value ? \"Y\" : \"\");\n }\n\n if (value instanceof Date) {\n return createCell(format(value, \"yyyy-MM-dd HH:mm\"));\n }\n\n if (value == null) {\n return createCell(\"\");\n }\n\n return createCell(String(value));\n};\n\nconst createCell = (value: string | number): ZipCelXCell => {\n const type = typeof value === \"number\" ? \"number\" : \"string\";\n return {\n type,\n value,\n };\n};\n","import {\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { ZipCelXCell, ZipCelXRow } from \"zipcelx\";\nimport { transformItemToCell } from \"./CellTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const transformTableRow = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map<ZipCelXCell>((columnId) =>\n transformCell(item, columnId, config, formatters)\n )\n )\n );\n};\n\nexport const transformCell = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n columnId: TColumnKey,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXCell => {\n const columnConfig = config.columns[columnId];\n const formatter = formatters?.[columnId];\n return transformItemToCell(\n item,\n columnConfig.itemValueResolver,\n columnConfig.itemLabelFormatter,\n formatter\n );\n};\n","import {\n createGroupConfigAndIdsForRows,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { ZipCelXConfig, ZipCelXRow } from \"zipcelx\";\nimport {\n transformGroupHeaders,\n transformTableHeaders,\n} from \"./HeaderTransformer\";\nimport { transformTableRow } from \"./RowTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const createZipcelxConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n filename: string,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXConfig => {\n const groupConfigsAndIds = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n\n const headerRows: Array<ZipCelXRow> = [];\n const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);\n\n if (\"columnGroups\" in config) {\n headerRows.push(transformGroupHeaders(groupConfigs));\n }\n headerRows.push(transformTableHeaders(config, groupConfigs));\n\n return {\n filename,\n sheet: {\n data: [\n ...headerRows,\n ...items.map<ZipCelXRow>((item) =>\n transformTableRow(item, config, groupConfigs, formatters)\n ),\n ],\n },\n };\n};\n","import { StandardTableConfig } from \"@stenajs-webui/grid\";\nimport zipcelx from \"zipcelx\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\nimport { createZipcelxConfig } from \"../transformers/ConfigTransformer\";\n\nexport const downloadExcelForStandardTable = async <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n filename: string,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n) => {\n const excelConfig = createZipcelxConfig(filename, config, items, formatters);\n await zipcelx(excelConfig);\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { downloadExcelForStandardTable } from \"../util/ExcelDownloader\";\nimport { StandardTableProps } from \"@stenajs-webui/grid\";\nimport { FlatButton, FlatButtonProps } from \"@stenajs-webui/elements\";\nimport { faFileDownload } from \"@fortawesome/free-solid-svg-icons/faFileDownload\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\ninterface StandardTableExcelExportButtonProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Pick<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"config\" | \"items\"\n >,\n Pick<FlatButtonProps, \"size\"> {\n filename?: string;\n formatters?: CustomCellFormatters<TItem, TColumnKey>;\n}\n\nexport const StandardTableExcelExportButton =\n function StandardTableExcelExportButton<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n >({\n config,\n size,\n items,\n filename = \"exported-spreadsheet\",\n formatters,\n }: StandardTableExcelExportButtonProps<TItem, TColumnKey, TColumnGroupKey>) {\n const onClickExportExcel = useCallback(async () => {\n if (items && items.length) {\n await downloadExcelForStandardTable(\n filename,\n config,\n items,\n formatters\n );\n }\n }, [config, items, filename, formatters]);\n\n return (\n <FlatButton\n size={size}\n leftIcon={faFileDownload}\n onClick={onClickExportExcel}\n disabled={!items || !items.length}\n />\n );\n };\n","export const transformJustifyContentToTextAlign = (\n justifyContent: string | undefined\n): string | undefined => {\n switch (justifyContent?.toLowerCase()) {\n case \"left\":\n case \"start\":\n case \"flex-start\":\n return \"text-align: left\";\n case \"right\":\n case \"end\":\n case \"flex-end\":\n return \"text-align: right\";\n case \"center\":\n return \"text-align: center\";\n default:\n return undefined;\n }\n};\n","import {\n formatColumnIdToHeaderCellLabel,\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { transformJustifyContentToTextAlign } from \"./AlignmentTransformer\";\n\nexport const transformTableHeaders = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): string[] => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((columnId) => {\n const columnConfig = config.columns[columnId];\n\n if (columnConfig.justifyContentHeader) {\n const styleProperty = transformJustifyContentToTextAlign(\n columnConfig.justifyContentHeader\n );\n return `<th${styleProperty ? ' style=\"' + styleProperty + '\"' : \"\"}>${\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId))\n }</th>`;\n }\n return `<th>${\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId))\n }</th>`;\n })\n )\n );\n};\n\nexport const transformGroupHeaders = <TColumnKey extends string>(\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): string[] => {\n return flatten(\n groupConfigs.map((groupConfig) => {\n return `<th style=\"text-align: left\" colspan=\"${\n groupConfig.columnOrder.length\n }\">${groupConfig.label ?? \"\"}</th>`;\n })\n );\n};\n","import { StandardTableColumnConfig } from \"@stenajs-webui/grid\";\nimport { format } from \"date-fns\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\nimport { transformJustifyContentToTextAlign } from \"./AlignmentTransformer\";\n\nexport const transformItemToCell = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n item: TItem,\n itemValueResolver: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemValueResolver\"],\n justifyContentCell: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"justifyContentCell\"],\n itemLabelFormatter:\n | StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemLabelFormatter\"]\n | undefined,\n formatter?: CustomCellFormatter<TItem>\n): string => {\n if (formatter) {\n return createCell(formatter(item), justifyContentCell);\n }\n\n const value = itemValueResolver(item);\n\n if (itemLabelFormatter) {\n const label = itemLabelFormatter?.(value, item);\n return createCell(label, justifyContentCell);\n }\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n return createCell(value, justifyContentCell);\n }\n\n if (typeof value === \"boolean\") {\n return createCell(value ? \"Y\" : \"\", justifyContentCell);\n }\n\n if (value instanceof Date) {\n return createCell(format(value, \"yyyy-MM-dd HH:mm\"), justifyContentCell);\n }\n\n if (value == null) {\n return createCell(\"\", justifyContentCell);\n }\n\n return createCell(String(value), justifyContentCell);\n};\n\nconst createCell = (\n value: string | number,\n justifyContentCell: string | undefined\n): string => {\n if (justifyContentCell) {\n const styleProperty =\n transformJustifyContentToTextAlign(justifyContentCell);\n return `<td${\n styleProperty ? ' style=\"' + styleProperty + '\"' : \"\"\n }>${value}</td>`;\n }\n return `<td>${value}</td>`;\n};\n","import {\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { transformItemToCell } from \"./CellTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const transformTableRow = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map<string>((columnId) =>\n transformCell(item, columnId, config, formatters)\n )\n )\n ).join(\"\");\n};\n\nexport const transformCell = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n columnId: TColumnKey,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n const columnConfig = config.columns[columnId];\n const formatter = formatters?.[columnId];\n return transformItemToCell(\n item,\n columnConfig.itemValueResolver,\n columnConfig.justifyContentCell,\n columnConfig.itemLabelFormatter,\n formatter\n );\n};\n","import {\n createGroupConfigAndIdsForRows,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport {\n transformGroupHeaders,\n transformTableHeaders,\n} from \"./HeaderTransformer\";\nimport { transformTableRow } from \"./RowTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const createHtmlConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n const groupConfigsAndIds = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n\n const headerRows: Array<string> = [];\n const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);\n\n if (\"columnGroups\" in config) {\n headerRows.push(transformGroupHeaders(groupConfigs).join(\"\"));\n }\n headerRows.push(transformTableHeaders(config, groupConfigs).join(\"\"));\n const header = `<thead>${headerRows\n .map((headerRow) => `<tr>${headerRow}</tr>`)\n .join(\"\")}</thead>`;\n\n const tbodyRows = items\n .map((item) => transformTableRow(item, config, groupConfigs, formatters))\n .map((row) => `<tr>${row}</tr>`);\n\n const body = `<tbody>${tbodyRows.join(\"\")}</tbody>`;\n return `<table>${header}${body}</table>`;\n};\n","import { StandardTableConfig } from \"@stenajs-webui/grid\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\nimport { createHtmlConfig } from \"../transformers/ConfigTransformer\";\n\nexport const renderHtmlForStandardTable = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n) => {\n return createHtmlConfig(config, items, formatters);\n};\n","import { renderHtmlForStandardTable } from \"./HtmlRenderer\";\nimport * as clipboard from \"clipboard-polyfill\";\nimport { StandardTableConfig } from \"@stenajs-webui/grid/dist/features/standard-table/config/StandardTableConfig\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\n\nexport async function copyContentToClipboard<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n items: TItem[] | undefined,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?:\n | Partial<Record<TColumnKey, CustomCellFormatter<TItem>>>\n | undefined,\n renderContent?: (content: string) => string | null\n) {\n let htmlToCopy: string | null = \"\";\n\n if (items && items.length) {\n htmlToCopy = renderHtmlForStandardTable(config, items, formatters);\n }\n\n if (renderContent) {\n htmlToCopy = renderContent(htmlToCopy);\n }\n if (htmlToCopy) {\n const item = new clipboard.ClipboardItem({\n \"text/html\": new Blob([htmlToCopy], { type: \"text/html\" }),\n });\n\n await clipboard.write([item]);\n }\n}\n","import * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { StandardTableProps } from \"@stenajs-webui/grid\";\nimport { FlatButton, FlatButtonProps } from \"@stenajs-webui/elements\";\nimport { copyContentToClipboard } from \"../util/CopyContentToClipboard\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport interface StandardTableHtmlCopyToClipboardButtonProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Pick<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"config\" | \"items\"\n >,\n Pick<FlatButtonProps, \"size\"> {\n formatters?: CustomCellFormatters<TItem, TColumnKey>;\n renderContent?: (content: string) => string | null;\n label?: string;\n labelAfterCopy?: string;\n numTimeToRevertLabel?: number;\n}\n\nexport function StandardTableHtmlCopyToClipboardButton<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>({\n config,\n renderContent,\n size,\n items,\n formatters,\n label = \"Copy to clipboard\",\n labelAfterCopy = \"Content copied!\",\n numTimeToRevertLabel = 2000,\n}: StandardTableHtmlCopyToClipboardButtonProps<\n TItem,\n TColumnKey,\n TColumnGroupKey\n>) {\n const [contentCopied, setContentCopied] = useState<boolean>(false);\n const onClickExportHtml = useCallback(async () => {\n await copyContentToClipboard(items, config, formatters, renderContent);\n\n setContentCopied(true);\n setTimeout(() => setContentCopied(false), numTimeToRevertLabel);\n }, [config, items, formatters, numTimeToRevertLabel, renderContent]);\n\n return (\n <FlatButton\n size={size}\n onClick={onClickExportHtml}\n disabled={!items || !items.length}\n label={contentCopied ? labelAfterCopy : label}\n />\n );\n}\n"],"names":["transformTableHeaders","transformGroupHeaders","transformItemToCell","createCell","transformTableRow","transformCell","StandardTableExcelExportButton","config","size","items","filename","formatters","onClickExportExcel","useCallback","length","downloadExcelForStandardTable","faFileDownload","renderContent","label","labelAfterCopy","numTimeToRevertLabel","contentCopied","setContentCopied","useState","onClickExportHtml","copyContentToClipboard","setTimeout"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/features/grid-excel-export/transformers/HeaderTransformer.ts","../src/features/grid-excel-export/transformers/CellTransformer.ts","../src/features/grid-excel-export/transformers/RowTransformer.ts","../src/features/grid-excel-export/transformers/ConfigTransformer.ts","../src/features/grid-excel-export/util/ExcelDownloader.ts","../src/features/grid-excel-export/components/StandardTableExcelExportButton.tsx","../src/features/grid-copy-to-clipboard/transformers/AlignmentTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/HeaderTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/CellTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/RowTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/ConfigTransformer.ts","../src/features/grid-copy-to-clipboard/util/HtmlRenderer.ts","../src/features/grid-copy-to-clipboard/util/CopyContentToClipboard.ts","../src/features/grid-copy-to-clipboard/components/StandardTableHtmlCopyToClipboardButton.tsx"],"sourcesContent":["import {\n formatColumnIdToHeaderCellLabel,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { ZipCelXRow } from \"zipcelx\";\nimport { StandardTableColumnGroupConfig } from \"@stenajs-webui/grid\";\n\nexport const transformTableHeaders = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((columnId) => {\n const columnConfig = config.columns[columnId];\n return {\n type: \"string\",\n value:\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId)),\n };\n })\n )\n );\n};\n\nexport const transformGroupHeaders = <TColumnKey extends string>(\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((_, index) => {\n return {\n type: \"string\",\n value: index === 0 ? groupConfig.label ?? \"\" : \"\",\n };\n })\n )\n );\n};\n","import { StandardTableColumnConfig } from \"@stenajs-webui/grid\";\nimport { format } from \"date-fns\";\nimport { ZipCelXCell } from \"zipcelx\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\n\nexport const transformItemToCell = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n item: TItem,\n itemValueResolver: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemValueResolver\"],\n itemLabelFormatter:\n | StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemLabelFormatter\"]\n | undefined,\n formatter?: CustomCellFormatter<TItem>\n): ZipCelXCell => {\n if (formatter) {\n return createCell(formatter(item));\n }\n\n const value = itemValueResolver(item);\n\n if (itemLabelFormatter) {\n const label = itemLabelFormatter?.(value, item);\n return createCell(label);\n }\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n return createCell(value);\n }\n\n if (typeof value === \"boolean\") {\n return createCell(value ? \"Y\" : \"\");\n }\n\n if (value instanceof Date) {\n return createCell(format(value, \"yyyy-MM-dd HH:mm\"));\n }\n\n if (value == null) {\n return createCell(\"\");\n }\n\n return createCell(String(value));\n};\n\nconst createCell = (value: string | number): ZipCelXCell => {\n const type = typeof value === \"number\" ? \"number\" : \"string\";\n return {\n type,\n value,\n };\n};\n","import {\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { ZipCelXCell, ZipCelXRow } from \"zipcelx\";\nimport { transformItemToCell } from \"./CellTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const transformTableRow = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map<ZipCelXCell>((columnId) =>\n transformCell(item, columnId, config, formatters)\n )\n )\n );\n};\n\nexport const transformCell = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n columnId: TColumnKey,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXCell => {\n const columnConfig = config.columns[columnId];\n const formatter = formatters?.[columnId];\n return transformItemToCell(\n item,\n columnConfig.itemValueResolver,\n columnConfig.itemLabelFormatter,\n formatter\n );\n};\n","import {\n createGroupConfigAndIdsForRows,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { ZipCelXConfig, ZipCelXRow } from \"zipcelx\";\nimport {\n transformGroupHeaders,\n transformTableHeaders,\n} from \"./HeaderTransformer\";\nimport { transformTableRow } from \"./RowTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const createZipcelxConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n filename: string,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXConfig => {\n const groupConfigsAndIds = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n\n const headerRows: Array<ZipCelXRow> = [];\n const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);\n\n if (\"columnGroups\" in config) {\n headerRows.push(transformGroupHeaders(groupConfigs));\n }\n headerRows.push(transformTableHeaders(config, groupConfigs));\n\n return {\n filename,\n sheet: {\n data: [\n ...headerRows,\n ...items.map<ZipCelXRow>((item) =>\n transformTableRow(item, config, groupConfigs, formatters)\n ),\n ],\n },\n };\n};\n","import { StandardTableConfig } from \"@stenajs-webui/grid\";\nimport zipcelx from \"zipcelx\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\nimport { createZipcelxConfig } from \"../transformers/ConfigTransformer\";\n\nexport const downloadExcelForStandardTable = async <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n filename: string,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n) => {\n const excelConfig = createZipcelxConfig(filename, config, items, formatters);\n await zipcelx(excelConfig);\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { downloadExcelForStandardTable } from \"../util/ExcelDownloader\";\nimport { StandardTableProps } from \"@stenajs-webui/grid\";\nimport { FlatButton, FlatButtonProps } from \"@stenajs-webui/elements\";\nimport { faFileDownload } from \"@fortawesome/free-solid-svg-icons/faFileDownload\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\ninterface StandardTableExcelExportButtonProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Pick<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"config\" | \"items\"\n >,\n Pick<FlatButtonProps, \"size\"> {\n filename?: string;\n formatters?: CustomCellFormatters<TItem, TColumnKey>;\n}\n\nexport const StandardTableExcelExportButton =\n function StandardTableExcelExportButton<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n >({\n config,\n size,\n items,\n filename = \"exported-spreadsheet\",\n formatters,\n }: StandardTableExcelExportButtonProps<TItem, TColumnKey, TColumnGroupKey>) {\n const onClickExportExcel = useCallback(async () => {\n if (items && items.length) {\n await downloadExcelForStandardTable(\n filename,\n config,\n items,\n formatters\n );\n }\n }, [config, items, filename, formatters]);\n\n return (\n <FlatButton\n size={size}\n leftIcon={faFileDownload}\n onClick={onClickExportExcel}\n disabled={!items || !items.length}\n />\n );\n };\n","export const transformJustifyContentToTextAlign = (\n justifyContent: string | undefined\n): string | undefined => {\n switch (justifyContent?.toLowerCase()) {\n case \"left\":\n case \"start\":\n case \"flex-start\":\n return \"text-align: left\";\n case \"right\":\n case \"end\":\n case \"flex-end\":\n return \"text-align: right\";\n case \"center\":\n return \"text-align: center\";\n default:\n return undefined;\n }\n};\n","import {\n formatColumnIdToHeaderCellLabel,\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { transformJustifyContentToTextAlign } from \"./AlignmentTransformer\";\n\nexport const transformTableHeaders = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): string[] => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((columnId) => {\n const columnConfig = config.columns[columnId];\n\n if (columnConfig.justifyContentHeader) {\n const styleProperty = transformJustifyContentToTextAlign(\n columnConfig.justifyContentHeader\n );\n return `<th${styleProperty ? ' style=\"' + styleProperty + '\"' : \"\"}>${\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId))\n }</th>`;\n }\n return `<th>${\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId))\n }</th>`;\n })\n )\n );\n};\n\nexport const transformGroupHeaders = <TColumnKey extends string>(\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): string[] => {\n return flatten(\n groupConfigs.map((groupConfig) => {\n return `<th style=\"text-align: left\" colspan=\"${\n groupConfig.columnOrder.length\n }\">${groupConfig.label ?? \"\"}</th>`;\n })\n );\n};\n","import { StandardTableColumnConfig } from \"@stenajs-webui/grid\";\nimport { format } from \"date-fns\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\nimport { transformJustifyContentToTextAlign } from \"./AlignmentTransformer\";\n\nexport const transformItemToCell = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n item: TItem,\n itemValueResolver: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemValueResolver\"],\n justifyContentCell: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"justifyContentCell\"],\n itemLabelFormatter:\n | StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemLabelFormatter\"]\n | undefined,\n formatter?: CustomCellFormatter<TItem>\n): string => {\n if (formatter) {\n return createCell(formatter(item), justifyContentCell);\n }\n\n const value = itemValueResolver(item);\n\n if (itemLabelFormatter) {\n const label = itemLabelFormatter?.(value, item);\n return createCell(label, justifyContentCell);\n }\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n return createCell(value, justifyContentCell);\n }\n\n if (typeof value === \"boolean\") {\n return createCell(value ? \"Y\" : \"\", justifyContentCell);\n }\n\n if (value instanceof Date) {\n return createCell(format(value, \"yyyy-MM-dd HH:mm\"), justifyContentCell);\n }\n\n if (value == null) {\n return createCell(\"\", justifyContentCell);\n }\n\n return createCell(String(value), justifyContentCell);\n};\n\nconst createCell = (\n value: string | number,\n justifyContentCell: string | undefined\n): string => {\n if (justifyContentCell) {\n const styleProperty =\n transformJustifyContentToTextAlign(justifyContentCell);\n return `<td${\n styleProperty ? ' style=\"' + styleProperty + '\"' : \"\"\n }>${value}</td>`;\n }\n return `<td>${value}</td>`;\n};\n","import {\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { transformItemToCell } from \"./CellTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const transformTableRow = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map<string>((columnId) =>\n transformCell(item, columnId, config, formatters)\n )\n )\n ).join(\"\");\n};\n\nexport const transformCell = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n columnId: TColumnKey,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n const columnConfig = config.columns[columnId];\n const formatter = formatters?.[columnId];\n return transformItemToCell(\n item,\n columnConfig.itemValueResolver,\n columnConfig.justifyContentCell,\n columnConfig.itemLabelFormatter,\n formatter\n );\n};\n","import {\n createGroupConfigAndIdsForRows,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport {\n transformGroupHeaders,\n transformTableHeaders,\n} from \"./HeaderTransformer\";\nimport { transformTableRow } from \"./RowTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const createHtmlConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n const groupConfigsAndIds = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n\n const headerRows: Array<string> = [];\n const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);\n\n if (\"columnGroups\" in config) {\n headerRows.push(transformGroupHeaders(groupConfigs).join(\"\"));\n }\n headerRows.push(transformTableHeaders(config, groupConfigs).join(\"\"));\n const header = `<thead>${headerRows\n .map((headerRow) => `<tr>${headerRow}</tr>`)\n .join(\"\")}</thead>`;\n\n const tbodyRows = items\n .map((item) => transformTableRow(item, config, groupConfigs, formatters))\n .map((row) => `<tr>${row}</tr>`);\n\n const body = `<tbody>${tbodyRows.join(\"\")}</tbody>`;\n return `<table>${header}${body}</table>`;\n};\n","import { StandardTableConfig } from \"@stenajs-webui/grid\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\nimport { createHtmlConfig } from \"../transformers/ConfigTransformer\";\n\nexport const renderHtmlForStandardTable = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n) => {\n return createHtmlConfig(config, items, formatters);\n};\n","import { renderHtmlForStandardTable } from \"./HtmlRenderer\";\nimport * as clipboard from \"clipboard-polyfill\";\nimport { StandardTableConfig } from \"@stenajs-webui/grid/dist/features/standard-table/config/StandardTableConfig\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\n\nexport async function copyContentToClipboard<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n items: TItem[] | undefined,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?:\n | Partial<Record<TColumnKey, CustomCellFormatter<TItem>>>\n | undefined,\n renderContent?: (content: string) => string | null\n) {\n let htmlToCopy: string | null = \"\";\n\n if (items && items.length) {\n htmlToCopy = renderHtmlForStandardTable(config, items, formatters);\n }\n\n if (renderContent) {\n htmlToCopy = renderContent(htmlToCopy);\n }\n if (htmlToCopy) {\n const item = new clipboard.ClipboardItem({\n \"text/html\": new Blob([htmlToCopy], { type: \"text/html\" }),\n });\n\n await clipboard.write([item]);\n }\n}\n","import * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { StandardTableProps } from \"@stenajs-webui/grid\";\nimport { FlatButton, FlatButtonProps } from \"@stenajs-webui/elements\";\nimport { copyContentToClipboard } from \"../util/CopyContentToClipboard\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport interface StandardTableHtmlCopyToClipboardButtonProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Pick<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"config\" | \"items\"\n >,\n Pick<FlatButtonProps, \"size\"> {\n formatters?: CustomCellFormatters<TItem, TColumnKey>;\n renderContent?: (content: string) => string | null;\n label?: string;\n labelAfterCopy?: string;\n numTimeToRevertLabel?: number;\n}\n\nexport function StandardTableHtmlCopyToClipboardButton<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>({\n config,\n renderContent,\n size,\n items,\n formatters,\n label = \"Copy to clipboard\",\n labelAfterCopy = \"Content copied!\",\n numTimeToRevertLabel = 2000,\n}: StandardTableHtmlCopyToClipboardButtonProps<\n TItem,\n TColumnKey,\n TColumnGroupKey\n>) {\n const [contentCopied, setContentCopied] = useState<boolean>(false);\n const onClickExportHtml = useCallback(async () => {\n await copyContentToClipboard(items, config, formatters, renderContent);\n\n setContentCopied(true);\n setTimeout(() => setContentCopied(false), numTimeToRevertLabel);\n }, [config, items, formatters, numTimeToRevertLabel, renderContent]);\n\n return (\n <FlatButton\n size={size}\n onClick={onClickExportHtml}\n disabled={!items || !items.length}\n label={contentCopied ? labelAfterCopy : label}\n />\n );\n}\n"],"names":["transformTableHeaders","config","groupConfigs","flatten","groupConfig","columnId","columnConfig","_a","formatColumnIdToHeaderCellLabel","transformGroupHeaders","_","index","transformItemToCell","item","itemValueResolver","itemLabelFormatter","formatter","createCell","value","label","format","transformTableRow","formatters","transformCell","createZipcelxConfig","filename","items","groupConfigsAndIds","createGroupConfigAndIdsForRows","headerRows","p","downloadExcelForStandardTable","excelConfig","zipcelx","StandardTableExcelExportButton","size","onClickExportExcel","useCallback","length","FlatButton","faFileDownload","transformJustifyContentToTextAlign","justifyContent","styleProperty","_b","justifyContentCell","createHtmlConfig","header","headerRow","body","row","renderHtmlForStandardTable","copyContentToClipboard","renderContent","htmlToCopy","clipboard","StandardTableHtmlCopyToClipboardButton","labelAfterCopy","numTimeToRevertLabel","contentCopied","setContentCopied","useState","onClickExportHtml","setTimeout"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
- (function(){ try {var elementStyle = document.createElement('style'); elementStyle.appendChild(document.createTextNode("")); document.head.appendChild(elementStyle);} catch(e) {console.error('vite-plugin-css-injected-by-js', e);} })();"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var m=require("react"),O=require("zipcelx"),p=require("@stenajs-webui/grid"),i=require("lodash"),y=require("date-fns"),g=require("@stenajs-webui/elements"),$=require("@fortawesome/free-solid-svg-icons/faFileDownload"),C=require("react/jsx-runtime"),H=require("clipboard-polyfill");function S(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}function G(e){if(e&&e.__esModule)return e;var r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});return e&&Object.keys(e).forEach(function(o){if(o!=="default"){var n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(r,o,n.get?n:{enumerable:!0,get:function(){return e[o]}})}}),r.default=e,Object.freeze(r)}var E=S(O),b=G(H);const _=(e,r)=>i.flatten(r.map(o=>o.columnOrder.map(n=>{var a;const t=e.columns[n];return{type:"string",value:(a=t.columnLabel)!=null?a:p.formatColumnIdToHeaderCellLabel(String(n))}}))),j=e=>i.flatten(e.map(r=>r.columnOrder.map((o,n)=>{var t;return{type:"string",value:n===0&&(t=r.label)!=null?t:""}}))),R=(e,r,o,n)=>{if(n)return c(n(e));const t=r(e);if(o){const a=o==null?void 0:o(t,e);return c(a)}return typeof t=="number"||typeof t=="string"?c(t):typeof t=="boolean"?c(t?"Y":""):t instanceof Date?c(y.format(t,"yyyy-MM-dd HH:mm")):t==null?c(""):c(String(t))},c=e=>({type:typeof e=="number"?"number":"string",value:e}),q=(e,r,o,n)=>i.flatten(o.map(t=>t.columnOrder.map(a=>B(e,a,r,n)))),B=(e,r,o,n)=>{const t=o.columns[r],a=n==null?void 0:n[r];return R(e,t.itemValueResolver,t.itemLabelFormatter,a)},h=(e,r,o,n)=>{const t=p.createGroupConfigAndIdsForRows("columnGroups"in r?r.columnGroups:void 0,"columnGroupOrder"in r?r.columnGroupOrder:void 0,"columnOrder"in r?r.columnOrder:void 0),a=[],l=t.map(u=>u.groupConfig);return"columnGroups"in r&&a.push(j(l)),a.push(_(r,l)),{filename:e,sheet:{data:[...a,...o.map(u=>q(u,r,l,n))]}}},x=async(e,r,o,n)=>{const t=h(e,r,o,n);await E.default(t)},M=function({config:r,size:o,items:n,filename:t="exported-spreadsheet",formatters:a}){const l=m.useCallback(async()=>{n&&n.length&&await x(t,r,n,a)},[r,n,t,a]);return C.jsx(g.FlatButton,{size:o,leftIcon:$.faFileDownload,onClick:l,disabled:!n||!n.length})},v=e=>{switch(e==null?void 0:e.toLowerCase()){case"left":case"start":case"flex-start":return"text-align: left";case"right":case"end":case"flex-end":return"text-align: right";case"center":return"text-align: center";default:return}},D=(e,r)=>i.flatten(r.map(o=>o.columnOrder.map(n=>{var a,l;const t=e.columns[n];if(t.justifyContentHeader){const u=v(t.justifyContentHeader);return`<th${u?' style="'+u+'"':""}>${(a=t.columnLabel)!=null?a:p.formatColumnIdToHeaderCellLabel(String(n))}</th>`}return`<th>${(l=t.columnLabel)!=null?l:p.formatColumnIdToHeaderCellLabel(String(n))}</th>`}))),I=e=>i.flatten(e.map(r=>{var o;return`<th style="text-align: left" colspan="${r.columnOrder.length}">${(o=r.label)!=null?o:""}</th>`})),A=(e,r,o,n,t)=>{if(t)return d(t(e),o);const a=r(e);if(n){const l=n==null?void 0:n(a,e);return d(l,o)}return typeof a=="number"||typeof a=="string"?d(a,o):typeof a=="boolean"?d(a?"Y":"",o):a instanceof Date?d(y.format(a,"yyyy-MM-dd HH:mm"),o):a==null?d("",o):d(String(a),o)},d=(e,r)=>{if(r){const o=v(r);return`<td${o?' style="'+o+'"':""}>${e}</td>`}return`<td>${e}</td>`},P=(e,r,o,n)=>i.flatten(o.map(t=>t.columnOrder.map(a=>k(e,a,r,n)))).join(""),k=(e,r,o,n)=>{const t=o.columns[r],a=n==null?void 0:n[r];return A(e,t.itemValueResolver,t.justifyContentCell,t.itemLabelFormatter,a)},w=(e,r,o)=>{const n=p.createGroupConfigAndIdsForRows("columnGroups"in e?e.columnGroups:void 0,"columnGroupOrder"in e?e.columnGroupOrder:void 0,"columnOrder"in e?e.columnOrder:void 0),t=[],a=n.map(s=>s.groupConfig);"columnGroups"in e&&t.push(I(a).join("")),t.push(D(e,a).join(""));const l=`<thead>${t.map(s=>`<tr>${s}</tr>`).join("")}</thead>`,f=`<tbody>${r.map(s=>P(s,e,a,o)).map(s=>`<tr>${s}</tr>`).join("")}</tbody>`;return`<table>${l}${f}</table>`},z=(e,r,o)=>w(e,r,o);async function F(e,r,o,n){let t="";if(e&&e.length&&(t=z(r,e,o)),n&&(t=n(t)),t){const a=new b.ClipboardItem({"text/html":new Blob([t],{type:"text/html"})});await b.write([a])}}function V({config:e,renderContent:r,size:o,items:n,formatters:t,label:a="Copy to clipboard",labelAfterCopy:l="Content copied!",numTimeToRevertLabel:u=2e3}){const[f,s]=m.useState(!1),T=m.useCallback(async()=>{await F(n,e,t,r),s(!0),setTimeout(()=>s(!1),u)},[e,n,t,u,r]);return C.jsx(g.FlatButton,{size:o,onClick:T,disabled:!n||!n.length,label:f?l:a})}exports.StandardTableExcelExportButton=M;exports.StandardTableHtmlCopyToClipboardButton=V;exports.createHtmlConfig=w;exports.createZipcelxConfig=h;exports.downloadExcelForStandardTable=x;
1
+ (function(){"use strict";try{var e=document.createElement("style");e.appendChild(document.createTextNode("")),document.head.appendChild(e)}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const m=require("react"),$=require("zipcelx"),p=require("@stenajs-webui/grid"),i=require("lodash"),y=require("date-fns"),g=require("@stenajs-webui/elements"),H=require("@fortawesome/free-solid-svg-icons/faFileDownload"),C=require("react/jsx-runtime"),S=require("clipboard-polyfill"),v=e=>e&&typeof e=="object"&&"default"in e?e:{default:e};function G(e){if(e&&e.__esModule)return e;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const r=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,r.get?r:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const E=v($),b=G(S),_=(e,t)=>i.flatten(t.map(o=>o.columnOrder.map(r=>{var l;const n=e.columns[r];return{type:"string",value:(l=n.columnLabel)!=null?l:p.formatColumnIdToHeaderCellLabel(String(r))}}))),R=e=>i.flatten(e.map(t=>t.columnOrder.map((o,r)=>{var n;return{type:"string",value:r===0&&(n=t.label)!=null?n:""}}))),j=(e,t,o,r)=>{if(r)return c(r(e));const n=t(e);if(o){const l=o==null?void 0:o(n,e);return c(l)}return typeof n=="number"||typeof n=="string"?c(n):typeof n=="boolean"?c(n?"Y":""):n instanceof Date?c(y.format(n,"yyyy-MM-dd HH:mm")):n==null?c(""):c(String(n))},c=e=>({type:typeof e=="number"?"number":"string",value:e}),q=(e,t,o,r)=>i.flatten(o.map(n=>n.columnOrder.map(l=>B(e,l,t,r)))),B=(e,t,o,r)=>{const n=o.columns[t],l=r==null?void 0:r[t];return j(e,n.itemValueResolver,n.itemLabelFormatter,l)},x=(e,t,o,r)=>{const n=p.createGroupConfigAndIdsForRows("columnGroups"in t?t.columnGroups:void 0,"columnGroupOrder"in t?t.columnGroupOrder:void 0,"columnOrder"in t?t.columnOrder:void 0),l=[],a=n.map(s=>s.groupConfig);return"columnGroups"in t&&l.push(R(a)),l.push(_(t,a)),{filename:e,sheet:{data:[...l,...o.map(s=>q(s,t,a,r))]}}},h=async(e,t,o,r)=>{const n=x(e,t,o,r);await E.default(n)},M=function({config:t,size:o,items:r,filename:n="exported-spreadsheet",formatters:l}){const a=m.useCallback(async()=>{r&&r.length&&await h(n,t,r,l)},[t,r,n,l]);return C.jsx(g.FlatButton,{size:o,leftIcon:H.faFileDownload,onClick:a,disabled:!r||!r.length})},w=e=>{switch(e==null?void 0:e.toLowerCase()){case"left":case"start":case"flex-start":return"text-align: left";case"right":case"end":case"flex-end":return"text-align: right";case"center":return"text-align: center";default:return}},k=(e,t)=>i.flatten(t.map(o=>o.columnOrder.map(r=>{var l,a;const n=e.columns[r];if(n.justifyContentHeader){const s=w(n.justifyContentHeader);return`<th${s?' style="'+s+'"':""}>${(l=n.columnLabel)!=null?l:p.formatColumnIdToHeaderCellLabel(String(r))}</th>`}return`<th>${(a=n.columnLabel)!=null?a:p.formatColumnIdToHeaderCellLabel(String(r))}</th>`}))),D=e=>i.flatten(e.map(t=>{var o;return`<th style="text-align: left" colspan="${t.columnOrder.length}">${(o=t.label)!=null?o:""}</th>`})),I=(e,t,o,r,n)=>{if(n)return d(n(e),o);const l=t(e);if(r){const a=r==null?void 0:r(l,e);return d(a,o)}return typeof l=="number"||typeof l=="string"?d(l,o):typeof l=="boolean"?d(l?"Y":"",o):l instanceof Date?d(y.format(l,"yyyy-MM-dd HH:mm"),o):l==null?d("",o):d(String(l),o)},d=(e,t)=>{if(t){const o=w(t);return`<td${o?' style="'+o+'"':""}>${e}</td>`}return`<td>${e}</td>`},A=(e,t,o,r)=>i.flatten(o.map(n=>n.columnOrder.map(l=>P(e,l,t,r)))).join(""),P=(e,t,o,r)=>{const n=o.columns[t],l=r==null?void 0:r[t];return I(e,n.itemValueResolver,n.justifyContentCell,n.itemLabelFormatter,l)},T=(e,t,o)=>{const r=p.createGroupConfigAndIdsForRows("columnGroups"in e?e.columnGroups:void 0,"columnGroupOrder"in e?e.columnGroupOrder:void 0,"columnOrder"in e?e.columnOrder:void 0),n=[],l=r.map(u=>u.groupConfig);"columnGroups"in e&&n.push(D(l).join("")),n.push(k(e,l).join(""));const a=`<thead>${n.map(u=>`<tr>${u}</tr>`).join("")}</thead>`,f=`<tbody>${t.map(u=>A(u,e,l,o)).map(u=>`<tr>${u}</tr>`).join("")}</tbody>`;return`<table>${a}${f}</table>`},z=(e,t,o)=>T(e,t,o);async function F(e,t,o,r){let n="";if(e&&e.length&&(n=z(t,e,o)),r&&(n=r(n)),n){const l=new b.ClipboardItem({"text/html":new Blob([n],{type:"text/html"})});await b.write([l])}}function V({config:e,renderContent:t,size:o,items:r,formatters:n,label:l="Copy to clipboard",labelAfterCopy:a="Content copied!",numTimeToRevertLabel:s=2e3}){const[f,u]=m.useState(!1),O=m.useCallback(async()=>{await F(r,e,n,t),u(!0),setTimeout(()=>u(!1),s)},[e,r,n,s,t]);return C.jsx(g.FlatButton,{size:o,onClick:O,disabled:!r||!r.length,label:f?a:l})}exports.StandardTableExcelExportButton=M;exports.StandardTableHtmlCopyToClipboardButton=V;exports.createHtmlConfig=T;exports.createZipcelxConfig=x;exports.downloadExcelForStandardTable=h;
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/features/grid-excel-export/transformers/HeaderTransformer.ts","../src/features/grid-excel-export/transformers/CellTransformer.ts","../src/features/grid-excel-export/transformers/RowTransformer.ts","../src/features/grid-excel-export/transformers/ConfigTransformer.ts","../src/features/grid-excel-export/util/ExcelDownloader.ts","../src/features/grid-excel-export/components/StandardTableExcelExportButton.tsx","../src/features/grid-copy-to-clipboard/transformers/AlignmentTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/HeaderTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/CellTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/RowTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/ConfigTransformer.ts","../src/features/grid-copy-to-clipboard/util/HtmlRenderer.ts","../src/features/grid-copy-to-clipboard/util/CopyContentToClipboard.ts","../src/features/grid-copy-to-clipboard/components/StandardTableHtmlCopyToClipboardButton.tsx"],"sourcesContent":["import {\n formatColumnIdToHeaderCellLabel,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { ZipCelXRow } from \"zipcelx\";\nimport { StandardTableColumnGroupConfig } from \"@stenajs-webui/grid\";\n\nexport const transformTableHeaders = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((columnId) => {\n const columnConfig = config.columns[columnId];\n return {\n type: \"string\",\n value:\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId)),\n };\n })\n )\n );\n};\n\nexport const transformGroupHeaders = <TColumnKey extends string>(\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((_, index) => {\n return {\n type: \"string\",\n value: index === 0 ? groupConfig.label ?? \"\" : \"\",\n };\n })\n )\n );\n};\n","import { StandardTableColumnConfig } from \"@stenajs-webui/grid\";\nimport { format } from \"date-fns\";\nimport { ZipCelXCell } from \"zipcelx\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\n\nexport const transformItemToCell = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n item: TItem,\n itemValueResolver: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemValueResolver\"],\n itemLabelFormatter:\n | StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemLabelFormatter\"]\n | undefined,\n formatter?: CustomCellFormatter<TItem>\n): ZipCelXCell => {\n if (formatter) {\n return createCell(formatter(item));\n }\n\n const value = itemValueResolver(item);\n\n if (itemLabelFormatter) {\n const label = itemLabelFormatter?.(value, item);\n return createCell(label);\n }\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n return createCell(value);\n }\n\n if (typeof value === \"boolean\") {\n return createCell(value ? \"Y\" : \"\");\n }\n\n if (value instanceof Date) {\n return createCell(format(value, \"yyyy-MM-dd HH:mm\"));\n }\n\n if (value == null) {\n return createCell(\"\");\n }\n\n return createCell(String(value));\n};\n\nconst createCell = (value: string | number): ZipCelXCell => {\n const type = typeof value === \"number\" ? \"number\" : \"string\";\n return {\n type,\n value,\n };\n};\n","import {\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { ZipCelXCell, ZipCelXRow } from \"zipcelx\";\nimport { transformItemToCell } from \"./CellTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const transformTableRow = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map<ZipCelXCell>((columnId) =>\n transformCell(item, columnId, config, formatters)\n )\n )\n );\n};\n\nexport const transformCell = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n columnId: TColumnKey,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXCell => {\n const columnConfig = config.columns[columnId];\n const formatter = formatters?.[columnId];\n return transformItemToCell(\n item,\n columnConfig.itemValueResolver,\n columnConfig.itemLabelFormatter,\n formatter\n );\n};\n","import {\n createGroupConfigAndIdsForRows,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { ZipCelXConfig, ZipCelXRow } from \"zipcelx\";\nimport {\n transformGroupHeaders,\n transformTableHeaders,\n} from \"./HeaderTransformer\";\nimport { transformTableRow } from \"./RowTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const createZipcelxConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n filename: string,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXConfig => {\n const groupConfigsAndIds = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n\n const headerRows: Array<ZipCelXRow> = [];\n const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);\n\n if (\"columnGroups\" in config) {\n headerRows.push(transformGroupHeaders(groupConfigs));\n }\n headerRows.push(transformTableHeaders(config, groupConfigs));\n\n return {\n filename,\n sheet: {\n data: [\n ...headerRows,\n ...items.map<ZipCelXRow>((item) =>\n transformTableRow(item, config, groupConfigs, formatters)\n ),\n ],\n },\n };\n};\n","import { StandardTableConfig } from \"@stenajs-webui/grid\";\nimport zipcelx from \"zipcelx\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\nimport { createZipcelxConfig } from \"../transformers/ConfigTransformer\";\n\nexport const downloadExcelForStandardTable = async <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n filename: string,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n) => {\n const excelConfig = createZipcelxConfig(filename, config, items, formatters);\n await zipcelx(excelConfig);\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { downloadExcelForStandardTable } from \"../util/ExcelDownloader\";\nimport { StandardTableProps } from \"@stenajs-webui/grid\";\nimport { FlatButton, FlatButtonProps } from \"@stenajs-webui/elements\";\nimport { faFileDownload } from \"@fortawesome/free-solid-svg-icons/faFileDownload\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\ninterface StandardTableExcelExportButtonProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Pick<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"config\" | \"items\"\n >,\n Pick<FlatButtonProps, \"size\"> {\n filename?: string;\n formatters?: CustomCellFormatters<TItem, TColumnKey>;\n}\n\nexport const StandardTableExcelExportButton =\n function StandardTableExcelExportButton<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n >({\n config,\n size,\n items,\n filename = \"exported-spreadsheet\",\n formatters,\n }: StandardTableExcelExportButtonProps<TItem, TColumnKey, TColumnGroupKey>) {\n const onClickExportExcel = useCallback(async () => {\n if (items && items.length) {\n await downloadExcelForStandardTable(\n filename,\n config,\n items,\n formatters\n );\n }\n }, [config, items, filename, formatters]);\n\n return (\n <FlatButton\n size={size}\n leftIcon={faFileDownload}\n onClick={onClickExportExcel}\n disabled={!items || !items.length}\n />\n );\n };\n","export const transformJustifyContentToTextAlign = (\n justifyContent: string | undefined\n): string | undefined => {\n switch (justifyContent?.toLowerCase()) {\n case \"left\":\n case \"start\":\n case \"flex-start\":\n return \"text-align: left\";\n case \"right\":\n case \"end\":\n case \"flex-end\":\n return \"text-align: right\";\n case \"center\":\n return \"text-align: center\";\n default:\n return undefined;\n }\n};\n","import {\n formatColumnIdToHeaderCellLabel,\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { transformJustifyContentToTextAlign } from \"./AlignmentTransformer\";\n\nexport const transformTableHeaders = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): string[] => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((columnId) => {\n const columnConfig = config.columns[columnId];\n\n if (columnConfig.justifyContentHeader) {\n const styleProperty = transformJustifyContentToTextAlign(\n columnConfig.justifyContentHeader\n );\n return `<th${styleProperty ? ' style=\"' + styleProperty + '\"' : \"\"}>${\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId))\n }</th>`;\n }\n return `<th>${\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId))\n }</th>`;\n })\n )\n );\n};\n\nexport const transformGroupHeaders = <TColumnKey extends string>(\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): string[] => {\n return flatten(\n groupConfigs.map((groupConfig) => {\n return `<th style=\"text-align: left\" colspan=\"${\n groupConfig.columnOrder.length\n }\">${groupConfig.label ?? \"\"}</th>`;\n })\n );\n};\n","import { StandardTableColumnConfig } from \"@stenajs-webui/grid\";\nimport { format } from \"date-fns\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\nimport { transformJustifyContentToTextAlign } from \"./AlignmentTransformer\";\n\nexport const transformItemToCell = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n item: TItem,\n itemValueResolver: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemValueResolver\"],\n justifyContentCell: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"justifyContentCell\"],\n itemLabelFormatter:\n | StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemLabelFormatter\"]\n | undefined,\n formatter?: CustomCellFormatter<TItem>\n): string => {\n if (formatter) {\n return createCell(formatter(item), justifyContentCell);\n }\n\n const value = itemValueResolver(item);\n\n if (itemLabelFormatter) {\n const label = itemLabelFormatter?.(value, item);\n return createCell(label, justifyContentCell);\n }\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n return createCell(value, justifyContentCell);\n }\n\n if (typeof value === \"boolean\") {\n return createCell(value ? \"Y\" : \"\", justifyContentCell);\n }\n\n if (value instanceof Date) {\n return createCell(format(value, \"yyyy-MM-dd HH:mm\"), justifyContentCell);\n }\n\n if (value == null) {\n return createCell(\"\", justifyContentCell);\n }\n\n return createCell(String(value), justifyContentCell);\n};\n\nconst createCell = (\n value: string | number,\n justifyContentCell: string | undefined\n): string => {\n if (justifyContentCell) {\n const styleProperty =\n transformJustifyContentToTextAlign(justifyContentCell);\n return `<td${\n styleProperty ? ' style=\"' + styleProperty + '\"' : \"\"\n }>${value}</td>`;\n }\n return `<td>${value}</td>`;\n};\n","import {\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { transformItemToCell } from \"./CellTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const transformTableRow = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map<string>((columnId) =>\n transformCell(item, columnId, config, formatters)\n )\n )\n ).join(\"\");\n};\n\nexport const transformCell = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n columnId: TColumnKey,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n const columnConfig = config.columns[columnId];\n const formatter = formatters?.[columnId];\n return transformItemToCell(\n item,\n columnConfig.itemValueResolver,\n columnConfig.justifyContentCell,\n columnConfig.itemLabelFormatter,\n formatter\n );\n};\n","import {\n createGroupConfigAndIdsForRows,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport {\n transformGroupHeaders,\n transformTableHeaders,\n} from \"./HeaderTransformer\";\nimport { transformTableRow } from \"./RowTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const createHtmlConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n const groupConfigsAndIds = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n\n const headerRows: Array<string> = [];\n const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);\n\n if (\"columnGroups\" in config) {\n headerRows.push(transformGroupHeaders(groupConfigs).join(\"\"));\n }\n headerRows.push(transformTableHeaders(config, groupConfigs).join(\"\"));\n const header = `<thead>${headerRows\n .map((headerRow) => `<tr>${headerRow}</tr>`)\n .join(\"\")}</thead>`;\n\n const tbodyRows = items\n .map((item) => transformTableRow(item, config, groupConfigs, formatters))\n .map((row) => `<tr>${row}</tr>`);\n\n const body = `<tbody>${tbodyRows.join(\"\")}</tbody>`;\n return `<table>${header}${body}</table>`;\n};\n","import { StandardTableConfig } from \"@stenajs-webui/grid\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\nimport { createHtmlConfig } from \"../transformers/ConfigTransformer\";\n\nexport const renderHtmlForStandardTable = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n) => {\n return createHtmlConfig(config, items, formatters);\n};\n","import { renderHtmlForStandardTable } from \"./HtmlRenderer\";\nimport * as clipboard from \"clipboard-polyfill\";\nimport { StandardTableConfig } from \"@stenajs-webui/grid/dist/features/standard-table/config/StandardTableConfig\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\n\nexport async function copyContentToClipboard<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n items: TItem[] | undefined,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?:\n | Partial<Record<TColumnKey, CustomCellFormatter<TItem>>>\n | undefined,\n renderContent?: (content: string) => string | null\n) {\n let htmlToCopy: string | null = \"\";\n\n if (items && items.length) {\n htmlToCopy = renderHtmlForStandardTable(config, items, formatters);\n }\n\n if (renderContent) {\n htmlToCopy = renderContent(htmlToCopy);\n }\n if (htmlToCopy) {\n const item = new clipboard.ClipboardItem({\n \"text/html\": new Blob([htmlToCopy], { type: \"text/html\" }),\n });\n\n await clipboard.write([item]);\n }\n}\n","import * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { StandardTableProps } from \"@stenajs-webui/grid\";\nimport { FlatButton, FlatButtonProps } from \"@stenajs-webui/elements\";\nimport { copyContentToClipboard } from \"../util/CopyContentToClipboard\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport interface StandardTableHtmlCopyToClipboardButtonProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Pick<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"config\" | \"items\"\n >,\n Pick<FlatButtonProps, \"size\"> {\n formatters?: CustomCellFormatters<TItem, TColumnKey>;\n renderContent?: (content: string) => string | null;\n label?: string;\n labelAfterCopy?: string;\n numTimeToRevertLabel?: number;\n}\n\nexport function StandardTableHtmlCopyToClipboardButton<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>({\n config,\n renderContent,\n size,\n items,\n formatters,\n label = \"Copy to clipboard\",\n labelAfterCopy = \"Content copied!\",\n numTimeToRevertLabel = 2000,\n}: StandardTableHtmlCopyToClipboardButtonProps<\n TItem,\n TColumnKey,\n TColumnGroupKey\n>) {\n const [contentCopied, setContentCopied] = useState<boolean>(false);\n const onClickExportHtml = useCallback(async () => {\n await copyContentToClipboard(items, config, formatters, renderContent);\n\n setContentCopied(true);\n setTimeout(() => setContentCopied(false), numTimeToRevertLabel);\n }, [config, items, formatters, numTimeToRevertLabel, renderContent]);\n\n return (\n <FlatButton\n size={size}\n onClick={onClickExportHtml}\n disabled={!items || !items.length}\n label={contentCopied ? labelAfterCopy : label}\n />\n );\n}\n"],"names":["transformTableHeaders","flatten","formatColumnIdToHeaderCellLabel","transformGroupHeaders","transformItemToCell","createCell","format","transformTableRow","transformCell","createGroupConfigAndIdsForRows","zipcelx","StandardTableExcelExportButton","config","size","items","filename","formatters","onClickExportExcel","useCallback","length","downloadExcelForStandardTable","FlatButton","faFileDownload","clipboard","renderContent","label","labelAfterCopy","numTimeToRevertLabel","contentCopied","setContentCopied","useState","onClickExportHtml","copyContentToClipboard","setTimeout"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/features/grid-excel-export/transformers/HeaderTransformer.ts","../src/features/grid-excel-export/transformers/CellTransformer.ts","../src/features/grid-excel-export/transformers/RowTransformer.ts","../src/features/grid-excel-export/transformers/ConfigTransformer.ts","../src/features/grid-excel-export/util/ExcelDownloader.ts","../src/features/grid-excel-export/components/StandardTableExcelExportButton.tsx","../src/features/grid-copy-to-clipboard/transformers/AlignmentTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/HeaderTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/CellTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/RowTransformer.ts","../src/features/grid-copy-to-clipboard/transformers/ConfigTransformer.ts","../src/features/grid-copy-to-clipboard/util/HtmlRenderer.ts","../src/features/grid-copy-to-clipboard/util/CopyContentToClipboard.ts","../src/features/grid-copy-to-clipboard/components/StandardTableHtmlCopyToClipboardButton.tsx"],"sourcesContent":["import {\n formatColumnIdToHeaderCellLabel,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { ZipCelXRow } from \"zipcelx\";\nimport { StandardTableColumnGroupConfig } from \"@stenajs-webui/grid\";\n\nexport const transformTableHeaders = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((columnId) => {\n const columnConfig = config.columns[columnId];\n return {\n type: \"string\",\n value:\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId)),\n };\n })\n )\n );\n};\n\nexport const transformGroupHeaders = <TColumnKey extends string>(\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((_, index) => {\n return {\n type: \"string\",\n value: index === 0 ? groupConfig.label ?? \"\" : \"\",\n };\n })\n )\n );\n};\n","import { StandardTableColumnConfig } from \"@stenajs-webui/grid\";\nimport { format } from \"date-fns\";\nimport { ZipCelXCell } from \"zipcelx\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\n\nexport const transformItemToCell = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n item: TItem,\n itemValueResolver: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemValueResolver\"],\n itemLabelFormatter:\n | StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemLabelFormatter\"]\n | undefined,\n formatter?: CustomCellFormatter<TItem>\n): ZipCelXCell => {\n if (formatter) {\n return createCell(formatter(item));\n }\n\n const value = itemValueResolver(item);\n\n if (itemLabelFormatter) {\n const label = itemLabelFormatter?.(value, item);\n return createCell(label);\n }\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n return createCell(value);\n }\n\n if (typeof value === \"boolean\") {\n return createCell(value ? \"Y\" : \"\");\n }\n\n if (value instanceof Date) {\n return createCell(format(value, \"yyyy-MM-dd HH:mm\"));\n }\n\n if (value == null) {\n return createCell(\"\");\n }\n\n return createCell(String(value));\n};\n\nconst createCell = (value: string | number): ZipCelXCell => {\n const type = typeof value === \"number\" ? \"number\" : \"string\";\n return {\n type,\n value,\n };\n};\n","import {\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { ZipCelXCell, ZipCelXRow } from \"zipcelx\";\nimport { transformItemToCell } from \"./CellTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const transformTableRow = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXRow => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map<ZipCelXCell>((columnId) =>\n transformCell(item, columnId, config, formatters)\n )\n )\n );\n};\n\nexport const transformCell = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n columnId: TColumnKey,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXCell => {\n const columnConfig = config.columns[columnId];\n const formatter = formatters?.[columnId];\n return transformItemToCell(\n item,\n columnConfig.itemValueResolver,\n columnConfig.itemLabelFormatter,\n formatter\n );\n};\n","import {\n createGroupConfigAndIdsForRows,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { ZipCelXConfig, ZipCelXRow } from \"zipcelx\";\nimport {\n transformGroupHeaders,\n transformTableHeaders,\n} from \"./HeaderTransformer\";\nimport { transformTableRow } from \"./RowTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const createZipcelxConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n filename: string,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): ZipCelXConfig => {\n const groupConfigsAndIds = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n\n const headerRows: Array<ZipCelXRow> = [];\n const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);\n\n if (\"columnGroups\" in config) {\n headerRows.push(transformGroupHeaders(groupConfigs));\n }\n headerRows.push(transformTableHeaders(config, groupConfigs));\n\n return {\n filename,\n sheet: {\n data: [\n ...headerRows,\n ...items.map<ZipCelXRow>((item) =>\n transformTableRow(item, config, groupConfigs, formatters)\n ),\n ],\n },\n };\n};\n","import { StandardTableConfig } from \"@stenajs-webui/grid\";\nimport zipcelx from \"zipcelx\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\nimport { createZipcelxConfig } from \"../transformers/ConfigTransformer\";\n\nexport const downloadExcelForStandardTable = async <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n filename: string,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n) => {\n const excelConfig = createZipcelxConfig(filename, config, items, formatters);\n await zipcelx(excelConfig);\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { downloadExcelForStandardTable } from \"../util/ExcelDownloader\";\nimport { StandardTableProps } from \"@stenajs-webui/grid\";\nimport { FlatButton, FlatButtonProps } from \"@stenajs-webui/elements\";\nimport { faFileDownload } from \"@fortawesome/free-solid-svg-icons/faFileDownload\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\ninterface StandardTableExcelExportButtonProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Pick<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"config\" | \"items\"\n >,\n Pick<FlatButtonProps, \"size\"> {\n filename?: string;\n formatters?: CustomCellFormatters<TItem, TColumnKey>;\n}\n\nexport const StandardTableExcelExportButton =\n function StandardTableExcelExportButton<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n >({\n config,\n size,\n items,\n filename = \"exported-spreadsheet\",\n formatters,\n }: StandardTableExcelExportButtonProps<TItem, TColumnKey, TColumnGroupKey>) {\n const onClickExportExcel = useCallback(async () => {\n if (items && items.length) {\n await downloadExcelForStandardTable(\n filename,\n config,\n items,\n formatters\n );\n }\n }, [config, items, filename, formatters]);\n\n return (\n <FlatButton\n size={size}\n leftIcon={faFileDownload}\n onClick={onClickExportExcel}\n disabled={!items || !items.length}\n />\n );\n };\n","export const transformJustifyContentToTextAlign = (\n justifyContent: string | undefined\n): string | undefined => {\n switch (justifyContent?.toLowerCase()) {\n case \"left\":\n case \"start\":\n case \"flex-start\":\n return \"text-align: left\";\n case \"right\":\n case \"end\":\n case \"flex-end\":\n return \"text-align: right\";\n case \"center\":\n return \"text-align: center\";\n default:\n return undefined;\n }\n};\n","import {\n formatColumnIdToHeaderCellLabel,\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { transformJustifyContentToTextAlign } from \"./AlignmentTransformer\";\n\nexport const transformTableHeaders = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): string[] => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map((columnId) => {\n const columnConfig = config.columns[columnId];\n\n if (columnConfig.justifyContentHeader) {\n const styleProperty = transformJustifyContentToTextAlign(\n columnConfig.justifyContentHeader\n );\n return `<th${styleProperty ? ' style=\"' + styleProperty + '\"' : \"\"}>${\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId))\n }</th>`;\n }\n return `<th>${\n columnConfig.columnLabel ??\n formatColumnIdToHeaderCellLabel(String(columnId))\n }</th>`;\n })\n )\n );\n};\n\nexport const transformGroupHeaders = <TColumnKey extends string>(\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>\n): string[] => {\n return flatten(\n groupConfigs.map((groupConfig) => {\n return `<th style=\"text-align: left\" colspan=\"${\n groupConfig.columnOrder.length\n }\">${groupConfig.label ?? \"\"}</th>`;\n })\n );\n};\n","import { StandardTableColumnConfig } from \"@stenajs-webui/grid\";\nimport { format } from \"date-fns\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\nimport { transformJustifyContentToTextAlign } from \"./AlignmentTransformer\";\n\nexport const transformItemToCell = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n item: TItem,\n itemValueResolver: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemValueResolver\"],\n justifyContentCell: StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"justifyContentCell\"],\n itemLabelFormatter:\n | StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey\n >[\"itemLabelFormatter\"]\n | undefined,\n formatter?: CustomCellFormatter<TItem>\n): string => {\n if (formatter) {\n return createCell(formatter(item), justifyContentCell);\n }\n\n const value = itemValueResolver(item);\n\n if (itemLabelFormatter) {\n const label = itemLabelFormatter?.(value, item);\n return createCell(label, justifyContentCell);\n }\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n return createCell(value, justifyContentCell);\n }\n\n if (typeof value === \"boolean\") {\n return createCell(value ? \"Y\" : \"\", justifyContentCell);\n }\n\n if (value instanceof Date) {\n return createCell(format(value, \"yyyy-MM-dd HH:mm\"), justifyContentCell);\n }\n\n if (value == null) {\n return createCell(\"\", justifyContentCell);\n }\n\n return createCell(String(value), justifyContentCell);\n};\n\nconst createCell = (\n value: string | number,\n justifyContentCell: string | undefined\n): string => {\n if (justifyContentCell) {\n const styleProperty =\n transformJustifyContentToTextAlign(justifyContentCell);\n return `<td${\n styleProperty ? ' style=\"' + styleProperty + '\"' : \"\"\n }>${value}</td>`;\n }\n return `<td>${value}</td>`;\n};\n","import {\n StandardTableColumnGroupConfig,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport { flatten } from \"lodash\";\nimport { transformItemToCell } from \"./CellTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const transformTableRow = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n groupConfigs: Array<StandardTableColumnGroupConfig<TColumnKey>>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n return flatten(\n groupConfigs.map((groupConfig) =>\n groupConfig.columnOrder.map<string>((columnId) =>\n transformCell(item, columnId, config, formatters)\n )\n )\n ).join(\"\");\n};\n\nexport const transformCell = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n item: TItem,\n columnId: TColumnKey,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n const columnConfig = config.columns[columnId];\n const formatter = formatters?.[columnId];\n return transformItemToCell(\n item,\n columnConfig.itemValueResolver,\n columnConfig.justifyContentCell,\n columnConfig.itemLabelFormatter,\n formatter\n );\n};\n","import {\n createGroupConfigAndIdsForRows,\n StandardTableConfig,\n} from \"@stenajs-webui/grid\";\nimport {\n transformGroupHeaders,\n transformTableHeaders,\n} from \"./HeaderTransformer\";\nimport { transformTableRow } from \"./RowTransformer\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport const createHtmlConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n): string => {\n const groupConfigsAndIds = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n\n const headerRows: Array<string> = [];\n const groupConfigs = groupConfigsAndIds.map((p) => p.groupConfig);\n\n if (\"columnGroups\" in config) {\n headerRows.push(transformGroupHeaders(groupConfigs).join(\"\"));\n }\n headerRows.push(transformTableHeaders(config, groupConfigs).join(\"\"));\n const header = `<thead>${headerRows\n .map((headerRow) => `<tr>${headerRow}</tr>`)\n .join(\"\")}</thead>`;\n\n const tbodyRows = items\n .map((item) => transformTableRow(item, config, groupConfigs, formatters))\n .map((row) => `<tr>${row}</tr>`);\n\n const body = `<tbody>${tbodyRows.join(\"\")}</tbody>`;\n return `<table>${header}${body}</table>`;\n};\n","import { StandardTableConfig } from \"@stenajs-webui/grid\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\nimport { createHtmlConfig } from \"../transformers/ConfigTransformer\";\n\nexport const renderHtmlForStandardTable = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n items: Array<TItem>,\n formatters?: CustomCellFormatters<TItem, TColumnKey>\n) => {\n return createHtmlConfig(config, items, formatters);\n};\n","import { renderHtmlForStandardTable } from \"./HtmlRenderer\";\nimport * as clipboard from \"clipboard-polyfill\";\nimport { StandardTableConfig } from \"@stenajs-webui/grid/dist/features/standard-table/config/StandardTableConfig\";\nimport { CustomCellFormatter } from \"../../../common/CellFormatters\";\n\nexport async function copyContentToClipboard<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n items: TItem[] | undefined,\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>,\n formatters?:\n | Partial<Record<TColumnKey, CustomCellFormatter<TItem>>>\n | undefined,\n renderContent?: (content: string) => string | null\n) {\n let htmlToCopy: string | null = \"\";\n\n if (items && items.length) {\n htmlToCopy = renderHtmlForStandardTable(config, items, formatters);\n }\n\n if (renderContent) {\n htmlToCopy = renderContent(htmlToCopy);\n }\n if (htmlToCopy) {\n const item = new clipboard.ClipboardItem({\n \"text/html\": new Blob([htmlToCopy], { type: \"text/html\" }),\n });\n\n await clipboard.write([item]);\n }\n}\n","import * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { StandardTableProps } from \"@stenajs-webui/grid\";\nimport { FlatButton, FlatButtonProps } from \"@stenajs-webui/elements\";\nimport { copyContentToClipboard } from \"../util/CopyContentToClipboard\";\nimport { CustomCellFormatters } from \"../../../common/CellFormatters\";\n\nexport interface StandardTableHtmlCopyToClipboardButtonProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Pick<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"config\" | \"items\"\n >,\n Pick<FlatButtonProps, \"size\"> {\n formatters?: CustomCellFormatters<TItem, TColumnKey>;\n renderContent?: (content: string) => string | null;\n label?: string;\n labelAfterCopy?: string;\n numTimeToRevertLabel?: number;\n}\n\nexport function StandardTableHtmlCopyToClipboardButton<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>({\n config,\n renderContent,\n size,\n items,\n formatters,\n label = \"Copy to clipboard\",\n labelAfterCopy = \"Content copied!\",\n numTimeToRevertLabel = 2000,\n}: StandardTableHtmlCopyToClipboardButtonProps<\n TItem,\n TColumnKey,\n TColumnGroupKey\n>) {\n const [contentCopied, setContentCopied] = useState<boolean>(false);\n const onClickExportHtml = useCallback(async () => {\n await copyContentToClipboard(items, config, formatters, renderContent);\n\n setContentCopied(true);\n setTimeout(() => setContentCopied(false), numTimeToRevertLabel);\n }, [config, items, formatters, numTimeToRevertLabel, renderContent]);\n\n return (\n <FlatButton\n size={size}\n onClick={onClickExportHtml}\n disabled={!items || !items.length}\n label={contentCopied ? labelAfterCopy : label}\n />\n );\n}\n"],"names":["transformTableHeaders","config","groupConfigs","flatten","groupConfig","columnId","columnConfig","_a","formatColumnIdToHeaderCellLabel","transformGroupHeaders","_","index","transformItemToCell","item","itemValueResolver","itemLabelFormatter","formatter","createCell","value","label","format","transformTableRow","formatters","transformCell","createZipcelxConfig","filename","items","groupConfigsAndIds","createGroupConfigAndIdsForRows","headerRows","p","downloadExcelForStandardTable","excelConfig","zipcelx","StandardTableExcelExportButton","size","onClickExportExcel","useCallback","length","FlatButton","faFileDownload","transformJustifyContentToTextAlign","justifyContent","styleProperty","_b","justifyContentCell","createHtmlConfig","header","headerRow","body","row","renderHtmlForStandardTable","copyContentToClipboard","renderContent","htmlToCopy","clipboard","StandardTableHtmlCopyToClipboardButton","labelAfterCopy","numTimeToRevertLabel","contentCopied","setContentCopied","useState","onClickExportHtml","setTimeout"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stenajs-webui/grid-export",
3
- "version": "17.13.0",
3
+ "version": "17.13.3",
4
4
  "description": "",
5
5
  "author": "mattias800",
6
6
  "license": "MIT",
@@ -27,9 +27,9 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@fortawesome/free-solid-svg-icons": ">=5.15.3",
30
- "@stenajs-webui/core": "17.13.0",
31
- "@stenajs-webui/elements": "17.13.0",
32
- "@stenajs-webui/grid": "17.13.0",
30
+ "@stenajs-webui/core": "17.13.3",
31
+ "@stenajs-webui/elements": "17.13.3",
32
+ "@stenajs-webui/grid": "17.13.3",
33
33
  "@types/zipcelx": "^1.5.0",
34
34
  "clipboard-polyfill": "^3.0.2",
35
35
  "date-fns": "2.26.0",
@@ -55,5 +55,5 @@
55
55
  "files": [
56
56
  "dist"
57
57
  ],
58
- "gitHead": "edade8e51a0c9abb4c5ab8b62af6b4e5db19ceaf"
58
+ "gitHead": "7192ec09f63ac6813294b4b2825a778fd53120c9"
59
59
  }