orc-shared 5.10.0-dev.2 → 5.10.0-dev.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/actions/metadata.js +30 -11
  2. package/dist/actions/requestsApi.js +10 -1
  3. package/dist/components/AppFrame/About.js +136 -100
  4. package/dist/components/AppFrame/Anchor.js +45 -21
  5. package/dist/components/AppFrame/AppFrame.js +53 -31
  6. package/dist/components/AppFrame/Help.js +35 -15
  7. package/dist/components/AppFrame/MenuItem.js +148 -114
  8. package/dist/components/AppFrame/Preferences.js +136 -97
  9. package/dist/components/AppFrame/Sidebar.js +51 -28
  10. package/dist/components/AppFrame/Topbar.js +61 -36
  11. package/dist/components/ColumnWrapper.js +28 -5
  12. package/dist/components/Culture.js +33 -14
  13. package/dist/components/DropMenu/Menu.js +79 -45
  14. package/dist/components/DropMenu/index.js +34 -29
  15. package/dist/components/Form/Combination.js +45 -16
  16. package/dist/components/Form/Field.js +57 -38
  17. package/dist/components/Form/FieldElements.js +0 -11
  18. package/dist/components/Form/Fieldset.js +47 -19
  19. package/dist/components/Form/Form.js +22 -9
  20. package/dist/components/Form/FormElement.js +40 -7
  21. package/dist/components/Form/Inputs/Button.js +63 -18
  22. package/dist/components/Form/Inputs/ReadOnly.js +50 -27
  23. package/dist/components/{AppFrame/ApplicationSelector/Header.js → Form/Inputs/Selector.js} +30 -31
  24. package/dist/components/Form/Inputs/Text.js +20 -37
  25. package/dist/components/Form/Inputs/Toggles.js +39 -40
  26. package/dist/components/Form/Inputs/index.js +2 -13
  27. package/dist/components/MaterialUI/DataDisplay/PredefinedElements/Placeholder.js +31 -11
  28. package/dist/components/MaterialUI/DataDisplay/PredefinedElements/SectionToolbar.js +89 -0
  29. package/dist/components/MaterialUI/DataDisplay/Table.js +109 -18
  30. package/dist/components/MaterialUI/DataDisplay/TableProps.js +5 -1
  31. package/dist/components/MaterialUI/DataDisplay/TableWithInMemoryPaging.js +198 -0
  32. package/dist/components/MaterialUI/DataDisplay/TooltippedElements/MultipleLinesText.js +4 -1
  33. package/dist/components/MaterialUI/Inputs/DatePicker.js +14 -14
  34. package/dist/components/MaterialUI/Inputs/PredefinedElements/SearchControl.js +1 -0
  35. package/dist/components/MaterialUI/Inputs/Select.js +2 -0
  36. package/dist/components/MaterialUI/Inputs/SelectProps.js +2 -0
  37. package/dist/components/MaterialUI/Inputs/Switch.js +17 -1
  38. package/dist/components/MaterialUI/Inputs/SwitchProps.js +2 -0
  39. package/dist/components/MaterialUI/Inputs/TimePicker.js +14 -21
  40. package/dist/components/MaterialUI/hocs/withDeferredTooltip.js +3 -1
  41. package/dist/components/MaterialUI/muiThemes.js +2 -1
  42. package/dist/components/Provision.js +1 -1
  43. package/dist/constants.js +2 -1
  44. package/dist/content/iconsSheet.svg +740 -116
  45. package/dist/hocs/withScrollBox.js +27 -12
  46. package/dist/hooks/useDaysAndMonthsLocalization.js +77 -0
  47. package/dist/hooks/useInMemoryPaging.js +135 -0
  48. package/dist/hooks/useMultipleFieldEditState.js +12 -3
  49. package/dist/reducers/metadata.js +6 -0
  50. package/dist/schemas/metadata.js +9 -1
  51. package/dist/selectors/locale.js +1 -0
  52. package/dist/selectors/metadata.js +14 -11
  53. package/dist/sharedMessages.js +184 -0
  54. package/dist/utils/ListHelper.js +271 -0
  55. package/dist/utils/comparisonHelper.js +185 -0
  56. package/dist/utils/propertyBagHelper.js +3 -1
  57. package/dist/utils/timezoneHelper.js +18 -31
  58. package/package.json +4 -3
  59. package/src/actions/metadata.js +11 -0
  60. package/src/actions/metadata.test.js +27 -0
  61. package/src/actions/requestsApi.js +6 -0
  62. package/src/components/AppFrame/About.js +97 -117
  63. package/src/components/AppFrame/About.test.js +128 -90
  64. package/src/components/AppFrame/Anchor.js +34 -36
  65. package/src/components/AppFrame/Anchor.test.js +5 -68
  66. package/src/components/AppFrame/AppFrame.js +31 -40
  67. package/src/components/AppFrame/AppFrame.test.js +424 -445
  68. package/src/components/AppFrame/Help.js +23 -20
  69. package/src/components/AppFrame/Help.test.js +3 -3
  70. package/src/components/AppFrame/MenuItem.js +106 -126
  71. package/src/components/AppFrame/MenuItem.test.js +78 -169
  72. package/src/components/AppFrame/Preferences.js +110 -98
  73. package/src/components/AppFrame/Preferences.test.js +115 -219
  74. package/src/components/AppFrame/Sidebar.js +39 -41
  75. package/src/components/AppFrame/Sidebar.test.js +88 -168
  76. package/src/components/AppFrame/Topbar.js +59 -52
  77. package/src/components/AppFrame/Topbar.test.js +31 -39
  78. package/src/components/ColumnWrapper.js +18 -9
  79. package/src/components/Culture.js +20 -10
  80. package/src/components/Culture.test.js +27 -16
  81. package/src/components/DropMenu/DropMenu.test.js +185 -224
  82. package/src/components/DropMenu/Menu.js +73 -80
  83. package/src/components/DropMenu/Menu.test.js +35 -86
  84. package/src/components/DropMenu/index.js +19 -15
  85. package/src/components/Form/Combination.js +35 -28
  86. package/src/components/Form/Combination.test.js +6 -19
  87. package/src/components/Form/Field.js +53 -66
  88. package/src/components/Form/Field.test.js +29 -51
  89. package/src/components/Form/FieldElements.js +0 -14
  90. package/src/components/Form/FieldElements.test.js +104 -111
  91. package/src/components/Form/Fieldset.js +42 -37
  92. package/src/components/Form/Fieldset.test.js +14 -7
  93. package/src/components/Form/Form.js +11 -7
  94. package/src/components/Form/Form.test.js +75 -56
  95. package/src/components/Form/FormElement.js +24 -16
  96. package/src/components/Form/InputField.test.js +24 -30
  97. package/src/components/Form/Inputs/Button.js +58 -14
  98. package/src/components/Form/Inputs/Button.test.js +32 -7
  99. package/src/components/Form/Inputs/Inputs.test.js +0 -7
  100. package/src/components/Form/Inputs/ReadOnly.js +34 -28
  101. package/src/components/Form/Inputs/ReadOnly.test.js +45 -7
  102. package/src/components/Form/Inputs/Selector.js +22 -0
  103. package/src/components/Form/Inputs/Selector.test.js +105 -0
  104. package/src/components/Form/Inputs/Text.js +15 -44
  105. package/src/components/Form/Inputs/Text.test.js +20 -29
  106. package/src/components/Form/Inputs/Toggles.js +27 -26
  107. package/src/components/Form/Inputs/Toggles.test.js +22 -28
  108. package/src/components/Form/Inputs/index.js +4 -15
  109. package/src/components/MaterialUI/DataDisplay/PredefinedElements/InformationItem.test.js +1 -4
  110. package/src/components/MaterialUI/DataDisplay/PredefinedElements/Placeholder.js +32 -6
  111. package/src/components/MaterialUI/DataDisplay/PredefinedElements/Placeholder.test.js +3 -1
  112. package/src/components/MaterialUI/DataDisplay/PredefinedElements/SectionToolbar.js +39 -0
  113. package/src/components/MaterialUI/DataDisplay/Table.js +190 -114
  114. package/src/components/MaterialUI/DataDisplay/Table.test.js +246 -1
  115. package/src/components/MaterialUI/DataDisplay/TableProps.js +4 -0
  116. package/src/components/MaterialUI/DataDisplay/TableProps.test.js +2 -0
  117. package/src/components/MaterialUI/DataDisplay/TableWithInMemoryPaging.js +145 -0
  118. package/src/components/MaterialUI/DataDisplay/TableWithInMemoryPaging.test.js +457 -0
  119. package/src/components/MaterialUI/DataDisplay/TooltippedElements/MultipleLinesText.js +5 -1
  120. package/src/components/MaterialUI/DataDisplay/TooltippedElements/MultipleLinesText.test.js +7 -1
  121. package/src/components/MaterialUI/Inputs/DatePicker.js +19 -20
  122. package/src/components/MaterialUI/Inputs/DatePicker.test.js +11 -6
  123. package/src/components/MaterialUI/Inputs/PredefinedElements/SearchControl.js +1 -0
  124. package/src/components/MaterialUI/Inputs/Select.js +2 -0
  125. package/src/components/MaterialUI/Inputs/SelectProps.js +2 -0
  126. package/src/components/MaterialUI/Inputs/SelectProps.test.js +2 -0
  127. package/src/components/MaterialUI/Inputs/Switch.js +22 -1
  128. package/src/components/MaterialUI/Inputs/Switch.test.js +23 -0
  129. package/src/components/MaterialUI/Inputs/SwitchProps.js +2 -0
  130. package/src/components/MaterialUI/Inputs/SwitchProps.test.js +2 -0
  131. package/src/components/MaterialUI/Inputs/TimePicker.js +10 -19
  132. package/src/components/MaterialUI/Inputs/TimePicker.test.js +278 -117
  133. package/src/components/MaterialUI/hocs/withDeferredTooltip.js +4 -1
  134. package/src/components/MaterialUI/hocs/withDeferredTooltip.test.js +27 -0
  135. package/src/components/MaterialUI/muiThemes.js +1 -0
  136. package/src/components/Navigation/Bar.test.js +92 -87
  137. package/src/components/Provision.js +1 -1
  138. package/src/components/TaskDetailsModal.test.js +1 -3
  139. package/src/constants.js +1 -0
  140. package/src/content/iconsSheet.svg +740 -116
  141. package/src/hocs/withScrollBox.js +32 -19
  142. package/src/hocs/withScrollBox.test.js +15 -3
  143. package/src/hooks/useDaysAndMonthsLocalization.js +79 -0
  144. package/src/hooks/useDaysAndMonthsLocalization.test.js +107 -0
  145. package/src/hooks/useInMemoryPaging.js +78 -0
  146. package/src/hooks/useInMemoryPaging.test.js +515 -0
  147. package/src/hooks/useMultipleFieldEditState.js +11 -4
  148. package/src/hooks/useMultipleFieldEditState.test.js +49 -1
  149. package/src/reducers/metadata.js +6 -1
  150. package/src/reducers/metadata.test.js +31 -0
  151. package/src/requests +1 -0
  152. package/src/schemas/metadata.js +3 -0
  153. package/src/selectors/locale.js +1 -1
  154. package/src/selectors/metadata.js +12 -9
  155. package/src/selectors/metadata.test.js +92 -11
  156. package/src/sharedMessages.js +184 -0
  157. package/src/timezones.json +883 -0
  158. package/src/translations/en-US.json +46 -0
  159. package/src/translations/fr-CA.json +46 -0
  160. package/src/utils/ListHelper.js +203 -0
  161. package/src/utils/ListHelper.test.js +710 -0
  162. package/src/utils/comparisonHelper.js +135 -0
  163. package/src/utils/comparisonHelper.test.js +334 -0
  164. package/src/utils/propertyBagHelper.js +2 -0
  165. package/src/utils/propertyBagHelper.test.js +6 -0
  166. package/src/utils/timezoneHelper.js +10 -135
  167. package/src/utils/timezoneHelper.test.js +7 -7
  168. package/dist/components/Form/FieldList.js +0 -270
  169. package/dist/components/Form/Inputs/FieldButtons.js +0 -66
  170. package/dist/components/Form/Inputs/Number.js +0 -117
  171. package/dist/components/Form/Inputs/SmallButton.js +0 -91
  172. package/dist/components/Form/Inputs/Time.js +0 -86
  173. package/dist/components/Form/Inputs/Translation.js +0 -169
  174. package/src/components/AppFrame/ApplicationSelector/Header.js +0 -34
  175. package/src/components/AppFrame/ApplicationSelector/Header.test.js +0 -23
  176. package/src/components/Form/FieldList.js +0 -210
  177. package/src/components/Form/FieldList.test.js +0 -558
  178. package/src/components/Form/Inputs/FieldButtons.js +0 -90
  179. package/src/components/Form/Inputs/Number.js +0 -60
  180. package/src/components/Form/Inputs/Number.test.js +0 -435
  181. package/src/components/Form/Inputs/SmallButton.js +0 -37
  182. package/src/components/Form/Inputs/SmallButton.test.js +0 -65
  183. package/src/components/Form/Inputs/Time.js +0 -32
  184. package/src/components/Form/Inputs/Time.test.js +0 -41
  185. package/src/components/Form/Inputs/Translation.js +0 -93
  186. package/src/components/Form/Inputs/Translation.test.js +0 -204
