@teselagen/ui 0.9.1 → 0.9.4
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/index.cjs.js +336 -320
- package/index.es.js +336 -320
- package/package.json +3 -3
- package/src/DataTable/index.js +18 -6
- package/DataTable/EditabelCell.d.ts +0 -10
- package/DataTable/defaultProps.d.ts +0 -43
- package/DataTable/utils/computePresets.d.ts +0 -1
- package/src/DataTable/EditabelCell.js +0 -55
- package/src/DataTable/defaultProps.js +0 -45
- package/src/DataTable/utils/computePresets.js +0 -42
- package/src/ExcelCell.js +0 -38
- package/style.css +0 -10537
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teselagen/ui",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"./style.css": "./style.css"
|
|
12
12
|
},
|
|
13
|
+
"devDependencies": {},
|
|
13
14
|
"dependencies": {
|
|
14
15
|
"@blueprintjs/core": "3.54.0",
|
|
15
16
|
"@blueprintjs/datetime": "^3.24.1",
|
|
@@ -18,6 +19,7 @@
|
|
|
18
19
|
"@dnd-kit/modifiers": "^7.0.0",
|
|
19
20
|
"@dnd-kit/sortable": "^8.0.0",
|
|
20
21
|
"@teselagen/react-table": "6.10.18",
|
|
22
|
+
"chance": "1.1.11",
|
|
21
23
|
"classnames": "^2.3.2",
|
|
22
24
|
"color": "^3.2.1",
|
|
23
25
|
"copy-to-clipboard": "^3.3.1",
|
|
@@ -51,8 +53,6 @@
|
|
|
51
53
|
"url-join": "^4.0.1",
|
|
52
54
|
"use-deep-compare-effect": "^1.6.1",
|
|
53
55
|
"write-excel-file": "^1.4.25",
|
|
54
|
-
"cypress-real-events": "^1.13.0",
|
|
55
|
-
"chance": "^1.1.11",
|
|
56
56
|
"@dnd-kit/utilities": "3.2.2",
|
|
57
57
|
"@teselagen/file-utils": "0.3.20",
|
|
58
58
|
"@blueprintjs/icons": "3.33.0"
|
package/src/DataTable/index.js
CHANGED
|
@@ -27,7 +27,8 @@ import {
|
|
|
27
27
|
isFunction,
|
|
28
28
|
isEqual,
|
|
29
29
|
every,
|
|
30
|
-
some
|
|
30
|
+
some,
|
|
31
|
+
identity
|
|
31
32
|
} from "lodash-es";
|
|
32
33
|
import {
|
|
33
34
|
Button,
|
|
@@ -1241,16 +1242,22 @@ const DataTable = ({
|
|
|
1241
1242
|
|
|
1242
1243
|
//index 0 of the table is the column titles
|
|
1243
1244
|
//must add 1 to rowNum
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1245
|
+
// Dedupe rows by row index, not by Set (which dedupes by value)
|
|
1246
|
+
const rowNumbersToCopy = [];
|
|
1247
|
+
selectedRecords.forEach(rec => {
|
|
1248
|
+
const rowIndex = idToIndex[rec.id || rec.code] + 1;
|
|
1249
|
+
if (!rowNumbersToCopy.includes(rowIndex)) {
|
|
1250
|
+
rowNumbersToCopy.push(rowIndex);
|
|
1251
|
+
}
|
|
1252
|
+
});
|
|
1253
|
+
rowNumbersToCopy.sort();
|
|
1247
1254
|
|
|
1248
1255
|
if (!rowNumbersToCopy.length) return;
|
|
1249
1256
|
rowNumbersToCopy.unshift(0); //add in the header row
|
|
1250
1257
|
try {
|
|
1251
1258
|
const allRowEls = getAllRows(tableRef);
|
|
1252
1259
|
if (!allRowEls) return;
|
|
1253
|
-
const rowEls = rowNumbersToCopy.map(i => allRowEls[i]);
|
|
1260
|
+
const rowEls = rowNumbersToCopy.map(i => allRowEls[i]).filter(identity);
|
|
1254
1261
|
if (window.Cypress) window.Cypress.__copiedRowsLength = rowEls.length;
|
|
1255
1262
|
handleCopyRows(rowEls, {
|
|
1256
1263
|
onFinishMsg: "Selected rows copied"
|
|
@@ -2868,7 +2875,12 @@ const DataTable = ({
|
|
|
2868
2875
|
);
|
|
2869
2876
|
|
|
2870
2877
|
return (
|
|
2871
|
-
<div
|
|
2878
|
+
<div
|
|
2879
|
+
tabIndex="1"
|
|
2880
|
+
style={{ height: "100%" }}
|
|
2881
|
+
onKeyDown={handleKeyDown}
|
|
2882
|
+
onKeyUp={handleKeyUp}
|
|
2883
|
+
>
|
|
2872
2884
|
<div
|
|
2873
2885
|
className={classNames(
|
|
2874
2886
|
"data-table-container",
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export function EditableCell({ cancelEdit, dataTest, finishEdit, initialValue, isEditableCellInitialValue, isNumeric, shouldSelectAll, stopSelectAll }: {
|
|
2
|
-
cancelEdit: any;
|
|
3
|
-
dataTest: any;
|
|
4
|
-
finishEdit: any;
|
|
5
|
-
initialValue: any;
|
|
6
|
-
isEditableCellInitialValue: any;
|
|
7
|
-
isNumeric: any;
|
|
8
|
-
shouldSelectAll: any;
|
|
9
|
-
stopSelectAll: any;
|
|
10
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { noop } from 'lodash-es';
|
|
2
|
-
declare namespace _default {
|
|
3
|
-
export { noop as addFilters };
|
|
4
|
-
export let className: string;
|
|
5
|
-
export { noop as clearFilters };
|
|
6
|
-
export { noop as contextMenu };
|
|
7
|
-
export let disabled: boolean;
|
|
8
|
-
export let entities: never[];
|
|
9
|
-
export let extraClasses: string;
|
|
10
|
-
export let filters: never[];
|
|
11
|
-
export let isCopyable: boolean;
|
|
12
|
-
export { noop as isEntityDisabled };
|
|
13
|
-
export let isLoading: boolean;
|
|
14
|
-
export let isSimple: boolean;
|
|
15
|
-
export let isSingleSelect: boolean;
|
|
16
|
-
export let maxHeight: number;
|
|
17
|
-
export let noHeader: boolean;
|
|
18
|
-
export let noSelect: boolean;
|
|
19
|
-
export let noUserSelect: boolean;
|
|
20
|
-
export { noop as onDeselect };
|
|
21
|
-
export { noop as onMultiRowSelect };
|
|
22
|
-
export { noop as onRowClick };
|
|
23
|
-
export { noop as onRowSelect };
|
|
24
|
-
export { noop as onSingleRowSelect };
|
|
25
|
-
export let page: number;
|
|
26
|
-
export let pageSize: number;
|
|
27
|
-
export let reduxFormExpandedEntityIdMap: {};
|
|
28
|
-
export let reduxFormSearchInput: string;
|
|
29
|
-
export let reduxFormSelectedEntityIdMap: {};
|
|
30
|
-
export { noop as removeSingleFilter };
|
|
31
|
-
export let resized: never[];
|
|
32
|
-
export { noop as resizePersist };
|
|
33
|
-
export { noop as setFilter };
|
|
34
|
-
export { noop as setOrder };
|
|
35
|
-
export { noop as setPage };
|
|
36
|
-
export { noop as setPageSize };
|
|
37
|
-
export { noop as setSearchTerm };
|
|
38
|
-
export let showCount: boolean;
|
|
39
|
-
export let style: {};
|
|
40
|
-
export let withCheckboxes: boolean;
|
|
41
|
-
export let withSort: boolean;
|
|
42
|
-
}
|
|
43
|
-
export default _default;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function computePresets(props?: {}): import('lodash').Dictionary<any>;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useRef, useState } from "react";
|
|
2
|
-
|
|
3
|
-
export const EditableCell = ({
|
|
4
|
-
cancelEdit,
|
|
5
|
-
dataTest,
|
|
6
|
-
finishEdit,
|
|
7
|
-
initialValue,
|
|
8
|
-
isEditableCellInitialValue,
|
|
9
|
-
isNumeric,
|
|
10
|
-
shouldSelectAll,
|
|
11
|
-
stopSelectAll
|
|
12
|
-
}) => {
|
|
13
|
-
const [value, setValue] = useState(initialValue);
|
|
14
|
-
const inputRef = useRef(null);
|
|
15
|
-
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
if (inputRef.current) {
|
|
18
|
-
inputRef.current.focus();
|
|
19
|
-
if (isEditableCellInitialValue && !isNumeric) {
|
|
20
|
-
inputRef.current.selectionStart = inputRef.current.value.length;
|
|
21
|
-
inputRef.current.selectionEnd = inputRef.current.value.length;
|
|
22
|
-
} else if (shouldSelectAll) {
|
|
23
|
-
inputRef.current.select();
|
|
24
|
-
stopSelectAll();
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}, [isEditableCellInitialValue, isNumeric, shouldSelectAll, stopSelectAll]);
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
<input
|
|
31
|
-
style={{
|
|
32
|
-
border: 0,
|
|
33
|
-
width: "95%",
|
|
34
|
-
fontSize: 12,
|
|
35
|
-
background: "none"
|
|
36
|
-
}}
|
|
37
|
-
ref={inputRef}
|
|
38
|
-
{...dataTest}
|
|
39
|
-
autoFocus
|
|
40
|
-
onKeyDown={e => {
|
|
41
|
-
if (e.key === "Enter") {
|
|
42
|
-
finishEdit(value);
|
|
43
|
-
e.stopPropagation();
|
|
44
|
-
} else if (e.key === "Escape") {
|
|
45
|
-
e.stopPropagation();
|
|
46
|
-
cancelEdit();
|
|
47
|
-
}
|
|
48
|
-
}}
|
|
49
|
-
onBlur={() => finishEdit(value)}
|
|
50
|
-
onChange={e => setValue(e.target.value)}
|
|
51
|
-
type={isNumeric ? "number" : undefined}
|
|
52
|
-
value={value}
|
|
53
|
-
/>
|
|
54
|
-
);
|
|
55
|
-
};
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { noop } from "lodash-es";
|
|
2
|
-
|
|
3
|
-
// eslint-disable-next-line import/no-anonymous-default-export
|
|
4
|
-
export default {
|
|
5
|
-
//NOTE: DO NOT SET DEFAULTS HERE FOR PROPS THAT GET COMPUTED AS PART OF PRESET GROUPS IN computePresets
|
|
6
|
-
addFilters: noop,
|
|
7
|
-
className: "",
|
|
8
|
-
clearFilters: noop,
|
|
9
|
-
contextMenu: noop,
|
|
10
|
-
disabled: false,
|
|
11
|
-
entities: [],
|
|
12
|
-
extraClasses: "",
|
|
13
|
-
filters: [],
|
|
14
|
-
isCopyable: true,
|
|
15
|
-
isEntityDisabled: noop,
|
|
16
|
-
isLoading: false,
|
|
17
|
-
isSimple: false,
|
|
18
|
-
isSingleSelect: false,
|
|
19
|
-
maxHeight: 600,
|
|
20
|
-
noHeader: false,
|
|
21
|
-
noSelect: false,
|
|
22
|
-
noUserSelect: false,
|
|
23
|
-
onDeselect: noop,
|
|
24
|
-
onMultiRowSelect: noop,
|
|
25
|
-
onRowClick: noop,
|
|
26
|
-
onRowSelect: noop,
|
|
27
|
-
onSingleRowSelect: noop,
|
|
28
|
-
page: 1,
|
|
29
|
-
pageSize: 10,
|
|
30
|
-
reduxFormExpandedEntityIdMap: {},
|
|
31
|
-
reduxFormSearchInput: "",
|
|
32
|
-
reduxFormSelectedEntityIdMap: {},
|
|
33
|
-
removeSingleFilter: noop,
|
|
34
|
-
resized: [],
|
|
35
|
-
resizePersist: noop,
|
|
36
|
-
setFilter: noop,
|
|
37
|
-
setOrder: noop,
|
|
38
|
-
setPage: noop,
|
|
39
|
-
setPageSize: noop,
|
|
40
|
-
setSearchTerm: noop,
|
|
41
|
-
showCount: false,
|
|
42
|
-
style: {},
|
|
43
|
-
withCheckboxes: false,
|
|
44
|
-
withSort: true
|
|
45
|
-
};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { omitBy, isNil } from "lodash-es";
|
|
2
|
-
//we use this to make adding preset prop groups simpler
|
|
3
|
-
export default function computePresets(props = {}) {
|
|
4
|
-
const { isSimple } = props;
|
|
5
|
-
let toReturn = omitBy(props, isNil);
|
|
6
|
-
toReturn.pageSize = toReturn.controlled_pageSize || toReturn.pageSize;
|
|
7
|
-
if (isSimple) {
|
|
8
|
-
//isSimplePreset
|
|
9
|
-
toReturn = {
|
|
10
|
-
noHeader: true,
|
|
11
|
-
noFooter: !props.withPaging,
|
|
12
|
-
noPadding: true,
|
|
13
|
-
noFullscreenButton: true,
|
|
14
|
-
hidePageSizeWhenPossible: !props.withPaging,
|
|
15
|
-
isInfinite: !props.withPaging,
|
|
16
|
-
hideSelectedCount: true,
|
|
17
|
-
withTitle: false,
|
|
18
|
-
withSearch: false,
|
|
19
|
-
compact: true,
|
|
20
|
-
withPaging: false,
|
|
21
|
-
withFilter: false,
|
|
22
|
-
...toReturn
|
|
23
|
-
};
|
|
24
|
-
} else {
|
|
25
|
-
toReturn = {
|
|
26
|
-
// the usual defaults:
|
|
27
|
-
noFooter: false,
|
|
28
|
-
noPadding: false,
|
|
29
|
-
compact: true,
|
|
30
|
-
noFullscreenButton: false,
|
|
31
|
-
hidePageSizeWhenPossible: false,
|
|
32
|
-
isInfinite: false,
|
|
33
|
-
hideSelectedCount: false,
|
|
34
|
-
withTitle: true,
|
|
35
|
-
withSearch: true,
|
|
36
|
-
withPaging: true,
|
|
37
|
-
withFilter: true,
|
|
38
|
-
...toReturn
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
return toReturn || {};
|
|
42
|
-
}
|
package/src/ExcelCell.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/* eslint react/jsx-no-bind: 0 */
|
|
2
|
-
import { Popover } from "@blueprintjs/core";
|
|
3
|
-
import React, { useState } from "react";
|
|
4
|
-
|
|
5
|
-
export default function ExcelCell() {
|
|
6
|
-
const [v, setV] = useState("");
|
|
7
|
-
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
|
|
8
|
-
return (
|
|
9
|
-
<Popover
|
|
10
|
-
onClose={() => {
|
|
11
|
-
setIsPopoverOpen(false);
|
|
12
|
-
}}
|
|
13
|
-
isOpen={isPopoverOpen}
|
|
14
|
-
content={<div>Sum</div>}
|
|
15
|
-
>
|
|
16
|
-
<div
|
|
17
|
-
style={{
|
|
18
|
-
border: "1px solid #ccc",
|
|
19
|
-
padding: 5,
|
|
20
|
-
width: 100,
|
|
21
|
-
height: 30
|
|
22
|
-
}}
|
|
23
|
-
contentEditable
|
|
24
|
-
onInput={e => {
|
|
25
|
-
const text = e.currentTarget.textContent;
|
|
26
|
-
|
|
27
|
-
if (text === "=") {
|
|
28
|
-
// open a popover
|
|
29
|
-
setIsPopoverOpen(true);
|
|
30
|
-
}
|
|
31
|
-
setV(text);
|
|
32
|
-
}}
|
|
33
|
-
>
|
|
34
|
-
{v}
|
|
35
|
-
</div>
|
|
36
|
-
</Popover>
|
|
37
|
-
);
|
|
38
|
-
}
|