orc-shared 5.10.0-dev.4 → 5.10.0-dev.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/MaterialUI/DataDisplay/Table.js +68 -10
- package/dist/components/MaterialUI/DataDisplay/TableProps.js +5 -1
- package/dist/constants.js +2 -1
- package/package.json +1 -1
- package/src/components/MaterialUI/DataDisplay/Table.js +51 -0
- package/src/components/MaterialUI/DataDisplay/Table.test.js +131 -0
- package/src/components/MaterialUI/DataDisplay/TableProps.js +4 -0
- package/src/components/MaterialUI/DataDisplay/TableProps.test.js +2 -0
- package/src/constants.js +1 -0
|
@@ -14,6 +14,7 @@ var _TableProps = _interopRequireWildcard(require("./TableProps"));
|
|
|
14
14
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
15
|
var _reactResizeDetector = _interopRequireDefault(require("react-resize-detector"));
|
|
16
16
|
var _lodash = require("lodash");
|
|
17
|
+
var _useViewState3 = _interopRequireDefault(require("../../../hooks/useViewState"));
|
|
17
18
|
var _excluded = ["deepPropsComparation", "dataRows", "isEditingMode"],
|
|
18
19
|
_excluded2 = ["deepPropsComparation", "isEditingMode"];
|
|
19
20
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -318,16 +319,25 @@ var buildTableRows = function buildTableRows(rows, classes, customClasses, selec
|
|
|
318
319
|
return mappedRows;
|
|
319
320
|
};
|
|
320
321
|
var FullTable = _react.default.forwardRef(function (props, ref) {
|
|
322
|
+
return props.saveScrollbarPosition ? /*#__PURE__*/_react.default.createElement(FullTableWithSavedScrollbar, _extends({}, props, {
|
|
323
|
+
ref: ref
|
|
324
|
+
})) : /*#__PURE__*/_react.default.createElement(DefaultFullTable, _extends({}, props, {
|
|
325
|
+
ref: ref
|
|
326
|
+
}));
|
|
327
|
+
});
|
|
328
|
+
var DefaultFullTable = _react.default.forwardRef(function (props, ref) {
|
|
321
329
|
var scrollEvent = function scrollEvent(evt) {
|
|
322
330
|
if (evt.target.scrollHeight - (evt.target.scrollTop + evt.target.offsetHeight) < 100 && props.dataRows.length === props.latestPage * props.pageLength) {
|
|
323
331
|
props.scrollLoader(props.latestPage + 1);
|
|
324
332
|
}
|
|
333
|
+
props.saveScrollBarPosition == null || props.saveScrollBarPosition(evt);
|
|
325
334
|
};
|
|
326
335
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
327
336
|
key: "actualTable",
|
|
328
337
|
className: (0, _classnames.default)(props.classes.tableContainer, props.customClasses.tableContainer),
|
|
329
338
|
ref: ref,
|
|
330
|
-
onScroll: scrollEvent
|
|
339
|
+
onScroll: scrollEvent,
|
|
340
|
+
"data-qa": "scrollable-table-div"
|
|
331
341
|
}, /*#__PURE__*/_react.default.createElement(_reactResizeDetector.default, {
|
|
332
342
|
onResize: props.onResize
|
|
333
343
|
}), /*#__PURE__*/_react.default.createElement(_Table.default, {
|
|
@@ -346,6 +356,46 @@ var FullTable = _react.default.forwardRef(function (props, ref) {
|
|
|
346
356
|
className: props.classes.placeholder
|
|
347
357
|
}, props.placeholder));
|
|
348
358
|
});
|
|
359
|
+
var FullTableWithSavedScrollbar = _react.default.forwardRef(__signature__(__signature__(function (props, ref) {
|
|
360
|
+
if (props.saveScrollbarPosition && !props.tableName) {
|
|
361
|
+
throw new Error("prop 'tableName' is required if 'saveScrollbarPosition' is set to true.");
|
|
362
|
+
}
|
|
363
|
+
var _useViewState = (0, _useViewState3.default)(props.tableName + "ScrollbarPosition"),
|
|
364
|
+
_useViewState2 = _slicedToArray(_useViewState, 2),
|
|
365
|
+
scrollbarViewState = _useViewState2[0],
|
|
366
|
+
updateScrollbarViewState = _useViewState2[1];
|
|
367
|
+
var _useState = (0, _react.useState)(scrollbarViewState.scrollBarPosition),
|
|
368
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
369
|
+
scrollbar = _useState2[0],
|
|
370
|
+
setScrollbarPosition = _useState2[1];
|
|
371
|
+
(0, _react.useEffect)(function () {
|
|
372
|
+
var handler = setTimeout(function () {
|
|
373
|
+
updateScrollbarViewState("scrollBarPosition", scrollbar);
|
|
374
|
+
}, 500);
|
|
375
|
+
return function () {
|
|
376
|
+
clearTimeout(handler);
|
|
377
|
+
};
|
|
378
|
+
},
|
|
379
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
380
|
+
[scrollbar]);
|
|
381
|
+
var saveScrollBarPosition = function saveScrollBarPosition(evt) {
|
|
382
|
+
setScrollbarPosition(evt.target.scrollTop);
|
|
383
|
+
};
|
|
384
|
+
(0, _react.useEffect)(function () {
|
|
385
|
+
if (scrollbarViewState.scrollBarPosition > 0) {
|
|
386
|
+
ref.current.scrollTop = scrollbarViewState.scrollBarPosition;
|
|
387
|
+
}
|
|
388
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
389
|
+
}, []);
|
|
390
|
+
return /*#__PURE__*/_react.default.createElement(DefaultFullTable, _extends({}, props, {
|
|
391
|
+
ref: ref,
|
|
392
|
+
saveScrollBarPosition: saveScrollBarPosition
|
|
393
|
+
}));
|
|
394
|
+
}, "useViewState{[scrollbarViewState, updateScrollbarViewState]}\nuseState{[scrollbar, setScrollbarPosition](scrollbarViewState.scrollBarPosition)}\nuseEffect{}\nuseEffect{}", function () {
|
|
395
|
+
return [_useViewState3.default];
|
|
396
|
+
}), "useViewState{[scrollbarViewState, updateScrollbarViewState]}\nuseState{[scrollbar, setScrollbarPosition](scrollbarViewState.scrollBarPosition)}\nuseEffect{}\nuseEffect{}", function () {
|
|
397
|
+
return [_useViewState3.default];
|
|
398
|
+
}));
|
|
349
399
|
var Table = function Table(_ref4) {
|
|
350
400
|
var tableInfo = _ref4.tableInfo,
|
|
351
401
|
headers = _ref4.headers,
|
|
@@ -369,6 +419,8 @@ var Table = function Table(_ref4) {
|
|
|
369
419
|
var selectedRows = (tableProps == null ? void 0 : tableProps.get(_TableProps.default.propNames.selectedRows)) || null;
|
|
370
420
|
var selectedRowsChanged = (tableProps == null ? void 0 : tableProps.get(_TableProps.default.propNames.selectedRowsChanged)) || null;
|
|
371
421
|
var constrained = (tableProps == null ? void 0 : tableProps.get(_TableProps.default.propNames.constrained)) || false;
|
|
422
|
+
var tableName = (tableProps == null ? void 0 : tableProps.get(_TableProps.default.propNames.tableName)) || null;
|
|
423
|
+
var saveScrollbarPosition = (tableProps == null ? void 0 : tableProps.get(_TableProps.default.propNames.saveScrollbarPosition)) || false;
|
|
372
424
|
customClasses["tableHeader"] = (tableProps == null ? void 0 : tableProps.getStyle(_TableProps.default.ruleNames.tableHeader)) || null;
|
|
373
425
|
customClasses["tableRow"] = (tableProps == null ? void 0 : tableProps.getStyle(_TableProps.default.ruleNames.tableRow)) || null;
|
|
374
426
|
customClasses["tableCell"] = (tableProps == null ? void 0 : tableProps.getStyle(_TableProps.default.ruleNames.tableCell)) || null;
|
|
@@ -378,17 +430,17 @@ var Table = function Table(_ref4) {
|
|
|
378
430
|
customClasses["table"] = (tableProps == null ? void 0 : tableProps.getStyle(_TableProps.default.ruleNames.table)) || null;
|
|
379
431
|
if (selectedRows && !selectedRowsChanged || !selectedRows && selectedRowsChanged) throw new Error("Both 'selectedRows' and 'selectedRowsChanged' need to be defined if one of them is.");
|
|
380
432
|
var refScrolled = (0, _react.useRef)();
|
|
381
|
-
var
|
|
382
|
-
|
|
383
|
-
scrolled =
|
|
384
|
-
setScrolled =
|
|
385
|
-
var
|
|
433
|
+
var _useState3 = (0, _react.useState)(0),
|
|
434
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
435
|
+
scrolled = _useState4[0],
|
|
436
|
+
setScrolled = _useState4[1];
|
|
437
|
+
var _useState5 = (0, _react.useState)({
|
|
386
438
|
width: 0,
|
|
387
439
|
height: 0
|
|
388
440
|
}),
|
|
389
|
-
|
|
390
|
-
tableSize =
|
|
391
|
-
setTableSize =
|
|
441
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
442
|
+
tableSize = _useState6[0],
|
|
443
|
+
setTableSize = _useState6[1];
|
|
392
444
|
var _useTableSelection = (0, _useTableSelection3.useTableSelection)(rows, selectedRows, selectedRowsChanged),
|
|
393
445
|
_useTableSelection2 = _slicedToArray(_useTableSelection, 3),
|
|
394
446
|
selectedNumber = _useTableSelection2[0],
|
|
@@ -447,7 +499,9 @@ var Table = function Table(_ref4) {
|
|
|
447
499
|
placeholder: placeholder,
|
|
448
500
|
deepPropsComparation: deepPropsComparation,
|
|
449
501
|
isEditingMode: isEditingMode,
|
|
450
|
-
context: context
|
|
502
|
+
context: context,
|
|
503
|
+
tableName: tableName,
|
|
504
|
+
saveScrollbarPosition: saveScrollbarPosition
|
|
451
505
|
}));
|
|
452
506
|
};
|
|
453
507
|
__signature__(Table, "useRef{refScrolled}\nuseState{[scrolled, setScrolled](0)}\nuseState{[tableSize, setTableSize]({ width: 0, height: 0 })}\nuseTableSelection{[selectedNumber, tableSelectionStatus, selectionMethods]}\nuseStyles{classes}\nuseEffect{}\nuseCallback{onResize}", function () {
|
|
@@ -487,6 +541,8 @@ var _default3 = exports.default = _default2;
|
|
|
487
541
|
reactHotLoader.register(buildTableHeaders, "buildTableHeaders", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
488
542
|
reactHotLoader.register(buildTableRows, "buildTableRows", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
489
543
|
reactHotLoader.register(FullTable, "FullTable", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
544
|
+
reactHotLoader.register(DefaultFullTable, "DefaultFullTable", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
545
|
+
reactHotLoader.register(FullTableWithSavedScrollbar, "FullTableWithSavedScrollbar", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
490
546
|
reactHotLoader.register(Table, "Table", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
491
547
|
reactHotLoader.register(_default, "default", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
492
548
|
})();
|
|
@@ -521,6 +577,8 @@ var _default3 = exports.default = _default2;
|
|
|
521
577
|
reactHotLoader.register(buildTableHeaders, "buildTableHeaders", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
522
578
|
reactHotLoader.register(buildTableRows, "buildTableRows", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
523
579
|
reactHotLoader.register(FullTable, "FullTable", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
580
|
+
reactHotLoader.register(DefaultFullTable, "DefaultFullTable", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
581
|
+
reactHotLoader.register(FullTableWithSavedScrollbar, "FullTableWithSavedScrollbar", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
524
582
|
reactHotLoader.register(Table, "Table", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
525
583
|
reactHotLoader.register(_default2, "default", "/home/vsts/work/1/s/src/components/MaterialUI/DataDisplay/Table.js");
|
|
526
584
|
})();
|
|
@@ -37,6 +37,8 @@ var TableProps = /*#__PURE__*/function (_ComponentProps) {
|
|
|
37
37
|
_this.componentProps.set(_this.constructor.propNames.selectedRows, null);
|
|
38
38
|
_this.componentProps.set(_this.constructor.propNames.selectedRowsChanged, null);
|
|
39
39
|
_this.componentProps.set(_this.constructor.propNames.constrained, false);
|
|
40
|
+
_this.componentProps.set(_this.constructor.propNames.tableName, null);
|
|
41
|
+
_this.componentProps.set(_this.constructor.propNames.saveScrollbarPosition, null);
|
|
40
42
|
_this.componentClasses.set(_this.constructor.ruleNames.tableHeader, null);
|
|
41
43
|
_this.componentClasses.set(_this.constructor.ruleNames.tableRow, null);
|
|
42
44
|
_this.componentClasses.set(_this.constructor.ruleNames.tableCell, null);
|
|
@@ -66,7 +68,9 @@ _defineProperty(TableProps, "propNames", {
|
|
|
66
68
|
isEditingMode: "isEditingMode",
|
|
67
69
|
selectedRows: "selectedRows",
|
|
68
70
|
selectedRowsChanged: "selectedRowsChanged",
|
|
69
|
-
constrained: "constrained"
|
|
71
|
+
constrained: "constrained",
|
|
72
|
+
tableName: "tableName",
|
|
73
|
+
saveScrollbarPosition: "saveScrollbarPosition"
|
|
70
74
|
});
|
|
71
75
|
_defineProperty(TableProps, "ruleNames", {
|
|
72
76
|
tableHeader: "tableHeader",
|
package/dist/constants.js
CHANGED
|
@@ -33,7 +33,8 @@ var platformRoles = exports.platformRoles = {
|
|
|
33
33
|
Administrator: "Administrator",
|
|
34
34
|
Editor: "Editor",
|
|
35
35
|
Reader: "Reader",
|
|
36
|
-
Recipient: "Recipient"
|
|
36
|
+
Recipient: "Recipient",
|
|
37
|
+
PasswordReset: "PasswordReset"
|
|
37
38
|
};
|
|
38
39
|
var roleGroups = exports.roleGroups = {
|
|
39
40
|
Products: "Products",
|
package/package.json
CHANGED
|
@@ -10,6 +10,7 @@ import TableProps, { isTableProps } from "./TableProps";
|
|
|
10
10
|
import classNames from "classnames";
|
|
11
11
|
import ResizeDetector from "react-resize-detector";
|
|
12
12
|
import { isEqual } from "lodash";
|
|
13
|
+
import useViewState from "../../../hooks/useViewState";
|
|
13
14
|
|
|
14
15
|
export const useStyles = makeStyles(theme => ({
|
|
15
16
|
container: {
|
|
@@ -303,6 +304,14 @@ const buildTableRows = (
|
|
|
303
304
|
};
|
|
304
305
|
|
|
305
306
|
const FullTable = React.forwardRef((props, ref) => {
|
|
307
|
+
return props.saveScrollbarPosition ? (
|
|
308
|
+
<FullTableWithSavedScrollbar {...props} ref={ref} />
|
|
309
|
+
) : (
|
|
310
|
+
<DefaultFullTable {...props} ref={ref} />
|
|
311
|
+
);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
const DefaultFullTable = React.forwardRef((props, ref) => {
|
|
306
315
|
const scrollEvent = evt => {
|
|
307
316
|
if (
|
|
308
317
|
evt.target.scrollHeight - (evt.target.scrollTop + evt.target.offsetHeight) < 100 &&
|
|
@@ -310,6 +319,8 @@ const FullTable = React.forwardRef((props, ref) => {
|
|
|
310
319
|
) {
|
|
311
320
|
props.scrollLoader(props.latestPage + 1);
|
|
312
321
|
}
|
|
322
|
+
|
|
323
|
+
props.saveScrollBarPosition?.(evt);
|
|
313
324
|
};
|
|
314
325
|
|
|
315
326
|
return (
|
|
@@ -318,6 +329,7 @@ const FullTable = React.forwardRef((props, ref) => {
|
|
|
318
329
|
className={classNames(props.classes.tableContainer, props.customClasses.tableContainer)}
|
|
319
330
|
ref={ref}
|
|
320
331
|
onScroll={scrollEvent}
|
|
332
|
+
data-qa="scrollable-table-div"
|
|
321
333
|
>
|
|
322
334
|
<ResizeDetector onResize={props.onResize} />
|
|
323
335
|
<TableMui
|
|
@@ -345,6 +357,41 @@ const FullTable = React.forwardRef((props, ref) => {
|
|
|
345
357
|
);
|
|
346
358
|
});
|
|
347
359
|
|
|
360
|
+
const FullTableWithSavedScrollbar = React.forwardRef((props, ref) => {
|
|
361
|
+
if (props.saveScrollbarPosition && !props.tableName) {
|
|
362
|
+
throw new Error("prop 'tableName' is required if 'saveScrollbarPosition' is set to true.");
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
const [scrollbarViewState, updateScrollbarViewState] = useViewState(props.tableName + "ScrollbarPosition");
|
|
366
|
+
const [scrollbar, setScrollbarPosition] = useState(scrollbarViewState.scrollBarPosition);
|
|
367
|
+
|
|
368
|
+
useEffect(
|
|
369
|
+
() => {
|
|
370
|
+
const handler = setTimeout(() => {
|
|
371
|
+
updateScrollbarViewState("scrollBarPosition", scrollbar);
|
|
372
|
+
}, 500);
|
|
373
|
+
return () => {
|
|
374
|
+
clearTimeout(handler);
|
|
375
|
+
};
|
|
376
|
+
},
|
|
377
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
378
|
+
[scrollbar],
|
|
379
|
+
);
|
|
380
|
+
|
|
381
|
+
const saveScrollBarPosition = evt => {
|
|
382
|
+
setScrollbarPosition(evt.target.scrollTop);
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
useEffect(() => {
|
|
386
|
+
if (scrollbarViewState.scrollBarPosition > 0) {
|
|
387
|
+
ref.current.scrollTop = scrollbarViewState.scrollBarPosition;
|
|
388
|
+
}
|
|
389
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
390
|
+
}, []);
|
|
391
|
+
|
|
392
|
+
return <DefaultFullTable {...props} ref={ref} saveScrollBarPosition={saveScrollBarPosition} />;
|
|
393
|
+
});
|
|
394
|
+
|
|
348
395
|
const Table = ({
|
|
349
396
|
tableInfo,
|
|
350
397
|
headers,
|
|
@@ -370,6 +417,8 @@ const Table = ({
|
|
|
370
417
|
const selectedRows = tableProps?.get(TableProps.propNames.selectedRows) || null;
|
|
371
418
|
const selectedRowsChanged = tableProps?.get(TableProps.propNames.selectedRowsChanged) || null;
|
|
372
419
|
const constrained = tableProps?.get(TableProps.propNames.constrained) || false;
|
|
420
|
+
const tableName = tableProps?.get(TableProps.propNames.tableName) || null;
|
|
421
|
+
const saveScrollbarPosition = tableProps?.get(TableProps.propNames.saveScrollbarPosition) || false;
|
|
373
422
|
|
|
374
423
|
customClasses["tableHeader"] = tableProps?.getStyle(TableProps.ruleNames.tableHeader) || null;
|
|
375
424
|
customClasses["tableRow"] = tableProps?.getStyle(TableProps.ruleNames.tableRow) || null;
|
|
@@ -467,6 +516,8 @@ const Table = ({
|
|
|
467
516
|
deepPropsComparation={deepPropsComparation}
|
|
468
517
|
isEditingMode={isEditingMode}
|
|
469
518
|
context={context}
|
|
519
|
+
tableName={tableName}
|
|
520
|
+
saveScrollbarPosition={saveScrollbarPosition}
|
|
470
521
|
/>
|
|
471
522
|
</TableContainer>
|
|
472
523
|
);
|
|
@@ -19,6 +19,8 @@ import ResizeDetector from "react-resize-detector";
|
|
|
19
19
|
import CheckboxMui from "../Inputs/Checkbox";
|
|
20
20
|
import { cloneDeep } from "lodash";
|
|
21
21
|
import TooltippedTypography from "./TooltippedElements/TooltippedTypography";
|
|
22
|
+
import Immutable from "immutable";
|
|
23
|
+
import { TestWrapper } from "../../../utils/testUtils";
|
|
22
24
|
|
|
23
25
|
const TestComp = ({ classToTest, styleProps }) => {
|
|
24
26
|
const classes = useStyles({ ...styleProps });
|
|
@@ -507,6 +509,22 @@ describe("Table", () => {
|
|
|
507
509
|
{ fieldName: "a2", label: headerLabels.column2 },
|
|
508
510
|
];
|
|
509
511
|
|
|
512
|
+
let store, state;
|
|
513
|
+
|
|
514
|
+
beforeEach(() => {
|
|
515
|
+
state = Immutable.fromJS({
|
|
516
|
+
modules: {
|
|
517
|
+
tree: {},
|
|
518
|
+
},
|
|
519
|
+
view: {},
|
|
520
|
+
});
|
|
521
|
+
store = {
|
|
522
|
+
subscribe: () => {},
|
|
523
|
+
getState: () => state,
|
|
524
|
+
dispatch: sinon.spy().named("dispatch"),
|
|
525
|
+
};
|
|
526
|
+
});
|
|
527
|
+
|
|
510
528
|
it("Fails if tableProps has wrong type", () => {
|
|
511
529
|
ignoreConsoleError(() => {
|
|
512
530
|
const component = <Table rows={[]} headers={[]} tableProps="Wrong type" />;
|
|
@@ -1113,4 +1131,117 @@ describe("Table", () => {
|
|
|
1113
1131
|
|
|
1114
1132
|
expect(style.customClass, "to equal", "specialClass");
|
|
1115
1133
|
});
|
|
1134
|
+
|
|
1135
|
+
it("Table throws if saveScrollbar is true but tableName is falsy", () => {
|
|
1136
|
+
const { headers, rows } = buildHeaderAndRowFromConfig(config, elements);
|
|
1137
|
+
|
|
1138
|
+
const tableProps = new TableProps();
|
|
1139
|
+
|
|
1140
|
+
tableProps.set(TableProps.propNames.tableName, null);
|
|
1141
|
+
tableProps.set(TableProps.propNames.saveScrollbarPosition, true);
|
|
1142
|
+
|
|
1143
|
+
ignoreConsoleError(() => {
|
|
1144
|
+
const component = <Table rows={rows} headers={headers} tableProps={tableProps} />;
|
|
1145
|
+
expect(() => mount(component), "to throw a", Error).then(error => {
|
|
1146
|
+
expect(error, "to have message", "prop 'tableName' is required if 'saveScrollbarPosition' is set to true.");
|
|
1147
|
+
});
|
|
1148
|
+
});
|
|
1149
|
+
});
|
|
1150
|
+
|
|
1151
|
+
it("handle scrolling event with save ", () => {
|
|
1152
|
+
const { headers, rows } = buildHeaderAndRowFromConfig(config, elements);
|
|
1153
|
+
|
|
1154
|
+
const tableProps = new TableProps();
|
|
1155
|
+
|
|
1156
|
+
tableProps.set(TableProps.propNames.selectMode, true);
|
|
1157
|
+
tableProps.set(TableProps.propNames.tableName, "test");
|
|
1158
|
+
tableProps.set(TableProps.propNames.saveScrollbarPosition, true);
|
|
1159
|
+
|
|
1160
|
+
const scrollLoader = sinon.spy().named("scrollLoader");
|
|
1161
|
+
|
|
1162
|
+
const component = (
|
|
1163
|
+
<TestWrapper provider={{ store }}>
|
|
1164
|
+
<Table
|
|
1165
|
+
rows={rows}
|
|
1166
|
+
headers={headers}
|
|
1167
|
+
pageLength={2}
|
|
1168
|
+
latestPage={1}
|
|
1169
|
+
tableProps={tableProps}
|
|
1170
|
+
scrollLoader={scrollLoader}
|
|
1171
|
+
/>
|
|
1172
|
+
</TestWrapper>
|
|
1173
|
+
);
|
|
1174
|
+
|
|
1175
|
+
const mountedComponent = mount(component);
|
|
1176
|
+
|
|
1177
|
+
const scrollEvent = document.createEvent("MouseEvents");
|
|
1178
|
+
scrollEvent.initEvent("scroll", true, false);
|
|
1179
|
+
|
|
1180
|
+
const table = mountedComponent.find(TableMui);
|
|
1181
|
+
|
|
1182
|
+
table.simulate("scroll", {
|
|
1183
|
+
target: { scrollHeight: 1000, scrollTop: 40, offsetHeight: 100 },
|
|
1184
|
+
});
|
|
1185
|
+
|
|
1186
|
+
expect(scrollLoader, "was not called");
|
|
1187
|
+
|
|
1188
|
+
table.simulate("scroll", {
|
|
1189
|
+
target: { scrollHeight: 1000, scrollTop: 850, offsetHeight: 100 },
|
|
1190
|
+
});
|
|
1191
|
+
|
|
1192
|
+
return expect(scrollLoader, "to have calls satisfying", [{ args: [2] }])
|
|
1193
|
+
.then(() => new Promise(r => setTimeout(r, 600)))
|
|
1194
|
+
.then(() =>
|
|
1195
|
+
expect(store.dispatch, "to have calls satisfying", [
|
|
1196
|
+
{
|
|
1197
|
+
args: [
|
|
1198
|
+
{
|
|
1199
|
+
type: "VIEW_STATE_SET_FIELD",
|
|
1200
|
+
payload: {
|
|
1201
|
+
name: "testScrollbarPosition",
|
|
1202
|
+
field: "scrollBarPosition",
|
|
1203
|
+
value: 850,
|
|
1204
|
+
},
|
|
1205
|
+
},
|
|
1206
|
+
],
|
|
1207
|
+
},
|
|
1208
|
+
]),
|
|
1209
|
+
);
|
|
1210
|
+
});
|
|
1211
|
+
|
|
1212
|
+
it("should initialize scrollbar to saved state", () => {
|
|
1213
|
+
const { headers, rows } = buildHeaderAndRowFromConfig(config, elements);
|
|
1214
|
+
|
|
1215
|
+
state = state.setIn(
|
|
1216
|
+
["view", "testScrollbarPosition"],
|
|
1217
|
+
Immutable.fromJS({
|
|
1218
|
+
scrollBarPosition: 800,
|
|
1219
|
+
}),
|
|
1220
|
+
);
|
|
1221
|
+
|
|
1222
|
+
const tableProps = new TableProps();
|
|
1223
|
+
|
|
1224
|
+
tableProps.set(TableProps.propNames.selectMode, true);
|
|
1225
|
+
tableProps.set(TableProps.propNames.tableName, "test");
|
|
1226
|
+
tableProps.set(TableProps.propNames.saveScrollbarPosition, true);
|
|
1227
|
+
|
|
1228
|
+
const scrollLoader = sinon.spy().named("scrollLoader");
|
|
1229
|
+
|
|
1230
|
+
const component = (
|
|
1231
|
+
<TestWrapper provider={{ store }}>
|
|
1232
|
+
<Table
|
|
1233
|
+
rows={rows}
|
|
1234
|
+
headers={headers}
|
|
1235
|
+
pageLength={2}
|
|
1236
|
+
latestPage={1}
|
|
1237
|
+
tableProps={tableProps}
|
|
1238
|
+
scrollLoader={scrollLoader}
|
|
1239
|
+
/>
|
|
1240
|
+
</TestWrapper>
|
|
1241
|
+
);
|
|
1242
|
+
|
|
1243
|
+
const mountedComponent = mount(component);
|
|
1244
|
+
const scrollableDiv = mountedComponent.find({ "data-qa": "scrollable-table-div" });
|
|
1245
|
+
expect(scrollableDiv?.getElement()?.ref?.current?.scrollTop, "to equal", 800);
|
|
1246
|
+
});
|
|
1116
1247
|
});
|
|
@@ -12,6 +12,8 @@ class TableProps extends ComponentProps {
|
|
|
12
12
|
selectedRows: "selectedRows",
|
|
13
13
|
selectedRowsChanged: "selectedRowsChanged",
|
|
14
14
|
constrained: "constrained",
|
|
15
|
+
tableName: "tableName",
|
|
16
|
+
saveScrollbarPosition: "saveScrollbarPosition",
|
|
15
17
|
};
|
|
16
18
|
|
|
17
19
|
static ruleNames = {
|
|
@@ -37,6 +39,8 @@ class TableProps extends ComponentProps {
|
|
|
37
39
|
this.componentProps.set(this.constructor.propNames.selectedRows, null);
|
|
38
40
|
this.componentProps.set(this.constructor.propNames.selectedRowsChanged, null);
|
|
39
41
|
this.componentProps.set(this.constructor.propNames.constrained, false);
|
|
42
|
+
this.componentProps.set(this.constructor.propNames.tableName, null);
|
|
43
|
+
this.componentProps.set(this.constructor.propNames.saveScrollbarPosition, null);
|
|
40
44
|
|
|
41
45
|
this.componentClasses.set(this.constructor.ruleNames.tableHeader, null);
|
|
42
46
|
this.componentClasses.set(this.constructor.ruleNames.tableRow, null);
|
|
@@ -30,6 +30,8 @@ describe("TableProps Props", () => {
|
|
|
30
30
|
"selectedRows",
|
|
31
31
|
"selectedRowsChanged",
|
|
32
32
|
"constrained",
|
|
33
|
+
"tableName",
|
|
34
|
+
"saveScrollbarPosition",
|
|
33
35
|
];
|
|
34
36
|
|
|
35
37
|
const ruleNames = ["tableHeader", "tableRow", "tableCell", "headerCell", "tableContainer", "container", "table"];
|