@@ -1,26 +1,39 @@
1
1
  import React from "react";
2
- import styled from "styled-components";
2
+ import { makeStyles } from "@material-ui/core/styles";
3
3
  import { safeGet } from "../utils";
4
4
  import Measure from "react-measure";
5
5
 
6
- export const Scrollbox = styled.div`
7
- flex: 0 1 100%;
8
- overflow-x: hidden;
9
- overflow-y: auto;
10
- `;
6
+ const useStyles = makeStyles({
7
+ scrollbox: {
8
+ flex: "0 1 100%",
9
+ overflowX: "hidden",
10
+ overflowY: "auto",
11
+ },
12
+ });
11
13
 
12
- const withScrollBox = WrappedComp => ({ onScroll, ...otherProps }) => (
13
- <Measure bounds>
14
- {({ measureRef, contentRect }) => (
15
- <Scrollbox onScroll={onScroll} ref={measureRef}>
16
- <WrappedComp
17
- {...otherProps}
18
- height={safeGet(contentRect, "bounds", "height")}
19
- width={safeGet(contentRect, "bounds", "width")}
20
- />
21
- </Scrollbox>
22
- )}
23
- </Measure>
24
- );
14
+ const withScrollBox = WrappedComp =>
15
+ React.forwardRef(({ onScroll, ...otherProps }, externalRef) => {
16
+ const classes = useStyles();
17
+
18
+ const mergeRef = (node, measureRef) => {
19
+ measureRef(node);
20
+
21
+ if (externalRef) externalRef.current = node;
22
+ };
23
+
24
+ return (
25
+ <Measure bounds>
26
+ {({ measureRef, contentRect }) => (
27
+ <div className={classes.scrollbox} onScroll={onScroll} ref={node => mergeRef(node, measureRef)}>
28
+ <WrappedComp
29
+ {...otherProps}
30
+ height={safeGet(contentRect, "bounds", "height")}
31
+ width={safeGet(contentRect, "bounds", "width")}
32
+ />
33
+ </div>
34
+ )}
35
+ </Measure>
36
+ );
37
+ });
25
38
 
