@teselagen/ui 0.6.6 → 0.7.1
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/DataTable/ColumnFilterMenu.d.ts +2 -1
- package/DataTable/Columns.d.ts +51 -0
- package/DataTable/DisplayOptions.d.ts +14 -14
- package/DataTable/EditabelCell.d.ts +2 -5
- package/DataTable/EditableCell.d.ts +7 -0
- package/DataTable/FilterAndSortMenu.d.ts +9 -9
- package/DataTable/PagingTool.d.ts +25 -2
- package/DataTable/RenderCell.d.ts +18 -0
- package/DataTable/SearchBar.d.ts +4 -3
- package/DataTable/SortableColumns.d.ts +6 -9
- package/DataTable/ThComponent.d.ts +9 -0
- package/DataTable/index.d.ts +0 -5
- package/DataTable/utils/getIdOrCodeOrIndex.d.ts +1 -2
- package/DataTable/utils/handleCopyTable.d.ts +1 -0
- package/DataTable/utils/index.d.ts +4 -2
- package/DataTable/utils/primarySelectedValue.d.ts +1 -0
- package/DataTable/utils/queryParams.d.ts +13 -8
- package/DataTable/utils/removeCleanRows.d.ts +1 -1
- package/DataTable/utils/rowClick.d.ts +24 -3
- package/DataTable/utils/useDeepEqualMemo.d.ts +1 -0
- package/DataTable/utils/useTableEntities.d.ts +5 -0
- package/DataTable/utils/useTableParams.d.ts +49 -0
- package/DataTable/utils/withTableParams.d.ts +3 -16
- package/DataTable/viewColumn.d.ts +11 -4
- package/FormComponents/AbstractField.d.ts +1 -0
- package/FormComponents/Uploader.d.ts +34 -1
- package/FormComponents/index.d.ts +111 -60
- package/MatchHeaders.d.ts +9 -10
- package/SimpleStepViz.d.ts +2 -1
- package/TgSuggest/index.d.ts +1 -21
- package/UploadCsvWizard.d.ts +1 -1
- package/index.cjs.js +47861 -49125
- package/index.d.ts +6 -3
- package/index.es.js +47959 -49223
- package/package.json +6 -5
- package/src/DataTable/CellDragHandle.js +70 -69
- package/src/DataTable/ColumnFilterMenu.js +23 -21
- package/src/DataTable/Columns.js +948 -0
- package/src/DataTable/Columns.jsx +945 -0
- package/src/DataTable/DisplayOptions.js +173 -192
- package/src/DataTable/EditabelCell.js +7 -18
- package/src/DataTable/EditabelCell.jsx +44 -0
- package/src/DataTable/EditableCell.js +44 -0
- package/src/DataTable/FilterAndSortMenu.js +215 -234
- package/src/DataTable/PagingTool.js +47 -56
- package/src/DataTable/RenderCell.js +191 -0
- package/src/DataTable/RenderCell.jsx +191 -0
- package/src/DataTable/SearchBar.js +12 -5
- package/src/DataTable/SortableColumns.js +44 -39
- package/src/DataTable/ThComponent.js +44 -0
- package/src/DataTable/dataTableEnhancer.js +32 -295
- package/src/DataTable/index.js +2945 -3596
- package/src/DataTable/utils/getIdOrCodeOrIndex.js +1 -1
- package/src/DataTable/utils/handleCopyTable.js +16 -0
- package/src/DataTable/utils/index.js +7 -3
- package/src/DataTable/utils/primarySelectedValue.js +1 -0
- package/src/DataTable/utils/queryParams.js +110 -85
- package/src/DataTable/utils/removeCleanRows.js +3 -3
- package/src/DataTable/utils/rowClick.js +34 -9
- package/src/DataTable/utils/selection.js +1 -1
- package/src/DataTable/utils/useDeepEqualMemo.js +10 -0
- package/src/DataTable/utils/useTableEntities.js +38 -0
- package/src/DataTable/utils/useTableParams.js +362 -0
- package/src/DataTable/utils/withTableParams.js +244 -274
- package/src/DataTable/validateTableWideErrors.js +1 -1
- package/src/DataTable/viewColumn.js +5 -9
- package/src/DialogFooter/index.js +3 -3
- package/src/FillWindow.js +2 -3
- package/src/FormComponents/AbstractField.js +388 -0
- package/src/FormComponents/Uploader.js +674 -649
- package/src/FormComponents/index.js +505 -654
- package/src/FormComponents/tryToMatchSchemas.js +1 -6
- package/src/MatchHeaders.js +27 -22
- package/src/SimpleStepViz.js +19 -23
- package/src/TgSelect/index.js +1 -1
- package/src/TgSuggest/index.js +94 -106
- package/src/UploadCsvWizard.js +571 -577
- package/src/enhancers/withDialog/tg_modalState.js +1 -0
- package/src/index.js +10 -4
- package/src/showDialogOnDocBody.js +5 -9
- package/src/useDialog.js +25 -26
- package/src/utils/commandControls.js +2 -2
- package/src/utils/handlerHelpers.js +19 -25
- package/src/utils/hooks/index.js +1 -0
- package/src/utils/hooks/useDeepEqualMemo.js +10 -0
- package/src/utils/hooks/useStableReference.js +9 -0
- package/src/utils/renderOnDoc.js +8 -5
- package/src/utils/tagUtils.js +3 -3
- package/src/utils/useTraceUpdate.js +19 -0
- package/src/wrapDialog.js +0 -2
- package/style.css +251 -251
- package/useDialog.d.ts +2 -6
- package/utils/hooks/index.d.ts +1 -0
- package/utils/hooks/useDeepEqualMemo.d.ts +1 -0
- package/utils/hooks/useStableReference.d.ts +1 -0
- package/utils/renderOnDoc.d.ts +1 -1
- package/utils/tagUtils.d.ts +5 -1
- package/utils/useTraceUpdate.d.ts +1 -0
package/src/index.js
CHANGED
|
@@ -18,11 +18,12 @@ export {
|
|
|
18
18
|
} from "./DataTable/utils/withSelectedEntities";
|
|
19
19
|
export {
|
|
20
20
|
default as DataTable,
|
|
21
|
-
ConnectedPagingTool as PagingTool
|
|
22
|
-
removeCleanRows
|
|
21
|
+
ConnectedPagingTool as PagingTool
|
|
23
22
|
} from "./DataTable";
|
|
23
|
+
export { removeCleanRows, useTableEntities } from "./DataTable/utils";
|
|
24
24
|
|
|
25
|
-
export {
|
|
25
|
+
export { useDeepEqualMemo } from "./utils/hooks";
|
|
26
|
+
export { getIdOrCodeOrIndex } from "./DataTable/utils";
|
|
26
27
|
export { default as convertSchema } from "./DataTable/utils/convertSchema";
|
|
27
28
|
export { default as Loading } from "./Loading";
|
|
28
29
|
export { throwFormError } from "./throwFormError";
|
|
@@ -39,7 +40,10 @@ export { default as popoverOverflowModifiers } from "./utils/popoverOverflowModi
|
|
|
39
40
|
export * from "./utils/tgFormValues";
|
|
40
41
|
export { default as tgFormValues } from "./utils/tgFormValues";
|
|
41
42
|
export { default as withStore } from "./utils/withStore";
|
|
42
|
-
export {
|
|
43
|
+
export {
|
|
44
|
+
default as withTableParams,
|
|
45
|
+
useTableParams
|
|
46
|
+
} from "./DataTable/utils/withTableParams";
|
|
43
47
|
export { default as InfoHelper } from "./InfoHelper";
|
|
44
48
|
export { default as showConfirmationDialog } from "./showConfirmationDialog";
|
|
45
49
|
export { default as showAppSpinner } from "./showAppSpinner";
|
|
@@ -70,6 +74,8 @@ export * from "./utils/menuUtils";
|
|
|
70
74
|
export * from "./utils/browserUtils";
|
|
71
75
|
export * from "./utils/commandUtils";
|
|
72
76
|
export * from "./utils/commandControls";
|
|
77
|
+
export * from "./utils/useTraceUpdate";
|
|
78
|
+
export * from "./utils/hooks/useStableReference";
|
|
73
79
|
export { default as AsyncValidateFieldSpinner } from "./AsyncValidateFieldSpinner";
|
|
74
80
|
export { default as showProgressToast } from "./utils/showProgressToast";
|
|
75
81
|
export { default as getTextFromEl } from "./utils/getTextFromEl";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createRoot } from "react-dom/client";
|
|
2
2
|
import React from "react";
|
|
3
3
|
// import withDialog from "./enhancers/withDialog";
|
|
4
4
|
import { Dialog } from "@blueprintjs/core";
|
|
@@ -19,19 +19,15 @@ export default function showDialogOnDocBody(DialogComp, options = {}) {
|
|
|
19
19
|
DialogCompToUse = props => {
|
|
20
20
|
return (
|
|
21
21
|
<Dialog usePortal={false} title="pass a {title} prop" isOpen {...props}>
|
|
22
|
-
<DialogComp
|
|
23
|
-
{...props}
|
|
24
|
-
hideModal={onClose}
|
|
25
|
-
onClose={onClose}
|
|
26
|
-
></DialogComp>
|
|
22
|
+
<DialogComp {...props} hideModal={onClose} onClose={onClose} />
|
|
27
23
|
</Dialog>
|
|
28
24
|
);
|
|
29
25
|
};
|
|
30
26
|
} else {
|
|
31
27
|
DialogCompToUse = DialogComp;
|
|
32
28
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
const root = createRoot(dialogHolder);
|
|
30
|
+
root.render(
|
|
31
|
+
<DialogCompToUse hideModal={onClose} onClose={onClose} {...options} />
|
|
36
32
|
);
|
|
37
33
|
}
|
package/src/useDialog.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
1
|
+
import React, { useCallback, useState } from "react";
|
|
2
2
|
|
|
3
|
-
/*
|
|
3
|
+
/*
|
|
4
4
|
|
|
5
5
|
const {toggleDialog, comp} = useDialog({
|
|
6
6
|
ModalComponent: SimpleInsertData,
|
|
7
|
-
validateAgainstSchema,
|
|
8
7
|
});
|
|
9
8
|
|
|
10
9
|
return <div>
|
|
@@ -13,30 +12,29 @@ import React, { useState } from "react";
|
|
|
13
12
|
</div>
|
|
14
13
|
|
|
15
14
|
*/
|
|
16
|
-
export const useDialog = ({ ModalComponent
|
|
15
|
+
export const useDialog = ({ ModalComponent }) => {
|
|
17
16
|
const [isOpen, setOpen] = useState(false);
|
|
18
17
|
const [additionalProps, setAdditionalProps] = useState(false);
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
18
|
+
const Comp = useCallback(
|
|
19
|
+
() => (
|
|
20
|
+
<ModalComponent
|
|
21
|
+
hideModal={() => {
|
|
22
|
+
setOpen(false);
|
|
23
|
+
}}
|
|
24
|
+
hideDialog={() => {
|
|
25
|
+
setOpen(false);
|
|
26
|
+
}}
|
|
27
|
+
{...additionalProps}
|
|
28
|
+
dialogProps={{
|
|
29
|
+
isOpen,
|
|
30
|
+
...additionalProps?.dialogProps
|
|
31
|
+
}}
|
|
32
|
+
/>
|
|
33
|
+
),
|
|
34
|
+
[ModalComponent, additionalProps, isOpen]
|
|
35
35
|
);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
};
|
|
39
|
-
async function showDialogPromise(handlerName, moreProps = {}) {
|
|
36
|
+
|
|
37
|
+
const showDialogPromise = useCallback(async (handlerName, moreProps = {}) => {
|
|
40
38
|
return new Promise(resolve => {
|
|
41
39
|
//return a promise that can be awaited
|
|
42
40
|
setAdditionalProps({
|
|
@@ -59,6 +57,7 @@ export const useDialog = ({ ModalComponent, ...rest }) => {
|
|
|
59
57
|
});
|
|
60
58
|
setOpen(true); //open the dialog
|
|
61
59
|
});
|
|
62
|
-
}
|
|
63
|
-
|
|
60
|
+
}, []);
|
|
61
|
+
|
|
62
|
+
return { Comp, showDialogPromise };
|
|
64
63
|
};
|
|
@@ -11,8 +11,8 @@ export const withCommand =
|
|
|
11
11
|
mappings[k] === "execute"
|
|
12
12
|
? event => cmd.execute({ event })
|
|
13
13
|
: typeof mappings[k] === "function"
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
? mappings[k](cmd, props)
|
|
15
|
+
: cmd[mappings[k]];
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
let out = <WrappedComponent {...mappedProps} {...props} />;
|
|
@@ -1,30 +1,24 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if (event.key === "Enter") {
|
|
5
|
-
callback(event);
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function onBlurHelper(callback) {
|
|
12
|
-
return {
|
|
13
|
-
onBlur: function (event) {
|
|
1
|
+
export const onEnterHelper = callback => ({
|
|
2
|
+
onKeyDown: event => {
|
|
3
|
+
if (event.key === "Enter") {
|
|
14
4
|
callback(event);
|
|
15
5
|
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
export const onBlurHelper = callback => ({
|
|
10
|
+
onBlur: event => {
|
|
11
|
+
callback(event);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
18
14
|
|
|
19
|
-
export
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (event.key === "Enter") {
|
|
23
|
-
callback(event);
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
onBlur: function (event) {
|
|
15
|
+
export const onEnterOrBlurHelper = callback => ({
|
|
16
|
+
onKeyDown: function (event) {
|
|
17
|
+
if (event.key === "Enter") {
|
|
27
18
|
callback(event);
|
|
28
19
|
}
|
|
29
|
-
}
|
|
30
|
-
|
|
20
|
+
},
|
|
21
|
+
onBlur: function (event) {
|
|
22
|
+
callback(event);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useDeepEqualMemo } from "./useDeepEqualMemo";
|
package/src/utils/renderOnDoc.js
CHANGED
|
@@ -1,29 +1,32 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createRoot } from "react-dom/client";
|
|
2
2
|
|
|
3
3
|
export function renderOnDoc(fn) {
|
|
4
4
|
const elemDiv = document.createElement("div");
|
|
5
5
|
elemDiv.style.cssText =
|
|
6
6
|
"position:absolute;width:100%;height:100%;top:0px;opacity:0.3;z-index:0;";
|
|
7
7
|
document.body.appendChild(elemDiv);
|
|
8
|
+
const root = createRoot(elemDiv);
|
|
8
9
|
const handleClose = () => {
|
|
9
10
|
setTimeout(() => {
|
|
10
|
-
|
|
11
|
+
root.unmount(elemDiv);
|
|
11
12
|
document.body.removeChild(elemDiv);
|
|
12
13
|
});
|
|
13
14
|
};
|
|
14
|
-
|
|
15
|
+
root.render(fn(handleClose));
|
|
15
16
|
}
|
|
17
|
+
|
|
16
18
|
export function renderOnDocSimple(el) {
|
|
17
19
|
const elemDiv = document.createElement("div");
|
|
18
20
|
elemDiv.style.cssText =
|
|
19
21
|
"position:absolute;width:100%;height:100%;top:0px;opacity:1;z-index:10000;";
|
|
20
22
|
document.body.appendChild(elemDiv);
|
|
23
|
+
const root = createRoot(elemDiv);
|
|
24
|
+
root.render(el);
|
|
21
25
|
const handleClose = () => {
|
|
22
26
|
setTimeout(() => {
|
|
23
|
-
|
|
27
|
+
root.unmount();
|
|
24
28
|
document.body.removeChild(elemDiv);
|
|
25
29
|
});
|
|
26
30
|
};
|
|
27
|
-
ReactDOM.render(el, elemDiv);
|
|
28
31
|
return handleClose;
|
|
29
32
|
}
|
package/src/utils/tagUtils.js
CHANGED
|
@@ -37,9 +37,9 @@ export function getTagColorStyle(color) {
|
|
|
37
37
|
}
|
|
38
38
|
: {};
|
|
39
39
|
}
|
|
40
|
-
export function getTagProps(
|
|
40
|
+
export function getTagProps({ color, label, name }) {
|
|
41
41
|
return {
|
|
42
|
-
...getTagColorStyle(
|
|
43
|
-
children:
|
|
42
|
+
...getTagColorStyle(color),
|
|
43
|
+
children: label || name
|
|
44
44
|
};
|
|
45
45
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
|
|
3
|
+
// useful for debugging rerender errors
|
|
4
|
+
export const useTraceUpdate = props => {
|
|
5
|
+
const prev = useRef(props);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
const changedProps = Object.entries(props).reduce((ps, [k, v]) => {
|
|
8
|
+
if (prev.current[k] !== v) {
|
|
9
|
+
ps[k] = [prev.current[k], v];
|
|
10
|
+
}
|
|
11
|
+
return ps;
|
|
12
|
+
}, {});
|
|
13
|
+
if (Object.keys(changedProps).length > 0) {
|
|
14
|
+
// eslint-disable-next-line no-console
|
|
15
|
+
console.log("Changed props:", changedProps);
|
|
16
|
+
}
|
|
17
|
+
prev.current = props;
|
|
18
|
+
});
|
|
19
|
+
};
|
package/src/wrapDialog.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
/* Copyright (C) 2018 TeselaGen Biotechnology, Inc. */
|
|
2
|
-
|
|
3
2
|
import React, { useMemo, useRef } from "react";
|
|
4
3
|
import { Dialog, useHotkeys } from "@blueprintjs/core";
|
|
5
4
|
import { noop, isFunction } from "lodash-es";
|
|
6
5
|
import { ResizableDraggableDialog } from ".";
|
|
7
6
|
|
|
8
|
-
// eslint-disable-next-line import/no-anonymous-default-export
|
|
9
7
|
export default (topLevelDialogProps = {}) =>
|
|
10
8
|
Component =>
|
|
11
9
|
props => {
|