m2mui-datasheet 2.1.0 → 4.0.0
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/types/Cell.d.ts → Cell.d.ts} +1 -1
- package/Cell.js +95 -0
- package/Cell.js.map +1 -0
- package/{dist/types/Controller.d.ts → Controller.d.ts} +0 -0
- package/Controller.js +56 -0
- package/Controller.js.map +1 -0
- package/{dist/types/CustomCell.d.ts → CustomCell.d.ts} +0 -0
- package/{dist/esm/CustomCell.js → CustomCell.js} +12 -3
- package/CustomCell.js.map +1 -0
- package/DataSheet.d.ts +31 -0
- package/{dist/esm/DataSheet.js → DataSheet.js} +3 -5
- package/DataSheet.js.map +1 -0
- package/{dist/types/DataSheetCheckbox.d.ts → DataSheetCheckbox.d.ts} +0 -0
- package/DataSheetCheckbox.js +48 -0
- package/DataSheetCheckbox.js.map +1 -0
- package/{dist/types/DataSheetInput.d.ts → DataSheetInput.d.ts} +0 -0
- package/DataSheetInput.js +27 -0
- package/DataSheetInput.js.map +1 -0
- package/{dist/types/DataSheetSelect.d.ts → DataSheetSelect.d.ts} +0 -0
- package/DataSheetSelect.js +24 -0
- package/DataSheetSelect.js.map +1 -0
- package/InnerElement.d.ts +16 -0
- package/InnerElement.js +110 -0
- package/InnerElement.js.map +1 -0
- package/README.md +74 -76
- package/cjs/Cell.js +105 -0
- package/cjs/Cell.js.map +1 -0
- package/cjs/Controller.js +68 -0
- package/cjs/Controller.js.map +1 -0
- package/{dist/cjs → cjs}/CustomCell.js +12 -4
- package/cjs/CustomCell.js.map +1 -0
- package/{dist/cjs → cjs}/DataSheet.js +3 -5
- package/cjs/DataSheet.js.map +1 -0
- package/cjs/DataSheetCheckbox.js +51 -0
- package/cjs/DataSheetCheckbox.js.map +1 -0
- package/cjs/DataSheetInput.js +36 -0
- package/cjs/DataSheetInput.js.map +1 -0
- package/cjs/DataSheetSelect.js +33 -0
- package/cjs/DataSheetSelect.js.map +1 -0
- package/cjs/InnerElement.js +115 -0
- package/cjs/InnerElement.js.map +1 -0
- package/{dist/cjs → cjs}/index.js +0 -0
- package/cjs/index.js.map +1 -0
- package/{dist/cjs → cjs}/useOnClickOutside.js +0 -0
- package/cjs/useOnClickOutside.js.map +1 -0
- package/esm/Cell.js +95 -0
- package/esm/Cell.js.map +1 -0
- package/esm/Controller.js +56 -0
- package/esm/Controller.js.map +1 -0
- package/esm/CustomCell.js +123 -0
- package/esm/CustomCell.js.map +1 -0
- package/esm/DataSheet.js +615 -0
- package/esm/DataSheet.js.map +1 -0
- package/esm/DataSheetCheckbox.js +48 -0
- package/esm/DataSheetCheckbox.js.map +1 -0
- package/esm/DataSheetInput.js +27 -0
- package/esm/DataSheetInput.js.map +1 -0
- package/esm/DataSheetSelect.js +24 -0
- package/esm/DataSheetSelect.js.map +1 -0
- package/esm/InnerElement.js +110 -0
- package/esm/InnerElement.js.map +1 -0
- package/{dist/esm → esm}/index.js +0 -0
- package/esm/index.js.map +1 -0
- package/{dist/esm → esm}/useOnClickOutside.js +0 -0
- package/esm/useOnClickOutside.js.map +1 -0
- package/{dist/types/index.d.ts → index.d.ts} +0 -0
- package/index.js +4 -0
- package/index.js.map +1 -0
- package/package.json +89 -111
- package/types/Cell.d.ts +10 -0
- package/types/Controller.d.ts +3 -0
- package/types/CustomCell.d.ts +3 -0
- package/types/DataSheet.d.ts +31 -0
- package/types/DataSheetCheckbox.d.ts +2 -0
- package/types/DataSheetInput.d.ts +2 -0
- package/types/DataSheetSelect.d.ts +2 -0
- package/types/InnerElement.d.ts +16 -0
- package/types/index.d.ts +3 -0
- package/{dist/types → types}/useOnClickOutside.d.ts +0 -0
- package/useOnClickOutside.d.ts +1 -0
- package/useOnClickOutside.js +26 -0
- package/useOnClickOutside.js.map +1 -0
- package/CHANGELOG.md +0 -89
- package/dist/cjs/Cell.js +0 -105
- package/dist/cjs/Cell.js.map +0 -1
- package/dist/cjs/Controller.js +0 -68
- package/dist/cjs/Controller.js.map +0 -1
- package/dist/cjs/CustomCell.js.map +0 -1
- package/dist/cjs/DataSheet.js.map +0 -1
- package/dist/cjs/DataSheetCheckbox.js +0 -49
- package/dist/cjs/DataSheetCheckbox.js.map +0 -1
- package/dist/cjs/DataSheetInput.js +0 -33
- package/dist/cjs/DataSheetInput.js.map +0 -1
- package/dist/cjs/DataSheetSelect.js +0 -33
- package/dist/cjs/DataSheetSelect.js.map +0 -1
- package/dist/cjs/DataSheetText.js +0 -34
- package/dist/cjs/DataSheetText.js.map +0 -1
- package/dist/cjs/InnerElement.js +0 -114
- package/dist/cjs/InnerElement.js.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/useOnClickOutside.js.map +0 -1
- package/dist/esm/Cell.js +0 -93
- package/dist/esm/Cell.js.map +0 -1
- package/dist/esm/Controller.js +0 -56
- package/dist/esm/Controller.js.map +0 -1
- package/dist/esm/CustomCell.js.map +0 -1
- package/dist/esm/DataSheet.js.map +0 -1
- package/dist/esm/DataSheetCheckbox.js +0 -40
- package/dist/esm/DataSheetCheckbox.js.map +0 -1
- package/dist/esm/DataSheetInput.js +0 -24
- package/dist/esm/DataSheetInput.js.map +0 -1
- package/dist/esm/DataSheetSelect.js +0 -24
- package/dist/esm/DataSheetSelect.js.map +0 -1
- package/dist/esm/DataSheetText.js +0 -25
- package/dist/esm/DataSheetText.js.map +0 -1
- package/dist/esm/InnerElement.js +0 -106
- package/dist/esm/InnerElement.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/useOnClickOutside.js.map +0 -1
- package/dist/types/DataSheet.d.ts +0 -30
- package/dist/types/DataSheetText.d.ts +0 -4
- package/dist/types/InnerElement.d.ts +0 -8
package/esm/DataSheet.js
ADDED
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
+
|
|
3
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
|
+
|
|
5
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
6
|
+
|
|
7
|
+
import { Controller, DownloadButton } from "./Controller";
|
|
8
|
+
import { CustomCell } from "./CustomCell";
|
|
9
|
+
import { VariableSizeGrid as Grid } from "react-window";
|
|
10
|
+
import { InnerElement, InnerElementContext } from "./InnerElement";
|
|
11
|
+
import { useOnClickOutside } from "./useOnClickOutside";
|
|
12
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
13
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
14
|
+
|
|
15
|
+
var paste = /*#__PURE__*/function () {
|
|
16
|
+
var _ref = _asyncToGenerator(function* () {
|
|
17
|
+
var text = yield navigator.clipboard.readText();
|
|
18
|
+
return text;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return function paste() {
|
|
22
|
+
return _ref.apply(this, arguments);
|
|
23
|
+
};
|
|
24
|
+
}();
|
|
25
|
+
|
|
26
|
+
var copy = /*#__PURE__*/function () {
|
|
27
|
+
var _ref2 = _asyncToGenerator(function* (text) {
|
|
28
|
+
yield navigator.clipboard.writeText(text);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
return function copy(_x) {
|
|
32
|
+
return _ref2.apply(this, arguments);
|
|
33
|
+
};
|
|
34
|
+
}();
|
|
35
|
+
|
|
36
|
+
export var DataSheet = _ref3 => {
|
|
37
|
+
var {
|
|
38
|
+
data,
|
|
39
|
+
columns,
|
|
40
|
+
width,
|
|
41
|
+
height,
|
|
42
|
+
onSave,
|
|
43
|
+
onDownload
|
|
44
|
+
} = _ref3;
|
|
45
|
+
var rows = useMemo(() => {
|
|
46
|
+
return data.map(row => {
|
|
47
|
+
return columns.map(_ref4 => {
|
|
48
|
+
var {
|
|
49
|
+
key
|
|
50
|
+
} = _ref4;
|
|
51
|
+
var value = row[key];
|
|
52
|
+
return value;
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}, [data, columns]);
|
|
56
|
+
var history = useRef([]);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
history.current.push(JSON.parse(JSON.stringify(data)));
|
|
59
|
+
}, [data]);
|
|
60
|
+
var handleChangeCheckbox = useCallback(event => {
|
|
61
|
+
var element = event.currentTarget;
|
|
62
|
+
var {
|
|
63
|
+
row,
|
|
64
|
+
column
|
|
65
|
+
} = element.dataset;
|
|
66
|
+
var x = parseInt(row, 10);
|
|
67
|
+
var y = parseInt(column, 10);
|
|
68
|
+
var {
|
|
69
|
+
key
|
|
70
|
+
} = columns[y];
|
|
71
|
+
var copy = JSON.parse(JSON.stringify(data));
|
|
72
|
+
var {
|
|
73
|
+
checked
|
|
74
|
+
} = element;
|
|
75
|
+
copy[x] = _extends({}, copy[x], {
|
|
76
|
+
[key]: checked
|
|
77
|
+
});
|
|
78
|
+
history.current.push(copy);
|
|
79
|
+
}, [data, columns]);
|
|
80
|
+
var handleChangeDataEditor = useCallback(event => {
|
|
81
|
+
var element = event.currentTarget;
|
|
82
|
+
var {
|
|
83
|
+
row,
|
|
84
|
+
column
|
|
85
|
+
} = element.dataset;
|
|
86
|
+
var x = parseInt(row, 10);
|
|
87
|
+
var y = parseInt(column, 10);
|
|
88
|
+
var {
|
|
89
|
+
key
|
|
90
|
+
} = columns[y];
|
|
91
|
+
var copy = JSON.parse(JSON.stringify(data));
|
|
92
|
+
var {
|
|
93
|
+
value
|
|
94
|
+
} = element;
|
|
95
|
+
copy[x] = _extends({}, copy[x], {
|
|
96
|
+
[key]: value
|
|
97
|
+
});
|
|
98
|
+
history.current.push(copy);
|
|
99
|
+
}, [columns, data]);
|
|
100
|
+
/**
|
|
101
|
+
* Select
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
var {
|
|
105
|
+
current: initialSelection
|
|
106
|
+
} = useRef({
|
|
107
|
+
type: "cell",
|
|
108
|
+
active: false,
|
|
109
|
+
start: {
|
|
110
|
+
x: -1,
|
|
111
|
+
y: -1
|
|
112
|
+
},
|
|
113
|
+
end: {
|
|
114
|
+
x: -1,
|
|
115
|
+
y: -1
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
var ref = useRef(null);
|
|
119
|
+
var [selection, setSelection] = useState(initialSelection);
|
|
120
|
+
var handleClickOutside = useCallback(() => {
|
|
121
|
+
setSelection(initialSelection);
|
|
122
|
+
}, [initialSelection]);
|
|
123
|
+
useOnClickOutside(ref, handleClickOutside);
|
|
124
|
+
var handleMouseDown = useCallback(event => {
|
|
125
|
+
if (event.shiftKey) {
|
|
126
|
+
var {
|
|
127
|
+
row,
|
|
128
|
+
column
|
|
129
|
+
} = event.currentTarget.dataset;
|
|
130
|
+
var x = parseInt(row, 10);
|
|
131
|
+
var y = parseInt(column, 10);
|
|
132
|
+
setSelection(prev => _extends({}, prev, {
|
|
133
|
+
type: "cell",
|
|
134
|
+
end: {
|
|
135
|
+
x,
|
|
136
|
+
y
|
|
137
|
+
}
|
|
138
|
+
}));
|
|
139
|
+
} else {
|
|
140
|
+
var {
|
|
141
|
+
row: _row,
|
|
142
|
+
column: _column
|
|
143
|
+
} = event.currentTarget.dataset;
|
|
144
|
+
|
|
145
|
+
var _x2 = parseInt(_row, 10);
|
|
146
|
+
|
|
147
|
+
var _y = parseInt(_column, 10);
|
|
148
|
+
|
|
149
|
+
setSelection(prev => {
|
|
150
|
+
if (prev.active === true) return prev;
|
|
151
|
+
return {
|
|
152
|
+
type: "cell",
|
|
153
|
+
active: true,
|
|
154
|
+
start: {
|
|
155
|
+
x: _x2,
|
|
156
|
+
y: _y
|
|
157
|
+
},
|
|
158
|
+
end: {
|
|
159
|
+
x: _x2,
|
|
160
|
+
y: _y
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}, []);
|
|
166
|
+
var handleMouseOver = useCallback(event => {
|
|
167
|
+
var {
|
|
168
|
+
row,
|
|
169
|
+
column
|
|
170
|
+
} = event.currentTarget.dataset;
|
|
171
|
+
var x = parseInt(row, 10);
|
|
172
|
+
var y = parseInt(column, 10);
|
|
173
|
+
setSelection(prev => {
|
|
174
|
+
if (prev.active === false) return prev;
|
|
175
|
+
|
|
176
|
+
if (prev.type === "cell") {
|
|
177
|
+
return _extends({}, prev, {
|
|
178
|
+
end: {
|
|
179
|
+
x,
|
|
180
|
+
y
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (prev.type === "column") {
|
|
186
|
+
return _extends({}, prev, {
|
|
187
|
+
end: {
|
|
188
|
+
x: prev.end.x,
|
|
189
|
+
y
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (prev.type === "row") {
|
|
195
|
+
return _extends({}, prev, {
|
|
196
|
+
end: {
|
|
197
|
+
x,
|
|
198
|
+
y: prev.end.y
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return prev;
|
|
204
|
+
});
|
|
205
|
+
}, []);
|
|
206
|
+
var handleShiftKeyUp = useCallback(() => {
|
|
207
|
+
setSelection(prev => _extends({}, prev, {
|
|
208
|
+
active: false
|
|
209
|
+
}));
|
|
210
|
+
document.removeEventListener("keyup", handleShiftKeyUp);
|
|
211
|
+
}, []);
|
|
212
|
+
var handleMouseUp = useCallback(event => {
|
|
213
|
+
if (event.shiftKey) {
|
|
214
|
+
setSelection(prev => {
|
|
215
|
+
return _extends({}, prev, {
|
|
216
|
+
active: true
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
document.addEventListener("keyup", handleShiftKeyUp, {
|
|
220
|
+
capture: true
|
|
221
|
+
});
|
|
222
|
+
} else {
|
|
223
|
+
setSelection(prev => {
|
|
224
|
+
return _extends({}, prev, {
|
|
225
|
+
active: false
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}, [handleShiftKeyUp]);
|
|
230
|
+
/** Column */
|
|
231
|
+
|
|
232
|
+
var handleSelectColumn = useCallback(event => {
|
|
233
|
+
var {
|
|
234
|
+
column
|
|
235
|
+
} = event.currentTarget.dataset;
|
|
236
|
+
var y = parseInt(column, 10);
|
|
237
|
+
setSelection({
|
|
238
|
+
type: "column",
|
|
239
|
+
active: false,
|
|
240
|
+
start: {
|
|
241
|
+
x: 0,
|
|
242
|
+
y
|
|
243
|
+
},
|
|
244
|
+
end: {
|
|
245
|
+
x: data.length - 1,
|
|
246
|
+
y
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
}, [data.length]);
|
|
250
|
+
var handleMouseDownColumn = useCallback(event => {
|
|
251
|
+
var {
|
|
252
|
+
column
|
|
253
|
+
} = event.currentTarget.dataset;
|
|
254
|
+
var y = parseInt(column, 10);
|
|
255
|
+
setSelection({
|
|
256
|
+
type: "column",
|
|
257
|
+
active: true,
|
|
258
|
+
start: {
|
|
259
|
+
x: 0,
|
|
260
|
+
y
|
|
261
|
+
},
|
|
262
|
+
end: {
|
|
263
|
+
x: data.length - 1,
|
|
264
|
+
y
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
}, [data.length]);
|
|
268
|
+
var handleMouseOverColumn = useCallback(event => {
|
|
269
|
+
var {
|
|
270
|
+
column
|
|
271
|
+
} = event.currentTarget.dataset;
|
|
272
|
+
var y = parseInt(column, 10);
|
|
273
|
+
setSelection(prev => {
|
|
274
|
+
if (prev.active === false || prev.type !== "column") return prev;
|
|
275
|
+
return _extends({}, prev, {
|
|
276
|
+
end: {
|
|
277
|
+
x: data.length - 1,
|
|
278
|
+
y
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
}, [data.length]);
|
|
283
|
+
var handleMouseUpColumn = useCallback(() => {
|
|
284
|
+
setSelection(prev => {
|
|
285
|
+
return _extends({}, prev, {
|
|
286
|
+
active: false
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
}, []);
|
|
290
|
+
/** Row */
|
|
291
|
+
|
|
292
|
+
var handleSelectRow = useCallback(event => {
|
|
293
|
+
var {
|
|
294
|
+
row
|
|
295
|
+
} = event.currentTarget.dataset;
|
|
296
|
+
var x = parseInt(row, 10);
|
|
297
|
+
setSelection({
|
|
298
|
+
type: "row",
|
|
299
|
+
active: false,
|
|
300
|
+
start: {
|
|
301
|
+
x,
|
|
302
|
+
y: 0
|
|
303
|
+
},
|
|
304
|
+
end: {
|
|
305
|
+
x,
|
|
306
|
+
y: columns.length - 1
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
}, [columns.length]);
|
|
310
|
+
var handleMouseDownRow = useCallback(event => {
|
|
311
|
+
var {
|
|
312
|
+
row
|
|
313
|
+
} = event.currentTarget.dataset;
|
|
314
|
+
var x = parseInt(row, 10);
|
|
315
|
+
setSelection({
|
|
316
|
+
type: "row",
|
|
317
|
+
active: true,
|
|
318
|
+
start: {
|
|
319
|
+
x,
|
|
320
|
+
y: 0
|
|
321
|
+
},
|
|
322
|
+
end: {
|
|
323
|
+
x,
|
|
324
|
+
y: columns.length - 1
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
}, [columns.length]);
|
|
328
|
+
var handleMouseOverRow = useCallback(event => {
|
|
329
|
+
var {
|
|
330
|
+
row
|
|
331
|
+
} = event.currentTarget.dataset;
|
|
332
|
+
var x = parseInt(row, 10);
|
|
333
|
+
setSelection(prev => {
|
|
334
|
+
if (prev.active === false || prev.type !== "row") return prev;
|
|
335
|
+
return _extends({}, prev, {
|
|
336
|
+
end: {
|
|
337
|
+
x,
|
|
338
|
+
y: columns.length - 1
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
}, [columns.length]);
|
|
343
|
+
var handleMouseUpRow = useCallback(() => {
|
|
344
|
+
setSelection(prev => {
|
|
345
|
+
return _extends({}, prev, {
|
|
346
|
+
active: false
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
}, []);
|
|
350
|
+
/** All */
|
|
351
|
+
|
|
352
|
+
var handleSelectAll = useCallback(() => {
|
|
353
|
+
setSelection({
|
|
354
|
+
type: "all",
|
|
355
|
+
active: false,
|
|
356
|
+
start: {
|
|
357
|
+
x: 0,
|
|
358
|
+
y: 0
|
|
359
|
+
},
|
|
360
|
+
end: {
|
|
361
|
+
x: data.length - 1,
|
|
362
|
+
y: columns.length - 1
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
}, [data.length, columns.length]);
|
|
366
|
+
useEffect(() => {
|
|
367
|
+
document.addEventListener("mouseup", handleMouseUp, {
|
|
368
|
+
passive: true
|
|
369
|
+
});
|
|
370
|
+
return () => {
|
|
371
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
372
|
+
document.removeEventListener("keyup", handleShiftKeyUp);
|
|
373
|
+
};
|
|
374
|
+
}, [handleMouseUp, handleShiftKeyUp]);
|
|
375
|
+
var isSelection = useCallback(current => {
|
|
376
|
+
var {
|
|
377
|
+
start,
|
|
378
|
+
end
|
|
379
|
+
} = selection;
|
|
380
|
+
var posX = current.y >= start.y && current.y <= end.y;
|
|
381
|
+
var negX = current.y <= start.y && current.y >= end.y;
|
|
382
|
+
var posY = current.x >= start.x && current.x <= end.x;
|
|
383
|
+
var negY = current.x <= start.x && current.x >= end.x;
|
|
384
|
+
return posX && posY || negX && posY || negX && negY || posX && negY;
|
|
385
|
+
}, [selection]);
|
|
386
|
+
/**
|
|
387
|
+
* Keycode
|
|
388
|
+
*/
|
|
389
|
+
|
|
390
|
+
var handleKeyDown = useCallback(event => {
|
|
391
|
+
switch (event.key) {
|
|
392
|
+
case "ArrowUp":
|
|
393
|
+
{
|
|
394
|
+
setSelection(prev => {
|
|
395
|
+
if (prev.start.x === 0) return prev;
|
|
396
|
+
return _extends({}, prev, {
|
|
397
|
+
start: {
|
|
398
|
+
x: prev.start.x - 1,
|
|
399
|
+
y: prev.start.y
|
|
400
|
+
},
|
|
401
|
+
end: {
|
|
402
|
+
x: prev.start.x - 1,
|
|
403
|
+
y: prev.start.y
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
});
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
case "ArrowRight":
|
|
411
|
+
setSelection(prev => {
|
|
412
|
+
if (prev.start.y === columns.length - 1) return prev;
|
|
413
|
+
return _extends({}, prev, {
|
|
414
|
+
start: {
|
|
415
|
+
x: prev.start.x,
|
|
416
|
+
y: prev.start.y + 1
|
|
417
|
+
},
|
|
418
|
+
end: {
|
|
419
|
+
x: prev.start.x,
|
|
420
|
+
y: prev.start.y + 1
|
|
421
|
+
}
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
break;
|
|
425
|
+
|
|
426
|
+
case "ArrowDown":
|
|
427
|
+
setSelection(prev => {
|
|
428
|
+
if (prev.start.x === data.length - 1) return prev;
|
|
429
|
+
return _extends({}, prev, {
|
|
430
|
+
start: {
|
|
431
|
+
x: prev.start.x + 1,
|
|
432
|
+
y: prev.start.y
|
|
433
|
+
},
|
|
434
|
+
end: {
|
|
435
|
+
x: prev.start.x + 1,
|
|
436
|
+
y: prev.start.y
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
break;
|
|
441
|
+
|
|
442
|
+
case "ArrowLeft":
|
|
443
|
+
setSelection(prev => {
|
|
444
|
+
if (prev.start.y === 0) return prev;
|
|
445
|
+
return _extends({}, prev, {
|
|
446
|
+
start: {
|
|
447
|
+
x: prev.start.x,
|
|
448
|
+
y: prev.start.y - 1
|
|
449
|
+
},
|
|
450
|
+
end: {
|
|
451
|
+
x: prev.start.x,
|
|
452
|
+
y: prev.start.y - 1
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
});
|
|
456
|
+
break;
|
|
457
|
+
|
|
458
|
+
default:
|
|
459
|
+
break;
|
|
460
|
+
}
|
|
461
|
+
}, [columns.length, data.length]);
|
|
462
|
+
useEffect(() => {
|
|
463
|
+
var getClipBoardText = /*#__PURE__*/function () {
|
|
464
|
+
var _ref5 = _asyncToGenerator(function* () {
|
|
465
|
+
if (selection.start.x > -1 && selection.start.y > -1) {
|
|
466
|
+
var text = yield paste();
|
|
467
|
+
|
|
468
|
+
if (text) {
|
|
469
|
+
var minX = Math.min(selection.start.x, selection.end.x);
|
|
470
|
+
var minY = Math.min(selection.start.y, selection.end.y);
|
|
471
|
+
var dataToInsert = text.split(/\n/g).map(row => row.split(/\t/g));
|
|
472
|
+
var rowLength = dataToInsert.length;
|
|
473
|
+
var columnLength = dataToInsert[0].length;
|
|
474
|
+
var _copy = [...data];
|
|
475
|
+
|
|
476
|
+
for (var i = 0; i < rowLength; i++) {
|
|
477
|
+
for (var j = 0; j < columnLength; j++) {
|
|
478
|
+
var column = columns[minY + j];
|
|
479
|
+
if (column === undefined) continue;
|
|
480
|
+
var {
|
|
481
|
+
key: _key,
|
|
482
|
+
readonly,
|
|
483
|
+
type
|
|
484
|
+
} = column;
|
|
485
|
+
|
|
486
|
+
if (_key && _copy[minX + i] && !readonly) {
|
|
487
|
+
var value = dataToInsert[i][j];
|
|
488
|
+
|
|
489
|
+
if (type === "checkbox") {
|
|
490
|
+
_copy[minX + i][_key] = value === "false" ? false : value === "true" ? true : value;
|
|
491
|
+
} else {
|
|
492
|
+
_copy[minX + i][_key] = value;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
if (onSave) {
|
|
499
|
+
onSave(_copy);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
return function getClipBoardText() {
|
|
506
|
+
return _ref5.apply(this, arguments);
|
|
507
|
+
};
|
|
508
|
+
}();
|
|
509
|
+
|
|
510
|
+
document.addEventListener("paste", getClipBoardText, {
|
|
511
|
+
capture: true
|
|
512
|
+
});
|
|
513
|
+
return () => {
|
|
514
|
+
document.removeEventListener("paste", getClipBoardText);
|
|
515
|
+
};
|
|
516
|
+
}, [columns, data, onSave, selection.end.x, selection.end.y, selection.start.x, selection.start.y]);
|
|
517
|
+
useEffect(() => {
|
|
518
|
+
var handleCopy = /*#__PURE__*/function () {
|
|
519
|
+
var _ref6 = _asyncToGenerator(function* () {
|
|
520
|
+
if (selection.start.x > -1 && selection.start.y > -1) {
|
|
521
|
+
var minX = Math.min(selection.start.x, selection.end.x);
|
|
522
|
+
var maxX = Math.max(selection.start.x, selection.end.x);
|
|
523
|
+
var minY = Math.min(selection.start.y, selection.end.y);
|
|
524
|
+
var maxY = Math.max(selection.start.y, selection.end.y);
|
|
525
|
+
var selectedKeys = [...columns].splice(minY, maxY - minY + 1).map(e => e.key);
|
|
526
|
+
var selectedData = [...data].splice(minX, maxX - minX + 1);
|
|
527
|
+
var result = selectedData.map(row => {
|
|
528
|
+
return selectedKeys.map(key => {
|
|
529
|
+
return row[key];
|
|
530
|
+
}).join("\t");
|
|
531
|
+
}).join("\n");
|
|
532
|
+
|
|
533
|
+
if (result) {
|
|
534
|
+
yield copy(result);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
return function handleCopy() {
|
|
540
|
+
return _ref6.apply(this, arguments);
|
|
541
|
+
};
|
|
542
|
+
}();
|
|
543
|
+
|
|
544
|
+
document.addEventListener("copy", handleCopy, {
|
|
545
|
+
capture: true
|
|
546
|
+
});
|
|
547
|
+
return () => {
|
|
548
|
+
document.removeEventListener("copy", handleCopy);
|
|
549
|
+
};
|
|
550
|
+
}, [columns, data, selection.end.x, selection.end.y, selection.start.x, selection.start.y]);
|
|
551
|
+
var isSelectColumn = useCallback(index => {
|
|
552
|
+
if (selection.type !== "column") return false;
|
|
553
|
+
return selection.start.y <= index && index <= selection.end.y || selection.start.y >= index && index >= selection.end.y;
|
|
554
|
+
}, [selection.end.y, selection.start.y, selection.type]);
|
|
555
|
+
var isSelectRow = useCallback(index => {
|
|
556
|
+
if (selection.type !== "row") return false;
|
|
557
|
+
return selection.start.x <= index && index <= selection.end.x || selection.start.x >= index && index >= selection.end.x;
|
|
558
|
+
}, [selection.end.x, selection.start.x, selection.type]);
|
|
559
|
+
return ___EmotionJSX("div", null, onDownload ? ___EmotionJSX(Controller, {
|
|
560
|
+
style: {
|
|
561
|
+
maxWidth: width
|
|
562
|
+
}
|
|
563
|
+
}, onDownload ? ___EmotionJSX(DownloadButton, {
|
|
564
|
+
onClick: () => {
|
|
565
|
+
var result = [columns.map(column => column.title)].concat(data.map(row => {
|
|
566
|
+
return columns.map(_ref7 => {
|
|
567
|
+
var {
|
|
568
|
+
key
|
|
569
|
+
} = _ref7;
|
|
570
|
+
return row[key];
|
|
571
|
+
});
|
|
572
|
+
}));
|
|
573
|
+
onDownload(result);
|
|
574
|
+
}
|
|
575
|
+
}) : null) : null, ___EmotionJSX(InnerElementContext.Provider, {
|
|
576
|
+
value: {
|
|
577
|
+
handleSelectAll,
|
|
578
|
+
handleSelectColumn,
|
|
579
|
+
handleMouseDownColumn,
|
|
580
|
+
handleMouseOverColumn,
|
|
581
|
+
handleMouseUpColumn,
|
|
582
|
+
isSelectColumn,
|
|
583
|
+
handleKeyDown,
|
|
584
|
+
columns: columns
|
|
585
|
+
}
|
|
586
|
+
}, ___EmotionJSX(Grid, {
|
|
587
|
+
style: {
|
|
588
|
+
maxWidth: "100%"
|
|
589
|
+
},
|
|
590
|
+
innerElementType: InnerElement,
|
|
591
|
+
innerRef: ref,
|
|
592
|
+
columnCount: columns.length + 1,
|
|
593
|
+
rowCount: data.length,
|
|
594
|
+
height: height,
|
|
595
|
+
width: width,
|
|
596
|
+
columnWidth: index => index === 0 ? 32 : columns[index - 1].width,
|
|
597
|
+
rowHeight: () => 24,
|
|
598
|
+
itemData: {
|
|
599
|
+
columns,
|
|
600
|
+
handleSelectRow,
|
|
601
|
+
handleMouseDownRow,
|
|
602
|
+
handleMouseOverRow,
|
|
603
|
+
handleMouseUpRow,
|
|
604
|
+
isSelectRow,
|
|
605
|
+
rows,
|
|
606
|
+
handleChangeDataEditor,
|
|
607
|
+
isSelection,
|
|
608
|
+
data,
|
|
609
|
+
handleMouseDown,
|
|
610
|
+
handleMouseOver,
|
|
611
|
+
handleChangeCheckbox
|
|
612
|
+
}
|
|
613
|
+
}, CustomCell)));
|
|
614
|
+
};
|
|
615
|
+
//# sourceMappingURL=DataSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataSheet.js","names":["Controller","DownloadButton","CustomCell","VariableSizeGrid","Grid","InnerElement","InnerElementContext","useOnClickOutside","React","useCallback","useEffect","useMemo","useRef","useState","paste","text","navigator","clipboard","readText","copy","writeText","DataSheet","data","columns","width","height","onSave","onDownload","rows","map","row","key","value","history","current","push","JSON","parse","stringify","handleChangeCheckbox","event","element","currentTarget","column","dataset","x","parseInt","y","checked","handleChangeDataEditor","initialSelection","type","active","start","end","ref","selection","setSelection","handleClickOutside","handleMouseDown","shiftKey","prev","handleMouseOver","handleShiftKeyUp","document","removeEventListener","handleMouseUp","addEventListener","capture","handleSelectColumn","length","handleMouseDownColumn","handleMouseOverColumn","handleMouseUpColumn","handleSelectRow","handleMouseDownRow","handleMouseOverRow","handleMouseUpRow","handleSelectAll","passive","isSelection","posX","negX","posY","negY","handleKeyDown","getClipBoardText","minX","Math","min","minY","dataToInsert","split","rowLength","columnLength","i","j","undefined","readonly","handleCopy","maxX","max","maxY","selectedKeys","splice","e","selectedData","result","join","isSelectColumn","index","isSelectRow","maxWidth","title","concat"],"sources":["../../src/DataSheet.tsx"],"sourcesContent":["import { Controller, DownloadButton } from \"./Controller\";\nimport { CustomCell } from \"./CustomCell\";\nimport { VariableSizeGrid as Grid } from \"react-window\";\nimport { InnerElement, InnerElementContext } from \"./InnerElement\";\nimport { useOnClickOutside } from \"./useOnClickOutside\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nconst paste = async () => {\n const text = await navigator.clipboard.readText();\n return text;\n};\n\nconst copy = async (text: string) => {\n await navigator.clipboard.writeText(text);\n};\n\nexport type DataRow = {\n [key: string]: string | undefined | boolean | number;\n};\n\nexport type DataColumn<R extends DataRow> = {\n [S in keyof R]: {\n key: S;\n title: string;\n Header?: (props: { title: string }) => React.ReactElement | null;\n type?: \"number\" | \"date\" | \"text\" | \"select\" | \"checkbox\";\n readonly?: boolean;\n validator?: (props: { row: R }) => boolean | string;\n // formatter?: (value: R[S], props: { row: R }) => string\n list?: string[] | ((props: { row: R }) => string[]);\n width: number;\n };\n}[keyof R];\n\nexport interface DataSheetProps<R extends DataRow = DataRow> {\n width: number;\n height: number;\n readonly columns: DataColumn<R>[];\n readonly data: R[];\n readonly onSave?: (data: R[]) => void;\n readonly onDownload?: (data: string[][]) => void;\n}\n\nexport const DataSheet = <R extends DataRow>({\n data,\n columns,\n width,\n height,\n onSave,\n onDownload,\n}: DataSheetProps<R>) => {\n const rows = useMemo(() => {\n return data.map((row) => {\n return columns.map(({ key }) => {\n const value = row[key];\n return value;\n });\n });\n }, [data, columns]);\n\n const history = useRef<typeof data[]>([]);\n\n useEffect(() => {\n history.current.push(JSON.parse(JSON.stringify(data)));\n }, [data]);\n\n const handleChangeCheckbox = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const element = event.currentTarget;\n const { row, column } = element.dataset;\n const x = parseInt(row!, 10);\n const y = parseInt(column!, 10);\n const { key } = columns[y];\n const copy: R[] = JSON.parse(JSON.stringify(data));\n const { checked } = element;\n copy[x] = {\n ...copy[x],\n [key]: checked,\n };\n history.current.push(copy);\n },\n [data, columns]\n );\n\n const handleChangeDataEditor = useCallback(\n (event: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {\n const element = event.currentTarget;\n const { row, column } = element.dataset;\n const x = parseInt(row!, 10);\n const y = parseInt(column!, 10);\n const { key } = columns[y];\n const copy: R[] = JSON.parse(JSON.stringify(data));\n const { value } = element;\n copy[x] = {\n ...copy[x],\n [key]: value,\n };\n history.current.push(copy);\n },\n [columns, data]\n );\n\n /**\n * Select\n */\n const { current: initialSelection } = useRef<{\n type: \"cell\" | \"column\" | \"row\" | \"all\";\n active: boolean;\n start: {\n x: number;\n y: number;\n };\n end: {\n x: number;\n y: number;\n };\n }>({\n type: \"cell\",\n active: false,\n start: { x: -1, y: -1 },\n end: { x: -1, y: -1 },\n });\n const ref = useRef<HTMLTableElement>(null);\n\n const [selection, setSelection] = useState(initialSelection);\n\n const handleClickOutside = useCallback(() => {\n setSelection(initialSelection);\n }, [initialSelection]);\n useOnClickOutside(ref, handleClickOutside);\n\n const handleMouseDown = useCallback(\n (event: React.MouseEvent<HTMLTableDataCellElement, MouseEvent>) => {\n if (event.shiftKey) {\n const { row, column } = event.currentTarget.dataset;\n const x = parseInt(row!, 10);\n const y = parseInt(column!, 10);\n setSelection((prev) => ({\n ...prev,\n type: \"cell\",\n end: { x, y },\n }));\n } else {\n const { row, column } = event.currentTarget.dataset;\n const x = parseInt(row!, 10);\n const y = parseInt(column!, 10);\n setSelection((prev) => {\n if (prev.active === true) return prev;\n return {\n type: \"cell\",\n active: true,\n start: { x, y },\n end: { x, y },\n };\n });\n }\n },\n []\n );\n\n const handleMouseOver = useCallback(\n (event: React.MouseEvent<HTMLTableDataCellElement, MouseEvent>) => {\n const { row, column } = event.currentTarget.dataset;\n const x = parseInt(row!, 10);\n const y = parseInt(column!, 10);\n setSelection((prev) => {\n if (prev.active === false) return prev;\n if (prev.type === \"cell\") {\n return {\n ...prev,\n end: {\n x,\n y,\n },\n };\n }\n if (prev.type === \"column\") {\n return {\n ...prev,\n end: {\n x: prev.end.x,\n y,\n },\n };\n }\n if (prev.type === \"row\") {\n return {\n ...prev,\n end: {\n x,\n y: prev.end.y,\n },\n };\n }\n return prev;\n });\n },\n []\n );\n\n const handleShiftKeyUp = useCallback(() => {\n setSelection((prev) => ({\n ...prev,\n active: false,\n }));\n document.removeEventListener(\"keyup\", handleShiftKeyUp);\n }, []);\n\n const handleMouseUp = useCallback(\n (event: MouseEvent) => {\n if (event.shiftKey) {\n setSelection((prev) => {\n return {\n ...prev,\n active: true,\n };\n });\n document.addEventListener(\"keyup\", handleShiftKeyUp, {\n capture: true,\n });\n } else {\n setSelection((prev) => {\n return {\n ...prev,\n active: false,\n };\n });\n }\n },\n [handleShiftKeyUp]\n );\n\n /** Column */\n const handleSelectColumn = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n const { column } = event.currentTarget.dataset;\n const y = parseInt(column!, 10);\n setSelection({\n type: \"column\",\n active: false,\n start: {\n x: 0,\n y,\n },\n end: {\n x: data.length - 1,\n y,\n },\n });\n },\n [data.length]\n );\n const handleMouseDownColumn = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n const { column } = event.currentTarget.dataset;\n\n const y = parseInt(column!, 10);\n setSelection({\n type: \"column\",\n active: true,\n start: {\n x: 0,\n y,\n },\n end: {\n x: data.length - 1,\n y,\n },\n });\n },\n [data.length]\n );\n const handleMouseOverColumn = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n const { column } = event.currentTarget.dataset;\n const y = parseInt(column!, 10);\n\n setSelection((prev) => {\n if (prev.active === false || prev.type !== \"column\") return prev;\n return {\n ...prev,\n end: {\n x: data.length - 1,\n y,\n },\n };\n });\n },\n [data.length]\n );\n const handleMouseUpColumn = useCallback(() => {\n setSelection((prev) => {\n return {\n ...prev,\n active: false,\n };\n });\n }, []);\n\n /** Row */\n const handleSelectRow = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n const { row } = event.currentTarget.dataset;\n const x = parseInt(row!, 10);\n setSelection({\n type: \"row\",\n active: false,\n start: {\n x,\n y: 0,\n },\n end: {\n x,\n y: columns.length - 1,\n },\n });\n },\n [columns.length]\n );\n const handleMouseDownRow = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n const { row } = event.currentTarget.dataset;\n const x = parseInt(row!, 10);\n setSelection({\n type: \"row\",\n active: true,\n start: {\n x,\n y: 0,\n },\n end: {\n x,\n y: columns.length - 1,\n },\n });\n },\n [columns.length]\n );\n const handleMouseOverRow = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n const { row } = event.currentTarget.dataset;\n const x = parseInt(row!, 10);\n setSelection((prev) => {\n if (prev.active === false || prev.type !== \"row\") return prev;\n return {\n ...prev,\n end: {\n x,\n y: columns.length - 1,\n },\n };\n });\n },\n [columns.length]\n );\n const handleMouseUpRow = useCallback(() => {\n setSelection((prev) => {\n return {\n ...prev,\n active: false,\n };\n });\n }, []);\n\n /** All */\n\n const handleSelectAll = useCallback(() => {\n setSelection({\n type: \"all\",\n active: false,\n start: {\n x: 0,\n y: 0,\n },\n end: {\n x: data.length - 1,\n y: columns.length - 1,\n },\n });\n }, [data.length, columns.length]);\n useEffect(() => {\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: true });\n return () => {\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"keyup\", handleShiftKeyUp);\n };\n }, [handleMouseUp, handleShiftKeyUp]);\n const isSelection = useCallback(\n (current: { x: number; y: number }) => {\n const { start, end } = selection;\n\n const posX = current.y >= start.y && current.y <= end.y;\n const negX = current.y <= start.y && current.y >= end.y;\n const posY = current.x >= start.x && current.x <= end.x;\n const negY = current.x <= start.x && current.x >= end.x;\n\n return (\n (posX && posY) || (negX && posY) || (negX && negY) || (posX && negY)\n );\n },\n [selection]\n );\n\n /**\n * Keycode\n */\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case \"ArrowUp\": {\n setSelection((prev) => {\n if (prev.start.x === 0) return prev;\n return {\n ...prev,\n start: { x: prev.start.x - 1, y: prev.start.y },\n end: { x: prev.start.x - 1, y: prev.start.y },\n };\n });\n break;\n }\n case \"ArrowRight\":\n setSelection((prev) => {\n if (prev.start.y === columns.length - 1) return prev;\n return {\n ...prev,\n start: { x: prev.start.x, y: prev.start.y + 1 },\n end: { x: prev.start.x, y: prev.start.y + 1 },\n };\n });\n break;\n case \"ArrowDown\":\n setSelection((prev) => {\n if (prev.start.x === data.length - 1) return prev;\n return {\n ...prev,\n start: { x: prev.start.x + 1, y: prev.start.y },\n end: { x: prev.start.x + 1, y: prev.start.y },\n };\n });\n break;\n case \"ArrowLeft\":\n setSelection((prev) => {\n if (prev.start.y === 0) return prev;\n return {\n ...prev,\n start: { x: prev.start.x, y: prev.start.y - 1 },\n end: { x: prev.start.x, y: prev.start.y - 1 },\n };\n });\n break;\n default:\n break;\n }\n },\n [columns.length, data.length]\n );\n\n useEffect(() => {\n const getClipBoardText = async () => {\n if (selection.start.x > -1 && selection.start.y > -1) {\n const text = await paste();\n if (text) {\n const minX = Math.min(selection.start.x, selection.end.x);\n const minY = Math.min(selection.start.y, selection.end.y);\n const dataToInsert = text.split(/\\n/g).map((row) => row.split(/\\t/g));\n const rowLength = dataToInsert.length;\n const columnLength = dataToInsert[0].length;\n const copy = [...data];\n for (let i = 0; i < rowLength; i++) {\n for (let j = 0; j < columnLength; j++) {\n const column = columns[minY + j];\n if (column === undefined) continue;\n const { key, readonly, type } = column;\n if (key && copy[minX + i] && !readonly) {\n const value = dataToInsert[i][j];\n if (type === \"checkbox\") {\n copy[minX + i][key] = (\n value === \"false\" ? false : value === \"true\" ? true : value\n ) as R[keyof R];\n } else {\n copy[minX + i][key] = value as R[keyof R];\n }\n }\n }\n }\n if (onSave) {\n onSave(copy);\n }\n }\n }\n };\n\n document.addEventListener(\"paste\", getClipBoardText, { capture: true });\n return () => {\n document.removeEventListener(\"paste\", getClipBoardText);\n };\n }, [\n columns,\n data,\n onSave,\n selection.end.x,\n selection.end.y,\n selection.start.x,\n selection.start.y,\n ]);\n\n useEffect(() => {\n const handleCopy = async () => {\n if (selection.start.x > -1 && selection.start.y > -1) {\n const minX = Math.min(selection.start.x, selection.end.x);\n const maxX = Math.max(selection.start.x, selection.end.x);\n const minY = Math.min(selection.start.y, selection.end.y);\n const maxY = Math.max(selection.start.y, selection.end.y);\n const selectedKeys = [...columns]\n .splice(minY, maxY - minY + 1)\n .map((e) => e.key);\n const selectedData = [...data].splice(minX, maxX - minX + 1);\n\n const result = selectedData\n .map((row) => {\n return selectedKeys\n .map((key) => {\n return row[key];\n })\n .join(\"\\t\");\n })\n .join(\"\\n\");\n if (result) {\n await copy(result);\n }\n }\n };\n document.addEventListener(\"copy\", handleCopy, { capture: true });\n return () => {\n document.removeEventListener(\"copy\", handleCopy);\n };\n }, [\n columns,\n data,\n selection.end.x,\n selection.end.y,\n selection.start.x,\n selection.start.y,\n ]);\n\n const isSelectColumn = useCallback(\n (index: number) => {\n if (selection.type !== \"column\") return false;\n return (\n (selection.start.y <= index && index <= selection.end.y) ||\n (selection.start.y >= index && index >= selection.end.y)\n );\n },\n [selection.end.y, selection.start.y, selection.type]\n );\n const isSelectRow = useCallback(\n (index: number) => {\n if (selection.type !== \"row\") return false;\n return (\n (selection.start.x <= index && index <= selection.end.x) ||\n (selection.start.x >= index && index >= selection.end.x)\n );\n },\n [selection.end.x, selection.start.x, selection.type]\n );\n\n return (\n <div>\n {onDownload ? (\n <Controller style={{ maxWidth: width }}>\n {onDownload ? (\n <DownloadButton\n onClick={() => {\n const result = [columns.map((column) => column.title)].concat(\n data.map((row) => {\n return columns.map(({ key }) => {\n return row[key] as string;\n });\n })\n );\n onDownload(result);\n }}\n />\n ) : null}\n </Controller>\n ) : null}\n\n <InnerElementContext.Provider\n value={{\n handleSelectAll,\n handleSelectColumn,\n handleMouseDownColumn,\n handleMouseOverColumn,\n handleMouseUpColumn,\n isSelectColumn,\n handleKeyDown,\n columns: columns as DataColumn<DataRow>[],\n }}\n >\n <Grid\n style={{ maxWidth: \"100%\" }}\n innerElementType={InnerElement}\n innerRef={ref}\n columnCount={columns.length + 1}\n rowCount={data.length}\n height={height}\n width={width}\n columnWidth={(index) => (index === 0 ? 32 : columns[index - 1].width)}\n rowHeight={() => 24}\n itemData={{\n columns,\n handleSelectRow,\n handleMouseDownRow,\n handleMouseOverRow,\n handleMouseUpRow,\n isSelectRow,\n rows,\n handleChangeDataEditor,\n isSelection,\n data,\n handleMouseDown,\n handleMouseOver,\n handleChangeCheckbox,\n }}\n >\n {CustomCell}\n </Grid>\n </InnerElementContext.Provider>\n </div>\n );\n};\n"],"mappings":"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"}
|