26
39
  export default withScrollBox;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import withScrollBox, { Scrollbox } from "./withScrollBox";
2
+ import withScrollBox from "./withScrollBox";
3
3
 
4
4
  const TestComp = ({ children }) => <div>{children}</div>;
5
5
  TestComp.displayName = "TestComp";
@@ -11,7 +11,7 @@ describe("withScrollBox", () => {
11
11
  <EnhComp other="prop">This is inside the box</EnhComp>,
12
12
  "when mounted",
13
13
  "to satisfy",
14
- <Scrollbox>
14
+ <div>
15
15
  <TestComp
16
16
  other="prop"
17
17
  height={expect.it("to be undefined") /* jsdom can't do sizes*/}
@@ -19,7 +19,19 @@ describe("withScrollBox", () => {
19
19
  >
20
20
  This is inside the box
21
21
  </TestComp>
22
- </Scrollbox>,
22
+ </div>,
23
23
  ),
24
24
  ));
25
+
26
+ it("forwards the ref to the scroll box div", () => {
27
+ const ref = React.createRef();
28
+
29
+ return expect(withScrollBox, "when called with", [TestComp]).then(EnhComp => {
30
+ const element = <EnhComp ref={ref} />;
31
+ return expect(() => expect(element, "when mounted", "to be truthy"), "not to throw").then(() => {
32
+ expect(ref.current, "to be defined");
33
+ expect(ref.current.nodeType, "to equal", 1);
34
+ });
35
+ });
36
+ });
25
37
  });
