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.
Files changed (122) hide show
  1. package/{dist/types/Cell.d.ts → Cell.d.ts} +1 -1
  2. package/Cell.js +95 -0
  3. package/Cell.js.map +1 -0
  4. package/{dist/types/Controller.d.ts → Controller.d.ts} +0 -0
  5. package/Controller.js +56 -0
  6. package/Controller.js.map +1 -0
  7. package/{dist/types/CustomCell.d.ts → CustomCell.d.ts} +0 -0
  8. package/{dist/esm/CustomCell.js → CustomCell.js} +12 -3
  9. package/CustomCell.js.map +1 -0
  10. package/DataSheet.d.ts +31 -0
  11. package/{dist/esm/DataSheet.js → DataSheet.js} +3 -5
  12. package/DataSheet.js.map +1 -0
  13. package/{dist/types/DataSheetCheckbox.d.ts → DataSheetCheckbox.d.ts} +0 -0
  14. package/DataSheetCheckbox.js +48 -0
  15. package/DataSheetCheckbox.js.map +1 -0
  16. package/{dist/types/DataSheetInput.d.ts → DataSheetInput.d.ts} +0 -0
  17. package/DataSheetInput.js +27 -0
  18. package/DataSheetInput.js.map +1 -0
  19. package/{dist/types/DataSheetSelect.d.ts → DataSheetSelect.d.ts} +0 -0
  20. package/DataSheetSelect.js +24 -0
  21. package/DataSheetSelect.js.map +1 -0
  22. package/InnerElement.d.ts +16 -0
  23. package/InnerElement.js +110 -0
  24. package/InnerElement.js.map +1 -0
  25. package/README.md +74 -76
  26. package/cjs/Cell.js +105 -0
  27. package/cjs/Cell.js.map +1 -0
  28. package/cjs/Controller.js +68 -0
  29. package/cjs/Controller.js.map +1 -0
  30. package/{dist/cjs → cjs}/CustomCell.js +12 -4
  31. package/cjs/CustomCell.js.map +1 -0
  32. package/{dist/cjs → cjs}/DataSheet.js +3 -5
  33. package/cjs/DataSheet.js.map +1 -0
  34. package/cjs/DataSheetCheckbox.js +51 -0
  35. package/cjs/DataSheetCheckbox.js.map +1 -0
  36. package/cjs/DataSheetInput.js +36 -0
  37. package/cjs/DataSheetInput.js.map +1 -0
  38. package/cjs/DataSheetSelect.js +33 -0
  39. package/cjs/DataSheetSelect.js.map +1 -0
  40. package/cjs/InnerElement.js +115 -0
  41. package/cjs/InnerElement.js.map +1 -0
  42. package/{dist/cjs → cjs}/index.js +0 -0
  43. package/cjs/index.js.map +1 -0
  44. package/{dist/cjs → cjs}/useOnClickOutside.js +0 -0
  45. package/cjs/useOnClickOutside.js.map +1 -0
  46. package/esm/Cell.js +95 -0
  47. package/esm/Cell.js.map +1 -0
  48. package/esm/Controller.js +56 -0
  49. package/esm/Controller.js.map +1 -0
  50. package/esm/CustomCell.js +123 -0
  51. package/esm/CustomCell.js.map +1 -0
  52. package/esm/DataSheet.js +615 -0
  53. package/esm/DataSheet.js.map +1 -0
  54. package/esm/DataSheetCheckbox.js +48 -0
  55. package/esm/DataSheetCheckbox.js.map +1 -0
  56. package/esm/DataSheetInput.js +27 -0
  57. package/esm/DataSheetInput.js.map +1 -0
  58. package/esm/DataSheetSelect.js +24 -0
  59. package/esm/DataSheetSelect.js.map +1 -0
  60. package/esm/InnerElement.js +110 -0
  61. package/esm/InnerElement.js.map +1 -0
  62. package/{dist/esm → esm}/index.js +0 -0
  63. package/esm/index.js.map +1 -0
  64. package/{dist/esm → esm}/useOnClickOutside.js +0 -0
  65. package/esm/useOnClickOutside.js.map +1 -0
  66. package/{dist/types/index.d.ts → index.d.ts} +0 -0
  67. package/index.js +4 -0
  68. package/index.js.map +1 -0
  69. package/package.json +89 -111
  70. package/types/Cell.d.ts +10 -0
  71. package/types/Controller.d.ts +3 -0
  72. package/types/CustomCell.d.ts +3 -0
  73. package/types/DataSheet.d.ts +31 -0
  74. package/types/DataSheetCheckbox.d.ts +2 -0
  75. package/types/DataSheetInput.d.ts +2 -0
  76. package/types/DataSheetSelect.d.ts +2 -0
  77. package/types/InnerElement.d.ts +16 -0
  78. package/types/index.d.ts +3 -0
  79. package/{dist/types → types}/useOnClickOutside.d.ts +0 -0
  80. package/useOnClickOutside.d.ts +1 -0
  81. package/useOnClickOutside.js +26 -0
  82. package/useOnClickOutside.js.map +1 -0
  83. package/CHANGELOG.md +0 -89
  84. package/dist/cjs/Cell.js +0 -105
  85. package/dist/cjs/Cell.js.map +0 -1
  86. package/dist/cjs/Controller.js +0 -68
  87. package/dist/cjs/Controller.js.map +0 -1
  88. package/dist/cjs/CustomCell.js.map +0 -1
  89. package/dist/cjs/DataSheet.js.map +0 -1
  90. package/dist/cjs/DataSheetCheckbox.js +0 -49
  91. package/dist/cjs/DataSheetCheckbox.js.map +0 -1
  92. package/dist/cjs/DataSheetInput.js +0 -33
  93. package/dist/cjs/DataSheetInput.js.map +0 -1
  94. package/dist/cjs/DataSheetSelect.js +0 -33
  95. package/dist/cjs/DataSheetSelect.js.map +0 -1
  96. package/dist/cjs/DataSheetText.js +0 -34
  97. package/dist/cjs/DataSheetText.js.map +0 -1
  98. package/dist/cjs/InnerElement.js +0 -114
  99. package/dist/cjs/InnerElement.js.map +0 -1
  100. package/dist/cjs/index.js.map +0 -1
  101. package/dist/cjs/useOnClickOutside.js.map +0 -1
  102. package/dist/esm/Cell.js +0 -93
  103. package/dist/esm/Cell.js.map +0 -1
  104. package/dist/esm/Controller.js +0 -56
  105. package/dist/esm/Controller.js.map +0 -1
  106. package/dist/esm/CustomCell.js.map +0 -1
  107. package/dist/esm/DataSheet.js.map +0 -1
  108. package/dist/esm/DataSheetCheckbox.js +0 -40
  109. package/dist/esm/DataSheetCheckbox.js.map +0 -1
  110. package/dist/esm/DataSheetInput.js +0 -24
  111. package/dist/esm/DataSheetInput.js.map +0 -1
  112. package/dist/esm/DataSheetSelect.js +0 -24
  113. package/dist/esm/DataSheetSelect.js.map +0 -1
  114. package/dist/esm/DataSheetText.js +0 -25
  115. package/dist/esm/DataSheetText.js.map +0 -1
  116. package/dist/esm/InnerElement.js +0 -106
  117. package/dist/esm/InnerElement.js.map +0 -1
  118. package/dist/esm/index.js.map +0 -1
  119. package/dist/esm/useOnClickOutside.js.map +0 -1
  120. package/dist/types/DataSheet.d.ts +0 -30
  121. package/dist/types/DataSheetText.d.ts +0 -4
  122. package/dist/types/InnerElement.d.ts +0 -8
@@ -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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"}