@reltio/components 1.4.2065 → 1.4.2067
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/LazyRenderer/LazyRenderer.d.ts +12 -0
- package/LazyRenderer/LazyRenderer.js +64 -0
- package/LazyRenderer/index.d.ts +1 -0
- package/LazyRenderer/index.js +1 -0
- package/ReadOnlyAttributeValuesBlock/ReadOnlyAttributeValuesBlock.js +6 -2
- package/cjs/LazyRenderer/LazyRenderer.d.ts +12 -0
- package/cjs/LazyRenderer/LazyRenderer.js +91 -0
- package/cjs/LazyRenderer/index.d.ts +1 -0
- package/cjs/LazyRenderer/index.js +5 -0
- package/cjs/ReadOnlyAttributeValuesBlock/ReadOnlyAttributeValuesBlock.js +6 -2
- package/cjs/features/crosswalks/AttributesTable/AttributesTable.js +6 -1
- package/cjs/features/crosswalks/AttributesTable/components/NestedAttributesRenderer/NestedAttributesRenderer.js +5 -2
- package/cjs/features/crosswalks/AttributesTable/components/ReferenceAttributesRenderer/ReferenceAttributesRenderer.js +5 -2
- package/cjs/hooks/useCollaboration/useCollaboration.js +29 -8
- package/cjs/hooks/useCollapsibleTableRows/dataHelpers.js +24 -4
- package/cjs/hooks/useCollapsibleTableRows/dataHelpers.test.js +45 -4
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +6 -4
- package/features/crosswalks/AttributesTable/AttributesTable.js +7 -2
- package/features/crosswalks/AttributesTable/components/NestedAttributesRenderer/NestedAttributesRenderer.js +5 -2
- package/features/crosswalks/AttributesTable/components/ReferenceAttributesRenderer/ReferenceAttributesRenderer.js +5 -2
- package/hooks/useCollaboration/useCollaboration.js +30 -9
- package/hooks/useCollapsibleTableRows/dataHelpers.js +25 -5
- package/hooks/useCollapsibleTableRows/dataHelpers.test.js +45 -4
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
};
|
|
8
|
+
export declare const LazyRenderer: {
|
|
9
|
+
({ enabled, ...props }: Props): React.JSX.Element;
|
|
10
|
+
notify(): void;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
24
|
+
var CUSTOM_EVENT_NAME = 'notify_lazy_renderer';
|
|
25
|
+
var DEFAULT_STYLE = { height: '20px' };
|
|
26
|
+
var InternalLazyRenderer = function (_a) {
|
|
27
|
+
var children = _a.children, className = _a.className, _b = _a.style, style = _b === void 0 ? DEFAULT_STYLE : _b;
|
|
28
|
+
var _c = useState(false), isVisible = _c[0], setIsVisible = _c[1];
|
|
29
|
+
var placeholderRef = useRef(null);
|
|
30
|
+
useEffect(function () {
|
|
31
|
+
var observer = new IntersectionObserver(function (_a) {
|
|
32
|
+
var entry = _a[0];
|
|
33
|
+
if (entry.isIntersecting) {
|
|
34
|
+
setIsVisible(true);
|
|
35
|
+
observer.disconnect();
|
|
36
|
+
window.removeEventListener(CUSTOM_EVENT_NAME, reobserve);
|
|
37
|
+
}
|
|
38
|
+
}, {
|
|
39
|
+
threshold: 0.1
|
|
40
|
+
});
|
|
41
|
+
if (placeholderRef.current) {
|
|
42
|
+
observer.observe(placeholderRef.current);
|
|
43
|
+
}
|
|
44
|
+
var reobserve = function () {
|
|
45
|
+
if (placeholderRef.current) {
|
|
46
|
+
observer.disconnect();
|
|
47
|
+
observer.observe(placeholderRef.current);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
window.addEventListener(CUSTOM_EVENT_NAME, reobserve);
|
|
51
|
+
return function () {
|
|
52
|
+
observer.disconnect();
|
|
53
|
+
window.removeEventListener(CUSTOM_EVENT_NAME, reobserve);
|
|
54
|
+
};
|
|
55
|
+
}, []);
|
|
56
|
+
return isVisible ? React.createElement(React.Fragment, null, children) : React.createElement("div", { ref: placeholderRef, className: className, style: style });
|
|
57
|
+
};
|
|
58
|
+
export var LazyRenderer = function (_a) {
|
|
59
|
+
var _b = _a.enabled, enabled = _b === void 0 ? true : _b, props = __rest(_a, ["enabled"]);
|
|
60
|
+
return enabled ? React.createElement(InternalLazyRenderer, __assign({}, props)) : React.createElement(React.Fragment, null, props.children);
|
|
61
|
+
};
|
|
62
|
+
LazyRenderer.notify = function () {
|
|
63
|
+
window.dispatchEvent(new Event(CUSTOM_EVENT_NAME));
|
|
64
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LazyRenderer } from './LazyRenderer';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LazyRenderer } from './LazyRenderer';
|
|
@@ -24,10 +24,14 @@ import React, { memo } from 'react';
|
|
|
24
24
|
import { DataTypes } from '@reltio/mdm-sdk';
|
|
25
25
|
import { ReadOnlyAttribute } from '../ReadOnlyAttributesFactory';
|
|
26
26
|
import { ReadOnlyImageAttributesLine } from '../ReadOnlyImageAttributesLine';
|
|
27
|
+
import { LazyRenderer } from '../LazyRenderer';
|
|
28
|
+
var lazyRendererStyle = { height: '18px' };
|
|
27
29
|
var renderAttributesList = function (_a) {
|
|
28
30
|
var values = _a.values, valueContainerClassName = _a.valueContainerClassName, props = __rest(_a, ["values", "valueContainerClassName"]);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
var enabledLazyRendering = (values === null || values === void 0 ? void 0 : values.length) > 20;
|
|
32
|
+
return (React.createElement(React.Fragment, null, (values || []).map(function (attributeValue) { return (React.createElement(LazyRenderer, { key: attributeValue.uri, className: valueContainerClassName, enabled: enabledLazyRendering, style: lazyRendererStyle },
|
|
33
|
+
React.createElement("div", { className: valueContainerClassName },
|
|
34
|
+
React.createElement(ReadOnlyAttribute, __assign({ attributeValue: attributeValue }, props))))); })));
|
|
31
35
|
};
|
|
32
36
|
var ReadOnlyAttributeValuesBlock = function (_a) {
|
|
33
37
|
var expanded = _a.expanded, LabelRenderer = _a.LabelRenderer, RightSlot = _a.RightSlot, props = __rest(_a, ["expanded", "LabelRenderer", "RightSlot"]);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
};
|
|
8
|
+
export declare const LazyRenderer: {
|
|
9
|
+
({ enabled, ...props }: Props): React.JSX.Element;
|
|
10
|
+
notify(): void;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
37
|
+
var t = {};
|
|
38
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
39
|
+
t[p] = s[p];
|
|
40
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
41
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
42
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
43
|
+
t[p[i]] = s[p[i]];
|
|
44
|
+
}
|
|
45
|
+
return t;
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.LazyRenderer = void 0;
|
|
49
|
+
var react_1 = __importStar(require("react"));
|
|
50
|
+
var CUSTOM_EVENT_NAME = 'notify_lazy_renderer';
|
|
51
|
+
var DEFAULT_STYLE = { height: '20px' };
|
|
52
|
+
var InternalLazyRenderer = function (_a) {
|
|
53
|
+
var children = _a.children, className = _a.className, _b = _a.style, style = _b === void 0 ? DEFAULT_STYLE : _b;
|
|
54
|
+
var _c = (0, react_1.useState)(false), isVisible = _c[0], setIsVisible = _c[1];
|
|
55
|
+
var placeholderRef = (0, react_1.useRef)(null);
|
|
56
|
+
(0, react_1.useEffect)(function () {
|
|
57
|
+
var observer = new IntersectionObserver(function (_a) {
|
|
58
|
+
var entry = _a[0];
|
|
59
|
+
if (entry.isIntersecting) {
|
|
60
|
+
setIsVisible(true);
|
|
61
|
+
observer.disconnect();
|
|
62
|
+
window.removeEventListener(CUSTOM_EVENT_NAME, reobserve);
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
threshold: 0.1
|
|
66
|
+
});
|
|
67
|
+
if (placeholderRef.current) {
|
|
68
|
+
observer.observe(placeholderRef.current);
|
|
69
|
+
}
|
|
70
|
+
var reobserve = function () {
|
|
71
|
+
if (placeholderRef.current) {
|
|
72
|
+
observer.disconnect();
|
|
73
|
+
observer.observe(placeholderRef.current);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
window.addEventListener(CUSTOM_EVENT_NAME, reobserve);
|
|
77
|
+
return function () {
|
|
78
|
+
observer.disconnect();
|
|
79
|
+
window.removeEventListener(CUSTOM_EVENT_NAME, reobserve);
|
|
80
|
+
};
|
|
81
|
+
}, []);
|
|
82
|
+
return isVisible ? react_1.default.createElement(react_1.default.Fragment, null, children) : react_1.default.createElement("div", { ref: placeholderRef, className: className, style: style });
|
|
83
|
+
};
|
|
84
|
+
var LazyRenderer = function (_a) {
|
|
85
|
+
var _b = _a.enabled, enabled = _b === void 0 ? true : _b, props = __rest(_a, ["enabled"]);
|
|
86
|
+
return enabled ? react_1.default.createElement(InternalLazyRenderer, __assign({}, props)) : react_1.default.createElement(react_1.default.Fragment, null, props.children);
|
|
87
|
+
};
|
|
88
|
+
exports.LazyRenderer = LazyRenderer;
|
|
89
|
+
exports.LazyRenderer.notify = function () {
|
|
90
|
+
window.dispatchEvent(new Event(CUSTOM_EVENT_NAME));
|
|
91
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LazyRenderer } from './LazyRenderer';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LazyRenderer = void 0;
|
|
4
|
+
var LazyRenderer_1 = require("./LazyRenderer");
|
|
5
|
+
Object.defineProperty(exports, "LazyRenderer", { enumerable: true, get: function () { return LazyRenderer_1.LazyRenderer; } });
|
|
@@ -49,10 +49,14 @@ var react_1 = __importStar(require("react"));
|
|
|
49
49
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
50
50
|
var ReadOnlyAttributesFactory_1 = require("../ReadOnlyAttributesFactory");
|
|
51
51
|
var ReadOnlyImageAttributesLine_1 = require("../ReadOnlyImageAttributesLine");
|
|
52
|
+
var LazyRenderer_1 = require("../LazyRenderer");
|
|
53
|
+
var lazyRendererStyle = { height: '18px' };
|
|
52
54
|
var renderAttributesList = function (_a) {
|
|
53
55
|
var values = _a.values, valueContainerClassName = _a.valueContainerClassName, props = __rest(_a, ["values", "valueContainerClassName"]);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
var enabledLazyRendering = (values === null || values === void 0 ? void 0 : values.length) > 20;
|
|
57
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, (values || []).map(function (attributeValue) { return (react_1.default.createElement(LazyRenderer_1.LazyRenderer, { key: attributeValue.uri, className: valueContainerClassName, enabled: enabledLazyRendering, style: lazyRendererStyle },
|
|
58
|
+
react_1.default.createElement("div", { className: valueContainerClassName },
|
|
59
|
+
react_1.default.createElement(ReadOnlyAttributesFactory_1.ReadOnlyAttribute, __assign({ attributeValue: attributeValue }, props))))); })));
|
|
56
60
|
};
|
|
57
61
|
var ReadOnlyAttributeValuesBlock = function (_a) {
|
|
58
62
|
var expanded = _a.expanded, LabelRenderer = _a.LabelRenderer, RightSlot = _a.RightSlot, props = __rest(_a, ["expanded", "LabelRenderer", "RightSlot"]);
|
|
@@ -52,6 +52,7 @@ var MdmModuleContext_1 = require("../../../contexts/MdmModuleContext");
|
|
|
52
52
|
var helpers_1 = require("./helpers");
|
|
53
53
|
var ConfirmEditIgnoredDialog_1 = require("./components/ConfirmEditIgnoredDialog");
|
|
54
54
|
var CommonRowCellRenderer_1 = require("./components/CommonRowCellRenderer");
|
|
55
|
+
var LazyRenderer_1 = require("../../../LazyRenderer");
|
|
55
56
|
var styles_1 = require("./styles");
|
|
56
57
|
var DEFAULT_ROW_HEIGHT = 68;
|
|
57
58
|
var getIdFromRowValue = function (rowValue) { return rowValue.ovValues.attributeType.uri; };
|
|
@@ -59,6 +60,7 @@ var getRowCellKey = function (_a) {
|
|
|
59
60
|
var id = _a.columnData.id, cellIndex = _a.cellIndex, rowValue = _a.rowValue;
|
|
60
61
|
return "".concat(id, "[").concat(getIdFromRowValue(rowValue), "][").concat(cellIndex, "]");
|
|
61
62
|
};
|
|
63
|
+
var debouncedNotifyLazyRenderer = (0, mdm_sdk_1.debounce)(LazyRenderer_1.LazyRenderer.notify, 0);
|
|
62
64
|
var AttributesTable = function (_a) {
|
|
63
65
|
var entity = _a.entity, isLoading = _a.isLoading, crosswalksMap = _a.crosswalksMap, _b = _a.visibleColumns, visibleColumns = _b === void 0 ? helpers_1.DEFAULT_VISIBLE_COLUMNS : _b, onChangeVisibleColumns = _a.onChangeVisibleColumns, readOnly = _a.readOnly, _c = _a.onDelete, onDelete = _c === void 0 ? ramda_1.identity : _c, _d = _a.onPin, onPin = _d === void 0 ? ramda_1.identity : _d, _e = _a.onIgnore, onIgnore = _e === void 0 ? ramda_1.identity : _e, _f = _a.onEdit, onEdit = _f === void 0 ? ramda_1.identity : _f, _g = _a.onAdd, onAdd = _g === void 0 ? ramda_1.identity : _g, emptyTempAttributeUris = _a.emptyTempAttributeUris, selectedAttributeTypes = _a.selectedAttributeTypes, _h = _a.onSelectAttributeTypes, onSelectAttributeTypes = _h === void 0 ? ramda_1.identity : _h, additionalHeaderItems = _a.additionalHeaderItems, className = _a.className, activeSurvivorshipGroupUri = _a.activeSurvivorshipGroupUri, tableRef = _a.tableRef;
|
|
64
66
|
var styles = (0, styles_1.useStyles)();
|
|
@@ -94,6 +96,9 @@ var AttributesTable = function (_a) {
|
|
|
94
96
|
var getRowCellHeight = (0, react_1.useCallback)((0, ramda_1.either)(getDynamicRowCellHeight, (0, ramda_1.always)(DEFAULT_ROW_HEIGHT)), [
|
|
95
97
|
getDynamicRowCellHeight
|
|
96
98
|
]);
|
|
99
|
+
(0, react_1.useEffect)(function () {
|
|
100
|
+
debouncedNotifyLazyRenderer();
|
|
101
|
+
}, [getRowCellHeight]);
|
|
97
102
|
var _m = (0, react_1.useState)(null), pendingDeletion = _m[0], setPendingDeletion = _m[1];
|
|
98
103
|
var _o = (0, react_1.useState)(null), pendingIgnoredEditing = _o[0], setPendingIgnoredEditing = _o[1];
|
|
99
104
|
var handleEdit = (0, react_1.useCallback)(function (event) {
|
|
@@ -142,7 +147,7 @@ var AttributesTable = function (_a) {
|
|
|
142
147
|
react_1.default.createElement(ColumnsSettings_1.ColumnsSettings, { columnsData: helpers_1.COLUMNS_DATA, selectedColumns: visibleColumns, onChangeColumns: onChangeVisibleColumns })),
|
|
143
148
|
react_1.default.createElement("div", { className: styles.tableContent },
|
|
144
149
|
isLoading && react_1.default.createElement(LinearLoadIndicator_1.LinearLoadIndicator, null),
|
|
145
|
-
react_1.default.createElement(BasicTable_1.BasicTable, { ref: tableRef, fixFirstColumn: true, headRowHeight: 48, defaultColumnWidth: 250, defaultColumnMinWidth: 200, columnsData: visibleColumnsData, dndRowReorderingEnabled: false, dndRowReorderingHandler: handleReorderAttributeTypes, getIdFromRowValue: getIdFromRowValue, rowsData: rowsData, renderRowCell: renderRowCell, getRowCellHeight: getRowCellHeight, context: tableContext })),
|
|
150
|
+
react_1.default.createElement(BasicTable_1.BasicTable, { ref: tableRef, fixFirstColumn: true, headRowHeight: 48, defaultColumnWidth: 250, defaultColumnMinWidth: 200, columnsData: visibleColumnsData, dndRowReorderingEnabled: false, dndRowReorderingHandler: handleReorderAttributeTypes, getIdFromRowValue: getIdFromRowValue, rowsData: rowsData, onScroll: debouncedNotifyLazyRenderer, renderRowCell: renderRowCell, getRowCellHeight: getRowCellHeight, context: tableContext })),
|
|
146
151
|
react_1.default.createElement(ConfirmDeleteDialog_1.ConfirmDeleteDialog, { open: !!pendingDeletion, onClose: function () { return setPendingDeletion(null); }, onConfirm: handleDelete }),
|
|
147
152
|
react_1.default.createElement(ConfirmEditIgnoredDialog_1.ConfirmEditIgnoredDialog, { open: !!pendingIgnoredEditing, onClose: function () { return setPendingIgnoredEditing(null); }, onConfirmEditWithIgnore: function () { return pendingIgnoredEditing && onEdit(pendingIgnoredEditing); }, onConfirmEditWithoutIgnore: function () {
|
|
148
153
|
if (pendingIgnoredEditing)
|
|
@@ -28,13 +28,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
28
28
|
exports.NestedAttributesRenderer = void 0;
|
|
29
29
|
var react_1 = __importDefault(require("react"));
|
|
30
30
|
var InlineNestedAttribute_1 = require("../../../../../InlineNestedAttribute");
|
|
31
|
+
var LazyRenderer_1 = require("../../../../../LazyRenderer");
|
|
31
32
|
var styles_1 = require("../../styles");
|
|
32
33
|
var NestedAttributesRenderer = function (_a) {
|
|
33
34
|
var attributeValues = _a.attributeValues, props = __rest(_a, ["attributeValues"]);
|
|
34
35
|
var styles = (0, styles_1.useCommonStyles)();
|
|
36
|
+
var enabledLazyRendering = (attributeValues === null || attributeValues === void 0 ? void 0 : attributeValues.length) > 20;
|
|
35
37
|
var nestedValues = attributeValues === null || attributeValues === void 0 ? void 0 : attributeValues.map(function (attributeValue, i) {
|
|
36
|
-
return (react_1.default.createElement(
|
|
37
|
-
react_1.default.createElement(
|
|
38
|
+
return (react_1.default.createElement(LazyRenderer_1.LazyRenderer, { key: attributeValue === null || attributeValue === void 0 ? void 0 : attributeValue.uri, enabled: enabledLazyRendering, className: styles.basicCell },
|
|
39
|
+
react_1.default.createElement("div", { className: styles.basicCell, "data-reltio-id": "value-index-".concat(i) },
|
|
40
|
+
react_1.default.createElement(InlineNestedAttribute_1.InlineNestedAttribute, __assign({ attributeValue: attributeValue }, props)))));
|
|
38
41
|
});
|
|
39
42
|
return react_1.default.createElement(react_1.default.Fragment, null, nestedValues);
|
|
40
43
|
};
|
|
@@ -28,13 +28,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
28
28
|
exports.ReferenceAttributesRenderer = void 0;
|
|
29
29
|
var react_1 = __importDefault(require("react"));
|
|
30
30
|
var InlineReferenceAttribute_1 = require("../../../../../InlineReferenceAttribute");
|
|
31
|
+
var LazyRenderer_1 = require("../../../../../LazyRenderer");
|
|
31
32
|
var styles_1 = require("../../styles");
|
|
32
33
|
var ReferenceAttributesRenderer = function (_a) {
|
|
33
34
|
var attributeValues = _a.attributeValues, crosswalksMap = _a.crosswalksMap, props = __rest(_a, ["attributeValues", "crosswalksMap"]);
|
|
34
35
|
var styles = (0, styles_1.useCommonStyles)();
|
|
36
|
+
var enabledLazyRendering = (attributeValues === null || attributeValues === void 0 ? void 0 : attributeValues.length) > 20;
|
|
35
37
|
var referenceValues = attributeValues === null || attributeValues === void 0 ? void 0 : attributeValues.map(function (attributeValue, i) {
|
|
36
|
-
return (react_1.default.createElement(
|
|
37
|
-
react_1.default.createElement(
|
|
38
|
+
return (react_1.default.createElement(LazyRenderer_1.LazyRenderer, { key: attributeValue === null || attributeValue === void 0 ? void 0 : attributeValue.uri, enabled: enabledLazyRendering, className: styles.basicCell },
|
|
39
|
+
react_1.default.createElement("div", { className: styles.basicCell, "data-reltio-id": "value-index-".concat(i) },
|
|
40
|
+
react_1.default.createElement(InlineReferenceAttribute_1.InlineReferenceAttribute, __assign({ attributeValue: attributeValue, crosswalksMap: crosswalksMap }, props)))));
|
|
38
41
|
});
|
|
39
42
|
return react_1.default.createElement(react_1.default.Fragment, null, referenceValues);
|
|
40
43
|
};
|
|
@@ -261,18 +261,16 @@ var useCollaboration = function (_a) {
|
|
|
261
261
|
var clearCurrentComment = (0, react_1.useCallback)(function () {
|
|
262
262
|
setCurrentComment(null);
|
|
263
263
|
}, []);
|
|
264
|
-
var getCommentState = function (uri, commentUri) { return (0, ramda_1.pathOr)({}, [uri, commentUri], collaborationStateMap); };
|
|
265
|
-
var clearCommentState = function (uri, commentUri) {
|
|
266
|
-
|
|
267
|
-
};
|
|
268
|
-
var updateCommentState = function (uri, commentUri, newState) {
|
|
264
|
+
var getCommentState = (0, react_1.useCallback)(function (uri, commentUri) { return (0, ramda_1.pathOr)({}, [uri, commentUri], collaborationStateMap); }, [collaborationStateMap]);
|
|
265
|
+
var clearCommentState = (0, react_1.useCallback)(function (uri, commentUri) { return setCollaborationStateMap((0, ramda_1.dissocPath)([uri, commentUri])); }, []);
|
|
266
|
+
var updateCommentState = (0, react_1.useCallback)(function (uri, commentUri, newState) {
|
|
269
267
|
setCollaborationStateMap(function (prevCollaborationStateMap) {
|
|
270
268
|
var pathToCommentState = [uri, commentUri];
|
|
271
269
|
var prevCommentState = (0, ramda_1.path)(pathToCommentState, prevCollaborationStateMap);
|
|
272
270
|
return (0, ramda_1.assocPath)(pathToCommentState, (0, ramda_1.mergeRight)(prevCommentState, newState), prevCollaborationStateMap);
|
|
273
271
|
});
|
|
274
|
-
};
|
|
275
|
-
return {
|
|
272
|
+
}, []);
|
|
273
|
+
return (0, react_1.useMemo)(function () { return ({
|
|
276
274
|
clearCurrentComment: clearCurrentComment,
|
|
277
275
|
comments: comments,
|
|
278
276
|
commentsMap: commentsMap,
|
|
@@ -295,6 +293,29 @@ var useCollaboration = function (_a) {
|
|
|
295
293
|
sending: sending,
|
|
296
294
|
deleteReply: deleteReply,
|
|
297
295
|
editReply: editReply
|
|
298
|
-
};
|
|
296
|
+
}); }, [
|
|
297
|
+
clearCurrentComment,
|
|
298
|
+
comments,
|
|
299
|
+
commentsMap,
|
|
300
|
+
getCommentState,
|
|
301
|
+
updateCommentState,
|
|
302
|
+
clearCommentState,
|
|
303
|
+
createComment,
|
|
304
|
+
createReply,
|
|
305
|
+
currentComment,
|
|
306
|
+
deleteComment,
|
|
307
|
+
editComment,
|
|
308
|
+
getComment,
|
|
309
|
+
getComments,
|
|
310
|
+
getCommentsCount,
|
|
311
|
+
loading,
|
|
312
|
+
objectTypes,
|
|
313
|
+
pageToken,
|
|
314
|
+
reOpenThread,
|
|
315
|
+
resolveThread,
|
|
316
|
+
sending,
|
|
317
|
+
deleteReply,
|
|
318
|
+
editReply
|
|
319
|
+
]);
|
|
299
320
|
};
|
|
300
321
|
exports.useCollaboration = useCollaboration;
|
|
@@ -67,13 +67,33 @@ var buildRowValues = function (rowValue) {
|
|
|
67
67
|
return (0, ramda_1.assoc)(id, getCellValues(nestedPath, rowValue[id]), acc);
|
|
68
68
|
}, {});
|
|
69
69
|
};
|
|
70
|
-
var
|
|
71
|
-
return
|
|
70
|
+
var areNestedValuesExceedingLimit = function (maxValuesCount) {
|
|
71
|
+
return function (_a) {
|
|
72
72
|
var indexPath = _a.indexPath;
|
|
73
73
|
return indexPath && indexPath.some(function (index) { return index > maxValuesCount - 1; });
|
|
74
|
-
}
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
var getAllRowHiddenValues = function (rowValues, maxValuesCount) {
|
|
77
|
+
if (maxValuesCount === void 0) { maxValuesCount = Infinity; }
|
|
78
|
+
return rowValues.reduce(function (hiddenValues, _a) {
|
|
79
|
+
var _b = _a.values, values = _b === void 0 ? [] : _b, indexPath = _a.indexPath;
|
|
80
|
+
var newHiddenValues = areNestedValuesExceedingLimit(maxValuesCount)({ indexPath: indexPath })
|
|
81
|
+
? values
|
|
82
|
+
: values.slice(maxValuesCount);
|
|
83
|
+
return hiddenValues.concat(newHiddenValues);
|
|
84
|
+
}, []);
|
|
85
|
+
};
|
|
86
|
+
var adjustFirstWithHiddenValues = function (maxValuesCount) {
|
|
87
|
+
if (maxValuesCount === void 0) { maxValuesCount = Infinity; }
|
|
88
|
+
return function (rowValues) {
|
|
89
|
+
var hiddenValues = getAllRowHiddenValues(rowValues, maxValuesCount);
|
|
90
|
+
return (0, ramda_1.adjust)(0, (0, ramda_1.assoc)('allRowHiddenValues', hiddenValues), rowValues);
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
var applyValuesCountConstraint = function (maxValuesCount) {
|
|
94
|
+
return (0, ramda_1.unless)(function () { return maxValuesCount === Infinity; }, (0, ramda_1.map)((0, ramda_1.pipe)(adjustFirstWithHiddenValues(maxValuesCount), (0, ramda_1.reject)(areNestedValuesExceedingLimit(maxValuesCount)), (0, ramda_1.map)((0, ramda_1.evolve)({
|
|
75
95
|
values: (0, ramda_1.slice)(0, maxValuesCount)
|
|
76
|
-
})))))
|
|
96
|
+
})))));
|
|
77
97
|
};
|
|
78
98
|
var defaultGetIdFromRowValue = function (_, rowIndex) { return rowIndex; };
|
|
79
99
|
var getTableRowsData = function (rowValues, columnsData, renderRowCell, getRowCellHeight, getRowMaxValuesCount, getIdFromRowValue) {
|
|
@@ -249,10 +249,51 @@ describe('dataHelpers', function () {
|
|
|
249
249
|
expect((0, dataHelpers_1.getTableRowsData)(rowValues, columnsData, renderRowCell, null, getRowMaxValuesCount)).toEqual([
|
|
250
250
|
{
|
|
251
251
|
data: {
|
|
252
|
-
'n1.a': [
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
252
|
+
'n1.a': [
|
|
253
|
+
{
|
|
254
|
+
allRowHiddenValues: [2, 3],
|
|
255
|
+
values: [1],
|
|
256
|
+
indexPath: [0],
|
|
257
|
+
nestedKey: 'n1.0',
|
|
258
|
+
rowSpan: 1
|
|
259
|
+
}
|
|
260
|
+
],
|
|
261
|
+
'n1.n2.b': [
|
|
262
|
+
{ values: [], allRowHiddenValues: [4, 5, 6], indexPath: [0], nestedKey: 'n1.0', rowSpan: 1 }
|
|
263
|
+
],
|
|
264
|
+
c: [{ allRowHiddenValues: [8, 9, 10], values: [7], rowSpan: 1 }],
|
|
265
|
+
'n1.d': [{ values: [], allRowHiddenValues: [], rowSpan: 1 }]
|
|
266
|
+
},
|
|
267
|
+
id: 0
|
|
268
|
+
}
|
|
269
|
+
]);
|
|
270
|
+
expect(getRowMaxValuesCount).toHaveBeenCalledWith(0);
|
|
271
|
+
});
|
|
272
|
+
it('should apply allRowHiddenValues correctly if maxValuesCount more than 1', function () {
|
|
273
|
+
var rowValues = [
|
|
274
|
+
{
|
|
275
|
+
'n1.n2.a': [[[1, 2]], [[3, 4, 5]]]
|
|
276
|
+
}
|
|
277
|
+
];
|
|
278
|
+
var columnsData = [{ id: 'n1.n2.a', nestedPath: ['n1', 'n2', 'a'], label: 'columnA' }];
|
|
279
|
+
var renderRowCell = function (_a) {
|
|
280
|
+
var cell = _a.cell;
|
|
281
|
+
return cell.values;
|
|
282
|
+
};
|
|
283
|
+
var getRowMaxValuesCount = jest.fn(function () { return 2; });
|
|
284
|
+
expect((0, dataHelpers_1.getTableRowsData)(rowValues, columnsData, renderRowCell, null, getRowMaxValuesCount)).toEqual([
|
|
285
|
+
{
|
|
286
|
+
data: {
|
|
287
|
+
'n1.n2.a': [
|
|
288
|
+
{
|
|
289
|
+
values: [1, 2],
|
|
290
|
+
allRowHiddenValues: [5],
|
|
291
|
+
indexPath: [0, 0],
|
|
292
|
+
nestedKey: 'n1.0.n2.0',
|
|
293
|
+
rowSpan: 1
|
|
294
|
+
},
|
|
295
|
+
{ values: [3, 4], indexPath: [1, 0], nestedKey: 'n1.1.n2.0', rowSpan: 1 }
|
|
296
|
+
]
|
|
256
297
|
},
|
|
257
298
|
id: 0
|
|
258
299
|
}
|
package/cjs/index.d.ts
CHANGED
|
@@ -178,6 +178,7 @@ export { GaugeChart } from './GaugeChart';
|
|
|
178
178
|
export { UpSetChart } from './UpSetChart';
|
|
179
179
|
export { DateRangeSelector } from './DateRangeSelector';
|
|
180
180
|
export { MetadataTypesSelector } from './MetadataTypesSelector';
|
|
181
|
+
export { LazyRenderer } from './LazyRenderer';
|
|
181
182
|
export { withTooltip } from './HOCs/withTooltip';
|
|
182
183
|
export { withAsyncMount } from './HOCs/withAsyncMount';
|
|
183
184
|
export { withDragHandle } from './HOCs/withDragHandle';
|
package/cjs/index.js
CHANGED
|
@@ -17,10 +17,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.NestedAttributeEditor = exports.NestedAttribute = exports.MoreAttributesButton = exports.InlineReferenceAttribute = exports.InlineNestedAttribute = exports.InlineImageAttribute = exports.InlineAttributesPager = exports.InfoIcon = exports.EditableImageAttributesLine = exports.FilterButton = exports.FacetViewHeader = exports.ExpandedValueTooltip = exports.EntitySelector = exports.EntityCreator = exports.AttributesPager = exports.AttributesList = exports.EditableAttribute = exports.DropDownMenuButton = exports.DescriptionIcon = exports.DefaultCellValueRenderer = exports.ControlAttributeIcon = exports.ColumnsSettingsPopup = exports.ColumnsSettings = exports.ColorBar = exports.CollapseRowButton = exports.BasicChartsFactory = exports.ChartsFactory = exports.CardinalityMessage = exports.BranchDecorator = exports.BasicViewHeader = exports.BasicViewContent = exports.BasicView = exports.BasicTablePagination = exports.basicTableViewState = exports.BasicTable = exports.BasicAttributeSelector = exports.BarChart = exports.AvatarWithFallback = exports.AutoSizeList = exports.AttributesView = exports.AttributesValuesEditor = exports.AttributesFiltersButton = exports.AttributesFiltersBuilder = exports.AttributesFilterSelector = exports.AttributesErrorsPanel = exports.AttributeListItem = exports.AttributeGroupIcon = exports.ArrowExpandButton = exports.ActionsPanel = exports.ActionButton = void 0;
|
|
18
18
|
exports.ConnectionEditor = exports.DropDownSelector = exports.ReactSelectOptionWithCheckIcon = exports.ReactSelectMenuWithPopper = exports.ReactSelectMenuList = exports.ReactSelectLoadMoreButton = exports.ReactSelectDropdownIndicatorWithIconButton = exports.ReactSelectDropdownIndicator = exports.Highlighter = exports.HierarchyNodeTitle = exports.HierarchicalAttributeTooltip = exports.HideOnShrink = exports.ExpandableSearchInput = exports.ErrorPopup = exports.ErrorBoundary = exports.EntityUriLink = exports.EntityTypesSelector = exports.EntityTypeIcon = exports.EntityTypeBadge = exports.EntityAvatar = exports.EMPTY_STATE_VARIANTS = exports.EMPTY_STATE_ICONS = exports.EmptyState = exports.Drawer = exports.DataTypeValue = exports.DataTenantBadge = exports.ConnectionRelationTypeSelector = exports.CollaborationItem = exports.ConfirmationDialog = exports.CommentsContainer = exports.ColoredSourceIcon = exports.CollapseButton = exports.TreeChart = exports.TableWithBars = exports.SourceIcon = exports.SmallIconButtonWithTooltip = exports.SmallIconButton = exports.SimpleAttributeEditor = exports.SimpleAttribute = exports.RowCellAutoSizer = exports.RelationTypeSelector = exports.ReferenceAttributeEditor = exports.ReferenceAttribute = exports.ImageAttributesLine = exports.ReadOnlyAttributesPager = exports.ReadOnlyAttributesList = exports.ReadOnlyAttribute = exports.ReadOnlyAttributeValuesBlock = exports.PieChart = exports.OvIcon = void 0;
|
|
19
19
|
exports.Popper = exports.MultipleInput = exports.ModeSwitcherSelect = exports.ModeSwitcher = exports.TransitiveMatchBlock = exports.SimpleMatchRulesBuilder = exports.SimpleMatchRulesBlock = exports.SimpleMatchRules = exports.MatchRulesBlock = exports.LoadingSpinner = exports.Link = exports.LinearLoadIndicator = exports.ImportButton = exports.ReadableSearchQueryBuilder = exports.ReadableSearchQuery = exports.LogicOperator = exports.TableSkeleton = exports.StepNavigation = exports.TenantLabel = exports.RelevanceScoreBadge = exports.RequiredMark = exports.SettingsMenu = exports.TenantsDropDownSelector = exports.TenantIcon = exports.SourceSystemsSelector = exports.MatchRulesSelector = exports.MultiValueSelector = exports.ProfilesList = exports.NotMatchButton = exports.MergeButton = exports.ProfileMatchCard = exports.ImageGalleryDialog = exports.RelationTypesSelector = exports.ScreenProfileBand = exports.ProfileBandNavigation = exports.EmptyStub = exports.MaskingSwitcher = exports.FileTypeEditor = exports.EmptySearchResult = exports.DropDownEditor = exports.FilterValueEditor = exports.MultiValueChip = exports.TextEditor = exports.DateRangeEditor = exports.NumberEditor = exports.DataTypeValueEditor = exports.DateEditor = exports.ErrorWrapper = exports.ErrorMessage = exports.ConfigureColumnsPopup = void 0;
|
|
20
|
-
exports.
|
|
21
|
-
exports.
|
|
22
|
-
exports.
|
|
23
|
-
exports.mockComputedStyles = exports.FakeMouseEvent = exports.rerenderWrapper = exports.mockElementSizes = exports.fixClicksOnResizablePanes = exports.mockBasicTableSizing = exports.getMuiIconsByName = exports.getMuiIconByName = exports.deepFreeze = exports.awaitMockPromises = exports.TestStylesProvider = exports.TestPerspectivesSettingsProvider = exports.getAttributeSelectorItems = exports.mergeClasses = exports.isControlOrCommandPressed = exports.getValue = exports.getChecked = exports.showErrorMessage = exports.showDefaultErrorMessage = exports.enrichDataWithPercents = exports.defaultRenderRowCell = exports.defaultGetRowCellHeight = exports.columnFilterToMdmFilter = exports.buildColumnsSizeById = exports.buildColumnsFilter = exports.useDndBasicTableScrollModifier = exports.useDynamicYAxisWidth = exports.useFilterAutoFocus = exports.useSegmentationRequest = exports.resolveMarkers = exports.useMarkers = void 0;
|
|
20
|
+
exports.AsyncMountContext = exports.MdmModuleProvider = exports.withTableContext = exports.withFilterAtBottom = exports.withPercents = exports.withContext = exports.withDateRangeSelector = exports.withDragHandle = exports.withAsyncMount = exports.withTooltip = exports.LazyRenderer = exports.MetadataTypesSelector = exports.DateRangeSelector = exports.UpSetChart = exports.GaugeChart = exports.RelationEditor = exports.ReltioMap = exports.Marginator = exports.LightArrowTooltip = exports.ScrollableTabs = exports.VirtualGroupedList = exports.ViewMoreToggle = exports.VerticalHeadingsTable = exports.VerticalDivider = exports.AttributeTitle = exports.Spacer = exports.SimpleDropDownSelector = exports.SidePanelContentHeader = exports.SidePanel = exports.SidePanelEmptyState = exports.SideButtonsPanel = exports.SelectorWithOnlyOptionAutoSelect = exports.SelectionPopup = exports.WhiteSearchInput = exports.SearchInput = exports.ProfileResizablePanes = exports.ResizablePanes = exports.ReltioGridLayout = exports.RCTreeSwitchRenderer = exports.RCTreeLevelLines = exports.RCTree = exports.reactSortableTreeHelpers = exports.ReactSortableTree = exports.MultiSelect = exports.QueryBuilderRowsGroup = exports.QueryBuilderRow = exports.ProfileCard = exports.ProfileBand = exports.PotentialMatchReviewCard = exports.PopupWithArrow = void 0;
|
|
21
|
+
exports.useAttributeValueConfigPermissions = exports.ConfigPermissionsContextProvider = exports.ConfigPermissionsContext = exports.useActionsHook = exports.ActionsHookProvider = exports.PageRequestsAbortingContext = exports.DependentLookupAutopopulationContext = exports.FeaturesContext = exports.LabelsContext = exports.UrlGeneratorsContext = exports.isHighlightedAttributeType = exports.isHighlightedErrorType = exports.ScrollType = exports.ScrollToElementProvider = exports.ScrollToElementContext = exports.SearchValueContext = exports.InterceptHandlersContext = exports.HighlightedValuesContext = exports.SnackbarContext = exports.SearchFiltersContext = exports.useReloadFacet = exports.ReloadFacetProvider = exports.useReloadAllFacets = exports.SandboxAPIContext = exports.EntityContext = exports.RelatedObjectUrisContext = exports.WorkflowTasksContext = exports.useEntityLoadingIndication = exports.EntityLoadingIndicationProvider = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.usePerspectivesSettings = exports.PerspectivesSettingsContext = exports.PivotingAttributeContext = exports.UsersContext = exports.InitialCollaborationContextValue = exports.CollaborationContextProvider = exports.CollaborationContext = exports.BlockImageGalleryDialogContext = exports.PopupBoundariesContext = exports.HistoryDiffContext = void 0;
|
|
22
|
+
exports.useKeyboardNavigation = exports.useDynamicRowCellHeight = exports.useClickableStyle = exports.BasicTableCellRenderer = exports.useBasicTableCellRenderer = exports.useHiddenAttributes = exports.useSavedSearchesRequest = exports.useRequestDCRReview = exports.useAutoFocus = exports.useExpandInvalidRelations = exports.useLayoutResetter = exports.useIsMountedRef = exports.useSnackbar = exports.useSavedStateForEntityType = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.useAPI = exports.useActions = exports.useMatchesColumnsData = exports.useScrollToAttributeError = exports.ThemeProvider = exports.ProfileTablesContext = exports.HiddenAttributesContext = exports.BasicTableContext = exports.BasicTableRowCollapseContext = exports.useDeleteUnmaskedAttributeForRelation = exports.useUnmaskedAttributeValue = exports.useUnmaskAttributeValue = exports.useMaskAttributeValue = exports.MaskedAttributesProvider = exports.useReloadData = exports.ReloadDataProvider = void 0;
|
|
23
|
+
exports.mockComputedStyles = exports.FakeMouseEvent = exports.rerenderWrapper = exports.mockElementSizes = exports.fixClicksOnResizablePanes = exports.mockBasicTableSizing = exports.getMuiIconsByName = exports.getMuiIconByName = exports.deepFreeze = exports.awaitMockPromises = exports.TestStylesProvider = exports.TestPerspectivesSettingsProvider = exports.getAttributeSelectorItems = exports.mergeClasses = exports.isControlOrCommandPressed = exports.getValue = exports.getChecked = exports.showErrorMessage = exports.showDefaultErrorMessage = exports.enrichDataWithPercents = exports.defaultRenderRowCell = exports.defaultGetRowCellHeight = exports.columnFilterToMdmFilter = exports.buildColumnsSizeById = exports.buildColumnsFilter = exports.useDndBasicTableScrollModifier = exports.useDynamicYAxisWidth = exports.useFilterAutoFocus = exports.useSegmentationRequest = exports.resolveMarkers = exports.useMarkers = exports.useMaskedAttribute = void 0;
|
|
24
24
|
// components
|
|
25
25
|
var ActionButton_1 = require("./ActionButton");
|
|
26
26
|
Object.defineProperty(exports, "ActionButton", { enumerable: true, get: function () { return ActionButton_1.ActionButton; } });
|
|
@@ -391,6 +391,8 @@ var DateRangeSelector_1 = require("./DateRangeSelector");
|
|
|
391
391
|
Object.defineProperty(exports, "DateRangeSelector", { enumerable: true, get: function () { return DateRangeSelector_1.DateRangeSelector; } });
|
|
392
392
|
var MetadataTypesSelector_1 = require("./MetadataTypesSelector");
|
|
393
393
|
Object.defineProperty(exports, "MetadataTypesSelector", { enumerable: true, get: function () { return MetadataTypesSelector_1.MetadataTypesSelector; } });
|
|
394
|
+
var LazyRenderer_1 = require("./LazyRenderer");
|
|
395
|
+
Object.defineProperty(exports, "LazyRenderer", { enumerable: true, get: function () { return LazyRenderer_1.LazyRenderer; } });
|
|
394
396
|
// HOCs
|
|
395
397
|
var withTooltip_1 = require("./HOCs/withTooltip");
|
|
396
398
|
Object.defineProperty(exports, "withTooltip", { enumerable: true, get: function () { return withTooltip_1.withTooltip; } });
|
|
@@ -13,7 +13,7 @@ import React, { memo, useCallback, useEffect, useMemo, useState } from 'react';
|
|
|
13
13
|
import classnames from 'classnames';
|
|
14
14
|
import i18n from 'ui-i18n';
|
|
15
15
|
import { always, either, filter, isNil, keys, map, pipe, without, identity, both, move } from 'ramda';
|
|
16
|
-
import { findAttributeTypeByUri, isReadableAttribute, makeAttrTypeUri } from '@reltio/mdm-sdk';
|
|
16
|
+
import { debounce, findAttributeTypeByUri, isReadableAttribute, makeAttrTypeUri } from '@reltio/mdm-sdk';
|
|
17
17
|
import { BasicTable } from '../../../BasicTable';
|
|
18
18
|
import { ColumnsSettings } from '../../../ColumnsSettings';
|
|
19
19
|
import { useDynamicRowCellHeight } from '../../../hooks/useDynamicRowCellHeight';
|
|
@@ -24,6 +24,7 @@ import { useMdmMetadata } from '../../../contexts/MdmModuleContext';
|
|
|
24
24
|
import { COLUMNS_DATA, DEFAULT_VISIBLE_COLUMNS, getBasicTableColumnsData, getBasicTableRowsData } from './helpers';
|
|
25
25
|
import { ConfirmEditIgnoredDialog } from './components/ConfirmEditIgnoredDialog';
|
|
26
26
|
import { CommonRowCellRenderer } from './components/CommonRowCellRenderer';
|
|
27
|
+
import { LazyRenderer } from '../../../LazyRenderer';
|
|
27
28
|
import { useStyles } from './styles';
|
|
28
29
|
var DEFAULT_ROW_HEIGHT = 68;
|
|
29
30
|
var getIdFromRowValue = function (rowValue) { return rowValue.ovValues.attributeType.uri; };
|
|
@@ -31,6 +32,7 @@ var getRowCellKey = function (_a) {
|
|
|
31
32
|
var id = _a.columnData.id, cellIndex = _a.cellIndex, rowValue = _a.rowValue;
|
|
32
33
|
return "".concat(id, "[").concat(getIdFromRowValue(rowValue), "][").concat(cellIndex, "]");
|
|
33
34
|
};
|
|
35
|
+
var debouncedNotifyLazyRenderer = debounce(LazyRenderer.notify, 0);
|
|
34
36
|
var AttributesTable = function (_a) {
|
|
35
37
|
var entity = _a.entity, isLoading = _a.isLoading, crosswalksMap = _a.crosswalksMap, _b = _a.visibleColumns, visibleColumns = _b === void 0 ? DEFAULT_VISIBLE_COLUMNS : _b, onChangeVisibleColumns = _a.onChangeVisibleColumns, readOnly = _a.readOnly, _c = _a.onDelete, onDelete = _c === void 0 ? identity : _c, _d = _a.onPin, onPin = _d === void 0 ? identity : _d, _e = _a.onIgnore, onIgnore = _e === void 0 ? identity : _e, _f = _a.onEdit, onEdit = _f === void 0 ? identity : _f, _g = _a.onAdd, onAdd = _g === void 0 ? identity : _g, emptyTempAttributeUris = _a.emptyTempAttributeUris, selectedAttributeTypes = _a.selectedAttributeTypes, _h = _a.onSelectAttributeTypes, onSelectAttributeTypes = _h === void 0 ? identity : _h, additionalHeaderItems = _a.additionalHeaderItems, className = _a.className, activeSurvivorshipGroupUri = _a.activeSurvivorshipGroupUri, tableRef = _a.tableRef;
|
|
36
38
|
var styles = useStyles();
|
|
@@ -66,6 +68,9 @@ var AttributesTable = function (_a) {
|
|
|
66
68
|
var getRowCellHeight = useCallback(either(getDynamicRowCellHeight, always(DEFAULT_ROW_HEIGHT)), [
|
|
67
69
|
getDynamicRowCellHeight
|
|
68
70
|
]);
|
|
71
|
+
useEffect(function () {
|
|
72
|
+
debouncedNotifyLazyRenderer();
|
|
73
|
+
}, [getRowCellHeight]);
|
|
69
74
|
var _m = useState(null), pendingDeletion = _m[0], setPendingDeletion = _m[1];
|
|
70
75
|
var _o = useState(null), pendingIgnoredEditing = _o[0], setPendingIgnoredEditing = _o[1];
|
|
71
76
|
var handleEdit = useCallback(function (event) {
|
|
@@ -114,7 +119,7 @@ var AttributesTable = function (_a) {
|
|
|
114
119
|
React.createElement(ColumnsSettings, { columnsData: COLUMNS_DATA, selectedColumns: visibleColumns, onChangeColumns: onChangeVisibleColumns })),
|
|
115
120
|
React.createElement("div", { className: styles.tableContent },
|
|
116
121
|
isLoading && React.createElement(LinearLoadIndicator, null),
|
|
117
|
-
React.createElement(BasicTable, { ref: tableRef, fixFirstColumn: true, headRowHeight: 48, defaultColumnWidth: 250, defaultColumnMinWidth: 200, columnsData: visibleColumnsData, dndRowReorderingEnabled: false, dndRowReorderingHandler: handleReorderAttributeTypes, getIdFromRowValue: getIdFromRowValue, rowsData: rowsData, renderRowCell: renderRowCell, getRowCellHeight: getRowCellHeight, context: tableContext })),
|
|
122
|
+
React.createElement(BasicTable, { ref: tableRef, fixFirstColumn: true, headRowHeight: 48, defaultColumnWidth: 250, defaultColumnMinWidth: 200, columnsData: visibleColumnsData, dndRowReorderingEnabled: false, dndRowReorderingHandler: handleReorderAttributeTypes, getIdFromRowValue: getIdFromRowValue, rowsData: rowsData, onScroll: debouncedNotifyLazyRenderer, renderRowCell: renderRowCell, getRowCellHeight: getRowCellHeight, context: tableContext })),
|
|
118
123
|
React.createElement(ConfirmDeleteDialog, { open: !!pendingDeletion, onClose: function () { return setPendingDeletion(null); }, onConfirm: handleDelete }),
|
|
119
124
|
React.createElement(ConfirmEditIgnoredDialog, { open: !!pendingIgnoredEditing, onClose: function () { return setPendingIgnoredEditing(null); }, onConfirmEditWithIgnore: function () { return pendingIgnoredEditing && onEdit(pendingIgnoredEditing); }, onConfirmEditWithoutIgnore: function () {
|
|
120
125
|
if (pendingIgnoredEditing)
|
|
@@ -22,13 +22,16 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
22
22
|
};
|
|
23
23
|
import React from 'react';
|
|
24
24
|
import { InlineNestedAttribute } from '../../../../../InlineNestedAttribute';
|
|
25
|
+
import { LazyRenderer } from '../../../../../LazyRenderer';
|
|
25
26
|
import { useCommonStyles } from '../../styles';
|
|
26
27
|
export var NestedAttributesRenderer = function (_a) {
|
|
27
28
|
var attributeValues = _a.attributeValues, props = __rest(_a, ["attributeValues"]);
|
|
28
29
|
var styles = useCommonStyles();
|
|
30
|
+
var enabledLazyRendering = (attributeValues === null || attributeValues === void 0 ? void 0 : attributeValues.length) > 20;
|
|
29
31
|
var nestedValues = attributeValues === null || attributeValues === void 0 ? void 0 : attributeValues.map(function (attributeValue, i) {
|
|
30
|
-
return (React.createElement(
|
|
31
|
-
React.createElement(
|
|
32
|
+
return (React.createElement(LazyRenderer, { key: attributeValue === null || attributeValue === void 0 ? void 0 : attributeValue.uri, enabled: enabledLazyRendering, className: styles.basicCell },
|
|
33
|
+
React.createElement("div", { className: styles.basicCell, "data-reltio-id": "value-index-".concat(i) },
|
|
34
|
+
React.createElement(InlineNestedAttribute, __assign({ attributeValue: attributeValue }, props)))));
|
|
32
35
|
});
|
|
33
36
|
return React.createElement(React.Fragment, null, nestedValues);
|
|
34
37
|
};
|
|
@@ -22,13 +22,16 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
22
22
|
};
|
|
23
23
|
import React from 'react';
|
|
24
24
|
import { InlineReferenceAttribute } from '../../../../../InlineReferenceAttribute';
|
|
25
|
+
import { LazyRenderer } from '../../../../../LazyRenderer';
|
|
25
26
|
import { useCommonStyles } from '../../styles';
|
|
26
27
|
export var ReferenceAttributesRenderer = function (_a) {
|
|
27
28
|
var attributeValues = _a.attributeValues, crosswalksMap = _a.crosswalksMap, props = __rest(_a, ["attributeValues", "crosswalksMap"]);
|
|
28
29
|
var styles = useCommonStyles();
|
|
30
|
+
var enabledLazyRendering = (attributeValues === null || attributeValues === void 0 ? void 0 : attributeValues.length) > 20;
|
|
29
31
|
var referenceValues = attributeValues === null || attributeValues === void 0 ? void 0 : attributeValues.map(function (attributeValue, i) {
|
|
30
|
-
return (React.createElement(
|
|
31
|
-
React.createElement(
|
|
32
|
+
return (React.createElement(LazyRenderer, { key: attributeValue === null || attributeValue === void 0 ? void 0 : attributeValue.uri, enabled: enabledLazyRendering, className: styles.basicCell },
|
|
33
|
+
React.createElement("div", { className: styles.basicCell, "data-reltio-id": "value-index-".concat(i) },
|
|
34
|
+
React.createElement(InlineReferenceAttribute, __assign({ attributeValue: attributeValue, crosswalksMap: crosswalksMap }, props)))));
|
|
32
35
|
});
|
|
33
36
|
return React.createElement(React.Fragment, null, referenceValues);
|
|
34
37
|
};
|
|
@@ -18,7 +18,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
18
18
|
}
|
|
19
19
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
20
|
};
|
|
21
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
21
|
+
import { useCallback, useEffect, useState, useMemo } from 'react';
|
|
22
22
|
import { andThen, fromPairs, map, otherwise, pipe, props, uniqBy, prop, propEq, when, always, assocPath, dissocPath, path, pathOr, mergeRight } from 'ramda';
|
|
23
23
|
import { createComment as createCommentRequest, createReply as createReplyRequest, getComment as getCommentRequest, getCommentsCount as getCommentsCountRequest, updateComment as updateCommentRequest, updateReply as updateReplyRequest, deleteComment as deleteCommentRequest, deleteReply as deleteReplyRequest, getComments as getCommentsRequest, isTempUri } from '@reltio/mdm-sdk';
|
|
24
24
|
import { useMdmCollaborationPath, useMdmEntity, useMdmIsCollaborationEnabled, useMdmTenant } from '../../contexts/MdmModuleContext';
|
|
@@ -258,18 +258,16 @@ export var useCollaboration = function (_a) {
|
|
|
258
258
|
var clearCurrentComment = useCallback(function () {
|
|
259
259
|
setCurrentComment(null);
|
|
260
260
|
}, []);
|
|
261
|
-
var getCommentState = function (uri, commentUri) { return pathOr({}, [uri, commentUri], collaborationStateMap); };
|
|
262
|
-
var clearCommentState = function (uri, commentUri) {
|
|
263
|
-
|
|
264
|
-
};
|
|
265
|
-
var updateCommentState = function (uri, commentUri, newState) {
|
|
261
|
+
var getCommentState = useCallback(function (uri, commentUri) { return pathOr({}, [uri, commentUri], collaborationStateMap); }, [collaborationStateMap]);
|
|
262
|
+
var clearCommentState = useCallback(function (uri, commentUri) { return setCollaborationStateMap(dissocPath([uri, commentUri])); }, []);
|
|
263
|
+
var updateCommentState = useCallback(function (uri, commentUri, newState) {
|
|
266
264
|
setCollaborationStateMap(function (prevCollaborationStateMap) {
|
|
267
265
|
var pathToCommentState = [uri, commentUri];
|
|
268
266
|
var prevCommentState = path(pathToCommentState, prevCollaborationStateMap);
|
|
269
267
|
return assocPath(pathToCommentState, mergeRight(prevCommentState, newState), prevCollaborationStateMap);
|
|
270
268
|
});
|
|
271
|
-
};
|
|
272
|
-
return {
|
|
269
|
+
}, []);
|
|
270
|
+
return useMemo(function () { return ({
|
|
273
271
|
clearCurrentComment: clearCurrentComment,
|
|
274
272
|
comments: comments,
|
|
275
273
|
commentsMap: commentsMap,
|
|
@@ -292,5 +290,28 @@ export var useCollaboration = function (_a) {
|
|
|
292
290
|
sending: sending,
|
|
293
291
|
deleteReply: deleteReply,
|
|
294
292
|
editReply: editReply
|
|
295
|
-
};
|
|
293
|
+
}); }, [
|
|
294
|
+
clearCurrentComment,
|
|
295
|
+
comments,
|
|
296
|
+
commentsMap,
|
|
297
|
+
getCommentState,
|
|
298
|
+
updateCommentState,
|
|
299
|
+
clearCommentState,
|
|
300
|
+
createComment,
|
|
301
|
+
createReply,
|
|
302
|
+
currentComment,
|
|
303
|
+
deleteComment,
|
|
304
|
+
editComment,
|
|
305
|
+
getComment,
|
|
306
|
+
getComments,
|
|
307
|
+
getCommentsCount,
|
|
308
|
+
loading,
|
|
309
|
+
objectTypes,
|
|
310
|
+
pageToken,
|
|
311
|
+
reOpenThread,
|
|
312
|
+
resolveThread,
|
|
313
|
+
sending,
|
|
314
|
+
deleteReply,
|
|
315
|
+
editReply
|
|
316
|
+
]);
|
|
296
317
|
};
|
|
@@ -9,7 +9,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
import { add, always, assoc, chain, evolve, isEmpty, isNil, map, mapObjIndexed, max, pipe, pluck, propEq, propOr, reduce, reject, slice, uniq, unless, values } from 'ramda';
|
|
12
|
+
import { add, adjust, always, assoc, chain, evolve, isEmpty, isNil, map, mapObjIndexed, max, pipe, pluck, propEq, propOr, reduce, reject, slice, uniq, unless, values } from 'ramda';
|
|
13
13
|
import { wrapInArrayIfNeeded } from '@reltio/mdm-sdk';
|
|
14
14
|
import { DefaultCellValueRenderer } from '../../DefaultCellValueRenderer';
|
|
15
15
|
import { calcRowSpansForNestedKeys, flattenNestedColumnValues, getNestedKeyForNestedColumnCell, TOTAL_ROW_SPAN_KEY } from './nestedHelpers';
|
|
@@ -64,13 +64,33 @@ var buildRowValues = function (rowValue) {
|
|
|
64
64
|
return assoc(id, getCellValues(nestedPath, rowValue[id]), acc);
|
|
65
65
|
}, {});
|
|
66
66
|
};
|
|
67
|
-
var
|
|
68
|
-
return
|
|
67
|
+
var areNestedValuesExceedingLimit = function (maxValuesCount) {
|
|
68
|
+
return function (_a) {
|
|
69
69
|
var indexPath = _a.indexPath;
|
|
70
70
|
return indexPath && indexPath.some(function (index) { return index > maxValuesCount - 1; });
|
|
71
|
-
}
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
var getAllRowHiddenValues = function (rowValues, maxValuesCount) {
|
|
74
|
+
if (maxValuesCount === void 0) { maxValuesCount = Infinity; }
|
|
75
|
+
return rowValues.reduce(function (hiddenValues, _a) {
|
|
76
|
+
var _b = _a.values, values = _b === void 0 ? [] : _b, indexPath = _a.indexPath;
|
|
77
|
+
var newHiddenValues = areNestedValuesExceedingLimit(maxValuesCount)({ indexPath: indexPath })
|
|
78
|
+
? values
|
|
79
|
+
: values.slice(maxValuesCount);
|
|
80
|
+
return hiddenValues.concat(newHiddenValues);
|
|
81
|
+
}, []);
|
|
82
|
+
};
|
|
83
|
+
var adjustFirstWithHiddenValues = function (maxValuesCount) {
|
|
84
|
+
if (maxValuesCount === void 0) { maxValuesCount = Infinity; }
|
|
85
|
+
return function (rowValues) {
|
|
86
|
+
var hiddenValues = getAllRowHiddenValues(rowValues, maxValuesCount);
|
|
87
|
+
return adjust(0, assoc('allRowHiddenValues', hiddenValues), rowValues);
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
var applyValuesCountConstraint = function (maxValuesCount) {
|
|
91
|
+
return unless(function () { return maxValuesCount === Infinity; }, map(pipe(adjustFirstWithHiddenValues(maxValuesCount), reject(areNestedValuesExceedingLimit(maxValuesCount)), map(evolve({
|
|
72
92
|
values: slice(0, maxValuesCount)
|
|
73
|
-
})))))
|
|
93
|
+
})))));
|
|
74
94
|
};
|
|
75
95
|
var defaultGetIdFromRowValue = function (_, rowIndex) { return rowIndex; };
|
|
76
96
|
var getTableRowsData = function (rowValues, columnsData, renderRowCell, getRowCellHeight, getRowMaxValuesCount, getIdFromRowValue) {
|
|
@@ -244,10 +244,51 @@ describe('dataHelpers', function () {
|
|
|
244
244
|
expect(getTableRowsData(rowValues, columnsData, renderRowCell, null, getRowMaxValuesCount)).toEqual([
|
|
245
245
|
{
|
|
246
246
|
data: {
|
|
247
|
-
'n1.a': [
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
247
|
+
'n1.a': [
|
|
248
|
+
{
|
|
249
|
+
allRowHiddenValues: [2, 3],
|
|
250
|
+
values: [1],
|
|
251
|
+
indexPath: [0],
|
|
252
|
+
nestedKey: 'n1.0',
|
|
253
|
+
rowSpan: 1
|
|
254
|
+
}
|
|
255
|
+
],
|
|
256
|
+
'n1.n2.b': [
|
|
257
|
+
{ values: [], allRowHiddenValues: [4, 5, 6], indexPath: [0], nestedKey: 'n1.0', rowSpan: 1 }
|
|
258
|
+
],
|
|
259
|
+
c: [{ allRowHiddenValues: [8, 9, 10], values: [7], rowSpan: 1 }],
|
|
260
|
+
'n1.d': [{ values: [], allRowHiddenValues: [], rowSpan: 1 }]
|
|
261
|
+
},
|
|
262
|
+
id: 0
|
|
263
|
+
}
|
|
264
|
+
]);
|
|
265
|
+
expect(getRowMaxValuesCount).toHaveBeenCalledWith(0);
|
|
266
|
+
});
|
|
267
|
+
it('should apply allRowHiddenValues correctly if maxValuesCount more than 1', function () {
|
|
268
|
+
var rowValues = [
|
|
269
|
+
{
|
|
270
|
+
'n1.n2.a': [[[1, 2]], [[3, 4, 5]]]
|
|
271
|
+
}
|
|
272
|
+
];
|
|
273
|
+
var columnsData = [{ id: 'n1.n2.a', nestedPath: ['n1', 'n2', 'a'], label: 'columnA' }];
|
|
274
|
+
var renderRowCell = function (_a) {
|
|
275
|
+
var cell = _a.cell;
|
|
276
|
+
return cell.values;
|
|
277
|
+
};
|
|
278
|
+
var getRowMaxValuesCount = jest.fn(function () { return 2; });
|
|
279
|
+
expect(getTableRowsData(rowValues, columnsData, renderRowCell, null, getRowMaxValuesCount)).toEqual([
|
|
280
|
+
{
|
|
281
|
+
data: {
|
|
282
|
+
'n1.n2.a': [
|
|
283
|
+
{
|
|
284
|
+
values: [1, 2],
|
|
285
|
+
allRowHiddenValues: [5],
|
|
286
|
+
indexPath: [0, 0],
|
|
287
|
+
nestedKey: 'n1.0.n2.0',
|
|
288
|
+
rowSpan: 1
|
|
289
|
+
},
|
|
290
|
+
{ values: [3, 4], indexPath: [1, 0], nestedKey: 'n1.1.n2.0', rowSpan: 1 }
|
|
291
|
+
]
|
|
251
292
|
},
|
|
252
293
|
id: 0
|
|
253
294
|
}
|
package/index.d.ts
CHANGED
|
@@ -178,6 +178,7 @@ export { GaugeChart } from './GaugeChart';
|
|
|
178
178
|
export { UpSetChart } from './UpSetChart';
|
|
179
179
|
export { DateRangeSelector } from './DateRangeSelector';
|
|
180
180
|
export { MetadataTypesSelector } from './MetadataTypesSelector';
|
|
181
|
+
export { LazyRenderer } from './LazyRenderer';
|
|
181
182
|
export { withTooltip } from './HOCs/withTooltip';
|
|
182
183
|
export { withAsyncMount } from './HOCs/withAsyncMount';
|
|
183
184
|
export { withDragHandle } from './HOCs/withDragHandle';
|
package/index.js
CHANGED
|
@@ -179,6 +179,7 @@ export { GaugeChart } from './GaugeChart';
|
|
|
179
179
|
export { UpSetChart } from './UpSetChart';
|
|
180
180
|
export { DateRangeSelector } from './DateRangeSelector';
|
|
181
181
|
export { MetadataTypesSelector } from './MetadataTypesSelector';
|
|
182
|
+
export { LazyRenderer } from './LazyRenderer';
|
|
182
183
|
// HOCs
|
|
183
184
|
export { withTooltip } from './HOCs/withTooltip';
|
|
184
185
|
export { withAsyncMount } from './HOCs/withAsyncMount';
|