@@ -0,0 +1,79 @@
1
+ import React from "react";
2
+ import { useIntl } from "react-intl";
3
+ import sharedMessages from "../sharedMessages";
4
+
5
+ const useDaysAndMonthsLocalization = () => {
6
+ const { formatMessage } = useIntl();
7
+
8
+ return React.useMemo(() => {
9
+ const weekdays = [
10
+ formatMessage(sharedMessages.sunday),
11
+ formatMessage(sharedMessages.monday),
12
+ formatMessage(sharedMessages.tuesday),
13
+ formatMessage(sharedMessages.wednesday),
14
+ formatMessage(sharedMessages.thursday),
15
+ formatMessage(sharedMessages.friday),
16
+ formatMessage(sharedMessages.saturday),
17
+ ];
18
+
19
+ const weekdaysShort = [
20
+ formatMessage(sharedMessages.sundayShort),
21
+ formatMessage(sharedMessages.mondayShort),
22
+ formatMessage(sharedMessages.tuesdayShort),
23
+ formatMessage(sharedMessages.wednesdayShort),
24
+ formatMessage(sharedMessages.thursdayShort),
25
+ formatMessage(sharedMessages.fridayShort),
26
+ formatMessage(sharedMessages.saturdayShort),
27
+ ];
28
+
29
+ const weekdaysMin = [
30
+ formatMessage(sharedMessages.sundayMin),
31
+ formatMessage(sharedMessages.mondayMin),
32
+ formatMessage(sharedMessages.tuesdayMin),
33
+ formatMessage(sharedMessages.wednesdayMin),
34
+ formatMessage(sharedMessages.thursdayMin),
35
+ formatMessage(sharedMessages.fridayMin),
36
+ formatMessage(sharedMessages.saturdayMin),
37
+ ];
38
+
39
+ const months = [
40
+ formatMessage(sharedMessages.january),
41
+ formatMessage(sharedMessages.february),
42
+ formatMessage(sharedMessages.march),
43
+ formatMessage(sharedMessages.april),
44
+ formatMessage(sharedMessages.may),
45
+ formatMessage(sharedMessages.june),
46
+ formatMessage(sharedMessages.july),
47
+ formatMessage(sharedMessages.august),
48
+ formatMessage(sharedMessages.september),
49
+ formatMessage(sharedMessages.october),
50
+ formatMessage(sharedMessages.november),
51
+ formatMessage(sharedMessages.december),
52
+ ];
53
+
54
+ const monthsShort = [
55
+ formatMessage(sharedMessages.januaryShort),
56
+ formatMessage(sharedMessages.februaryShort),
57
+ formatMessage(sharedMessages.marchShort),
58
+ formatMessage(sharedMessages.aprilShort),
59
+ formatMessage(sharedMessages.mayShort),
60
+ formatMessage(sharedMessages.juneShort),
61
+ formatMessage(sharedMessages.julyShort),
62
+ formatMessage(sharedMessages.augustShort),
63
+ formatMessage(sharedMessages.septemberShort),
64
+ formatMessage(sharedMessages.octoberShort),
65
+ formatMessage(sharedMessages.novemberShort),
66
+ formatMessage(sharedMessages.decemberShort),
67
+ ];
68
+
69
+ return {
70
+ weekdays,
71
+ weekdaysShort,
72
+ weekdaysMin,
73
+ months,
74
+ monthsShort,
75
+ };
76
+ }, [formatMessage]);
77
+ };
78
+
79
+ export default useDaysAndMonthsLocalization;
@@ -0,0 +1,107 @@
1
+ import React from "react";
2
+ import Immutable from "immutable";
3
+ import { extractMessages, TestWrapper } from "../utils/testUtils";
4
+ import sharedMessages from "../sharedMessages";
5
+ import useDaysAndMonthsLocalization from "./useDaysAndMonthsLocalization";
6
+
7
+ const messages = extractMessages(sharedMessages);
8
+
9
+ describe("useDaysAndMonthsLocalization", () => {
10
+ let store, state;
11
+
12
+ beforeEach(() => {
13
+ state = Immutable.fromJS({});
14
+
15
+ store = {
16
+ subscribe: () => {},
17
+ dispatch: () => {},
18
+ getState: () => state,
19
+ };
20
+ });
21
+
22
+ it("returns weekdays and months correctly", () => {
23
+ const TestComp = () => {
24
+ const daysAndMonths = useDaysAndMonthsLocalization();
25
+
26
+ return (
27
+ <div>
28
+ {daysAndMonths.weekdays.map(x => (
29
+ <div key={x}>{x}</div>
30
+ ))}
31
+ {daysAndMonths.weekdaysShort.map(x => (
32
+ <div key={x}>{x}</div>
33
+ ))}
34
+ {daysAndMonths.weekdaysMin.map(x => (
35
+ <div key={x}>{x}</div>
36
+ ))}
37
+ {daysAndMonths.months.map(x => (
38
+ <div key={x}>{x}</div>
39
+ ))}
40
+ {daysAndMonths.monthsShort.map(x => (
41
+ <div key={x}>{x}</div>
42
+ ))}
43
+ </div>
44
+ );
45
+ };
46
+
47
+ const component = (
48
+ <TestWrapper provider={{ store }} intlProvider={{ messages }}>
49
+ <TestComp />
50
+ </TestWrapper>
51
+ );
52
+
53
+ const expected = (
54
+ <TestWrapper provider={{ store }} intlProvider={{ messages }}>
55
+ <div>
56
+ <div>Sunday</div>
57
+ <div>Monday</div>
58
+ <div>Tuesday</div>
59
+ <div>Wednesday</div>
60
+ <div>Thursday</div>
61
+ <div>Friday</div>
62
+ <div>Saturday</div>
63
+ <div>Sun</div>
64
+ <div>Mon</div>
65
+ <div>Tue</div>
66
+ <div>Wed</div>
67
+ <div>Thu</div>
68
+ <div>Fri</div>
69
+ <div>Sat</div>
70
+ <div>Su</div>
71
+ <div>Mo</div>
72
+ <div>Tu</div>
73
+ <div>We</div>
74
+ <div>Th</div>
75
+ <div>Fr</div>
76
+ <div>Sa</div>
77
+ <div>January</div>
78
+ <div>February</div>
79
+ <div>March</div>
80
+ <div>April</div>
81
+ <div>May</div>
82
+ <div>June</div>
83
+ <div>July</div>
84
+ <div>August</div>
85
+ <div>September</div>
86
+ <div>October</div>
87
+ <div>November</div>
88
+ <div>December</div>
89
+ <div>Jan</div>
90
+ <div>Feb</div>
91
+ <div>Mar</div>
92
+ <div>Apr</div>
93
+ <div>May</div>
94
+ <div>Jun</div>
95
+ <div>Jul</div>
96
+ <div>Aug</div>
97
+ <div>Sep</div>
98
+ <div>Oct</div>
99
+ <div>Nov</div>
100
+ <div>Dec</div>
101
+ </div>
102
+ </TestWrapper>
103
+ );
104
+
105
+ expect(component, "when mounted", "to satisfy", expected);
106
+ });
107
+ });
@@ -0,0 +1,78 @@
1
+ import { useCallback, useMemo, useRef } from "react";
2
+ import { unwrapImmutable } from "../utils";
3
+ import useViewState from "./useViewState";
4
+
5
+ const scrollTableRef = tableRef => {
6
+ if (!tableRef?.current) {
7
+ console.error("[useInMemoryPaging]: tableRef was not specified or tableRef.current is null.");
8
+ } else {
9
+ tableRef.current.scrollToTop();
10
+ }
11
+ };
12
+
13
+ const useInMemoryPaging = ({
14
+ viewStateName,
15
+ tableRef,
16
+ records,
17
+ pageSize,
18
+ initialSort = {},
19
+ initialFilters = {},
20
+ sortAndFilterFn,
21
+ }) => {
22
+ const [viewState, updateViewState] = useViewState(viewStateName);
23
+ const internalInitialSort = useRef(initialSort);
24
+ const internalInitialFilters = useRef(initialFilters);
25
+
26
+ const filters = viewState.filters ?? internalInitialFilters.current;
27
+ const sorting = viewState.sorting ?? internalInitialSort.current;
28
+ const currentPage = viewState.currentPage ?? 1;
29
+ const nextPageToLoad = viewState.nextPageToLoad ?? 1;
30
+
31
+ const setFilter = filters => {
32
+ scrollTableRef(tableRef);
33
+ updateViewState("filters", filters);
34
+ updateViewState("currentPage", 1);
35
+ updateViewState("nextPageToLoad", 1);
36
+ };
37
+
38
+ const setSort = sorting => {
39
+ scrollTableRef(tableRef);
40
+ updateViewState("sorting", sorting);
41
+ updateViewState("currentPage", 1);
42
+ updateViewState("nextPageToLoad", 1);
43
+ };
44
+
45
+ const scrollLoader = useCallback(
46
+ page => {
47
+ if (page > nextPageToLoad) {
48
+ updateViewState("currentPage", page);
49
+ updateViewState("nextPageToLoad", page);
50
+ }
51
+ },
52
+ [nextPageToLoad, updateViewState],
53
+ );
54
+
55
+ const [rows, totalCount] = useMemo(() => {
56
+ const list = sortAndFilterFn({
57
+ list: unwrapImmutable(records),
58
+ filters: filters,
59
+ sorting: sorting,
60
+ });
61
+ return [unwrapImmutable(list.slice(0, currentPage * pageSize)), list.length];
62
+ }, [currentPage, pageSize, records, filters, sorting, sortAndFilterFn]);
63
+
64
+ return {
65
+ rows,
66
+ scrollLoader,
67
+ currentPage,
68
+
69
+ filters,
70
+ sorting,
71
+
72
+ setFilter,
73
+ setSort,
74
+ totalCount,
75
+ };
76
+ };
77
+
78
+ export default useInMemoryPaging;