@sankhyalabs/core 5.20.0-dev.7 → 5.20.0-dev.70

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 (182) hide show
  1. package/.docs/classes/Change.md +11 -11
  2. package/.docs/classes/ColumnFilterManager.md +145 -0
  3. package/.docs/classes/DataUnit.md +405 -137
  4. package/.docs/classes/DataUnitInMemoryLoader.md +303 -0
  5. package/.docs/classes/DataUnitLoaderUtils.md +151 -0
  6. package/.docs/classes/DateUtils.md +8 -8
  7. package/.docs/classes/FieldComparator.md +2 -2
  8. package/.docs/classes/IDBRepository.md +22 -0
  9. package/.docs/classes/LockManager.md +249 -0
  10. package/.docs/classes/MaskFormatter.md +66 -14
  11. package/.docs/classes/ObjectUtils.md +141 -0
  12. package/.docs/classes/OverflowWatcher.md +533 -0
  13. package/.docs/classes/SelectionInfo.md +25 -11
  14. package/.docs/classes/ServiceCanceledException.md +193 -0
  15. package/.docs/classes/ServiceUtils.md +67 -0
  16. package/.docs/classes/SilentException.md +193 -0
  17. package/.docs/classes/UserAgentUtils.md +15 -1
  18. package/.docs/enumerations/Action.md +41 -21
  19. package/.docs/enumerations/ChangeOperation.md +4 -4
  20. package/.docs/enumerations/LockManagerOperation.md +33 -0
  21. package/.docs/enumerations/OverflowDirection.md +29 -0
  22. package/.docs/enumerations/RECORD_DATE_FORMAT.md +27 -0
  23. package/.docs/enumerations/SelectionMode.md +2 -2
  24. package/.docs/enumerations/StorageType.md +37 -0
  25. package/.docs/globals.md +24 -0
  26. package/.docs/interfaces/DUActionInterceptor.md +1 -1
  27. package/.docs/interfaces/DataUnitInMemoryLoaderConfig.md +37 -0
  28. package/.docs/interfaces/IRepository.md +18 -0
  29. package/.docs/interfaces/LoadDataRequest.md +1 -1
  30. package/.docs/interfaces/OverFlowWatcherParams.md +67 -0
  31. package/.docs/interfaces/PageRequest.md +3 -3
  32. package/.docs/interfaces/PaginationInfo.md +25 -0
  33. package/.docs/interfaces/PaginationInfoBuilderParams.md +37 -0
  34. package/.docs/interfaces/QuickFilter.md +3 -3
  35. package/.docs/interfaces/Record.md +4 -4
  36. package/.docs/interfaces/SavedRecord.md +5 -5
  37. package/.docs/interfaces/WaitingChange.md +3 -3
  38. package/.docs/namespaces/MaskFormatter/type-aliases/MaskCharacter.md +1 -1
  39. package/.docs/namespaces/MaskFormatter/variables/MaskCharacter.md +1 -1
  40. package/.docs/type-aliases/DataUnitEventOptions.md +17 -0
  41. package/.docs/type-aliases/OnOverflowCallBack.md +25 -0
  42. package/.docs/variables/OVERFLOWED_CLASS_NAME.md +13 -0
  43. package/bun.lockb +0 -0
  44. package/dist/dataunit/DataUnit.d.ts +82 -12
  45. package/dist/dataunit/DataUnit.js +209 -67
  46. package/dist/dataunit/DataUnit.js.map +1 -1
  47. package/dist/dataunit/DataUnitHelper.js +6 -5
  48. package/dist/dataunit/DataUnitHelper.js.map +1 -1
  49. package/dist/dataunit/formatting/PrettyFormatter.js +14 -6
  50. package/dist/dataunit/formatting/PrettyFormatter.js.map +1 -1
  51. package/dist/dataunit/loader/DataUnitInMemoryLoaderConfig.d.ts +9 -0
  52. package/dist/dataunit/loader/DataUnitInMemoryLoaderConfig.js +6 -0
  53. package/dist/dataunit/loader/DataUnitInMemoryLoaderConfig.js.map +1 -0
  54. package/dist/dataunit/loader/dataUnitInMemoryLoader.d.ts +25 -0
  55. package/dist/dataunit/loader/dataUnitInMemoryLoader.js +131 -0
  56. package/dist/dataunit/loader/dataUnitInMemoryLoader.js.map +1 -0
  57. package/dist/dataunit/loader/utils/dataUnitLoaderUtils.d.ts +20 -0
  58. package/dist/dataunit/loader/utils/dataUnitLoaderUtils.js +62 -0
  59. package/dist/dataunit/loader/utils/dataUnitLoaderUtils.js.map +1 -0
  60. package/dist/dataunit/loading/LoadDataRequest.d.ts +1 -1
  61. package/dist/dataunit/loading/PaginationInfo.d.ts +8 -0
  62. package/dist/dataunit/metadata/DataType.js +3 -0
  63. package/dist/dataunit/metadata/DataType.js.map +1 -1
  64. package/dist/dataunit/sorting/FieldComparator.d.ts +2 -2
  65. package/dist/dataunit/sorting/FieldComparator.js +4 -9
  66. package/dist/dataunit/sorting/FieldComparator.js.map +1 -1
  67. package/dist/dataunit/state/action/DataUnitAction.d.ts +2 -0
  68. package/dist/dataunit/state/action/DataUnitAction.js +2 -0
  69. package/dist/dataunit/state/action/DataUnitAction.js.map +1 -1
  70. package/dist/dataunit/state/slice/InvalidFieldsSlice.js +2 -0
  71. package/dist/dataunit/state/slice/InvalidFieldsSlice.js.map +1 -1
  72. package/dist/dataunit/state/slice/LoadingControlSlice.js +16 -0
  73. package/dist/dataunit/state/slice/LoadingControlSlice.js.map +1 -1
  74. package/dist/dataunit/state/slice/RecordsSlice.js +1 -1
  75. package/dist/dataunit/state/slice/RecordsSlice.js.map +1 -1
  76. package/dist/dataunit/state/slice/SelectionSlice.js +4 -4
  77. package/dist/dataunit/state/slice/SelectionSlice.js.map +1 -1
  78. package/dist/exceptions/ServiceCanceledException.d.ts +14 -0
  79. package/dist/exceptions/ServiceCanceledException.js +13 -0
  80. package/dist/exceptions/ServiceCanceledException.js.map +1 -0
  81. package/dist/exceptions/SilentException.d.ts +14 -0
  82. package/dist/exceptions/SilentException.js +13 -0
  83. package/dist/exceptions/SilentException.js.map +1 -0
  84. package/dist/index.d.ts +12 -2
  85. package/dist/index.js +11 -1
  86. package/dist/index.js.map +1 -1
  87. package/dist/repository/IRepository.d.ts +6 -0
  88. package/dist/repository/indexeddb/IDBRepository.d.ts +1 -0
  89. package/dist/repository/indexeddb/IDBRepository.js +3 -0
  90. package/dist/repository/indexeddb/IDBRepository.js.map +1 -1
  91. package/dist/utils/CacheManager/index.d.ts +52 -0
  92. package/dist/utils/CacheManager/index.js +101 -0
  93. package/dist/utils/CacheManager/index.js.map +1 -0
  94. package/dist/utils/CacheManager/interfaces/index.d.ts +5 -0
  95. package/dist/utils/CacheManager/interfaces/index.js +7 -0
  96. package/dist/utils/CacheManager/interfaces/index.js.map +1 -0
  97. package/dist/utils/ColumnFilterManager.d.ts +19 -0
  98. package/dist/utils/ColumnFilterManager.js +73 -0
  99. package/dist/utils/ColumnFilterManager.js.map +1 -0
  100. package/dist/utils/DateUtils.js +3 -0
  101. package/dist/utils/DateUtils.js.map +1 -1
  102. package/dist/utils/ElementUtils.d.ts +2 -0
  103. package/dist/utils/ElementUtils.js +9 -0
  104. package/dist/utils/ElementUtils.js.map +1 -0
  105. package/dist/utils/LockManager.d.ts +58 -0
  106. package/dist/utils/LockManager.js +191 -0
  107. package/dist/utils/LockManager.js.map +1 -0
  108. package/dist/utils/MaskFormatter.d.ts +16 -1
  109. package/dist/utils/MaskFormatter.js +82 -2
  110. package/dist/utils/MaskFormatter.js.map +1 -1
  111. package/dist/utils/ObjectUtils.d.ts +38 -0
  112. package/dist/utils/ObjectUtils.js +51 -0
  113. package/dist/utils/ObjectUtils.js.map +1 -1
  114. package/dist/utils/OnboardingUtils.js +1 -1
  115. package/dist/utils/OnboardingUtils.js.map +1 -1
  116. package/dist/utils/OverflowWatcher/index.d.ts +59 -0
  117. package/dist/utils/OverflowWatcher/index.js +188 -0
  118. package/dist/utils/OverflowWatcher/index.js.map +1 -0
  119. package/dist/utils/OverflowWatcher/types/overflow-callback.d.ts +6 -0
  120. package/dist/utils/OverflowWatcher/types/overflow-callback.js +2 -0
  121. package/dist/utils/OverflowWatcher/types/overflow-callback.js.map +1 -0
  122. package/dist/utils/OverflowWatcher/types/overflow-direction.d.ts +7 -0
  123. package/dist/utils/OverflowWatcher/types/overflow-direction.js +9 -0
  124. package/dist/utils/OverflowWatcher/types/overflow-direction.js.map +1 -0
  125. package/dist/utils/ServiceUtils.d.ts +24 -0
  126. package/dist/utils/ServiceUtils.js +40 -0
  127. package/dist/utils/ServiceUtils.js.map +1 -0
  128. package/dist/utils/SortingUtils.d.ts +9 -0
  129. package/dist/utils/SortingUtils.js +24 -0
  130. package/dist/utils/SortingUtils.js.map +1 -0
  131. package/dist/utils/UserAgentUtils/index.d.ts +1 -0
  132. package/dist/utils/UserAgentUtils/index.js +5 -0
  133. package/dist/utils/UserAgentUtils/index.js.map +1 -1
  134. package/jest.config.ts +2 -0
  135. package/package.json +2 -1
  136. package/reports/test-report.xml +215 -0
  137. package/setupTests.js +7 -0
  138. package/sonar-project.properties +6 -3
  139. package/src/dataunit/DataUnit.ts +250 -82
  140. package/src/dataunit/DataUnitHelper.ts +6 -5
  141. package/src/dataunit/formatting/PrettyFormatter.ts +15 -6
  142. package/src/dataunit/loader/DataUnitInMemoryLoaderConfig.ts +10 -0
  143. package/src/dataunit/loader/dataUnitInMemoryLoader.ts +176 -0
  144. package/src/dataunit/loader/utils/dataUnitLoaderUtils.ts +86 -0
  145. package/src/dataunit/loading/LoadDataRequest.ts +1 -1
  146. package/src/dataunit/loading/PaginationInfo.ts +10 -0
  147. package/src/dataunit/metadata/DataType.ts +3 -0
  148. package/src/dataunit/sorting/FieldComparator.ts +18 -32
  149. package/src/dataunit/state/action/DataUnitAction.ts +2 -0
  150. package/src/dataunit/state/slice/InvalidFieldsSlice.ts +2 -0
  151. package/src/dataunit/state/slice/LoadingControlSlice.ts +42 -0
  152. package/src/dataunit/state/slice/RecordsSlice.ts +1 -1
  153. package/src/dataunit/state/slice/SelectionSlice.ts +4 -4
  154. package/src/dataunit/state/slice/test/RecordsSlice.spec.ts +45 -0
  155. package/src/dataunit/test/DataUnit.spec.ts +44 -0
  156. package/src/exceptions/ServiceCanceledException.ts +25 -0
  157. package/src/exceptions/SilentException.ts +25 -0
  158. package/src/index.ts +29 -1
  159. package/src/repository/IRepository.ts +7 -0
  160. package/src/repository/indexeddb/IDBRepository.ts +4 -0
  161. package/src/utils/CacheManager/index.ts +103 -0
  162. package/src/utils/CacheManager/interfaces/index.ts +5 -0
  163. package/src/utils/ColumnFilterManager.ts +104 -0
  164. package/src/utils/DateUtils.ts +3 -0
  165. package/src/utils/ElementUtils.ts +10 -0
  166. package/src/utils/LockManager.ts +213 -0
  167. package/src/utils/MaskFormatter.ts +93 -2
  168. package/src/utils/ObjectUtils.ts +56 -0
  169. package/src/utils/OnboardingUtils.ts +1 -1
  170. package/src/utils/OverflowWatcher/index.ts +243 -0
  171. package/src/utils/OverflowWatcher/types/overflow-callback.ts +6 -0
  172. package/src/utils/OverflowWatcher/types/overflow-direction.ts +7 -0
  173. package/src/utils/ServiceUtils.ts +36 -0
  174. package/src/utils/SortingUtils.ts +30 -0
  175. package/src/utils/UserAgentUtils/index.ts +6 -1
  176. package/src/utils/test/objectUtils.spec.ts +109 -0
  177. package/test/dataunit/formatting/PrettyFormatter.spec.ts +177 -0
  178. package/test/dataunit/loader/dataUnitInMemoryLoader.spec.ts +221 -0
  179. package/test/dataunit/loader/utils/dataUnitLoaderUtils.spec.ts +158 -0
  180. package/test/util/ColumnFilterManager.spec.ts +133 -0
  181. package/test/util/ElementUtils.spec.ts +34 -0
  182. package/test/util/OverflowWatcher.spec.ts +152 -0
@@ -0,0 +1,34 @@
1
+ import { calcMarginSize } from '../../src/utils/ElementUtils';
2
+ import { OverflowDirection } from '../../src';
3
+
4
+ describe('calcMarginSize', () => {
5
+ it('should calculate correctly the size of horizontal margin', () => {
6
+ const element = document.createElement('div');
7
+ element.style.marginLeft = '10px';
8
+ element.style.marginRight = '15px';
9
+ document.body.appendChild(element);
10
+
11
+ const size = calcMarginSize(element, OverflowDirection.HORIZONTAL);
12
+ expect(size).toBe(25);
13
+ });
14
+
15
+ it('should calculate correctly the size of vertical margin', () => {
16
+ const element = document.createElement('div');
17
+ element.style.marginTop = '5px';
18
+ element.style.marginBottom = '20px';
19
+ document.body.appendChild(element);
20
+
21
+ const size = calcMarginSize(element, OverflowDirection.VERTICAL);
22
+ expect(size).toBe(25);
23
+ });
24
+
25
+ it('should threat values defined as zero', () => {
26
+ const element = document.createElement('div');
27
+ document.body.appendChild(element);
28
+
29
+ const horizontalSize = calcMarginSize(element, OverflowDirection.HORIZONTAL);
30
+ const verticalSize = calcMarginSize(element, OverflowDirection.VERTICAL);
31
+ expect(horizontalSize).toBe(0);
32
+ expect(verticalSize).toBe(0);
33
+ });
34
+ });
@@ -0,0 +1,152 @@
1
+ import OverflowWatcher, { OverFlowWatcherParams, OverflowDirection, OVERFLOWED_CLASS_NAME } from '../../src/utils/OverflowWatcher';
2
+
3
+ describe('OverflowWatcher', () => {
4
+ let mockElement: HTMLElement;
5
+ let mockCallback: jest.Mock;
6
+ let watcherInstance: OverflowWatcher;
7
+
8
+ beforeEach(() => {
9
+ mockElement = document.createElement('div');
10
+ Object.defineProperty(mockElement, 'clientWidth', { value: 90, configurable: true });
11
+ document.body.appendChild(mockElement);
12
+ mockCallback = jest.fn();
13
+
14
+ const params: OverFlowWatcherParams = {
15
+ element: mockElement,
16
+ callback: mockCallback,
17
+ overFlowDirection: OverflowDirection.HORIZONTAL,
18
+ debounce: 1,
19
+ deltaSize: 1,
20
+ notOverFlow: ['testId'],
21
+ };
22
+
23
+ watcherInstance = new OverflowWatcher(params);
24
+ mockElement.getBoundingClientRect = jest.fn().mockReturnValue(getMockedRectClientValue(200));
25
+ setPrivateField(watcherInstance, '_lastContainerSize', 100);
26
+ setPrivateField(watcherInstance, '_lastContainerInstance', mockElement);
27
+ });
28
+
29
+ afterEach(() => {
30
+ watcherInstance.destroy();
31
+ });
32
+
33
+ it('should initialize with provided parameters', () => {
34
+ expect(watcherInstance).toBeDefined();
35
+ });
36
+
37
+ it('should disconect ResizeObserver when destroy is called', () => {
38
+ const disconnectSpy = jest.spyOn(ResizeObserver.prototype, 'disconnect');
39
+ watcherInstance.destroy();
40
+ expect(disconnectSpy).toHaveBeenCalled();
41
+ });
42
+
43
+ it('Should call callback on forceUpdate', () => {
44
+ appendMockedChildren(mockElement);
45
+ watcherInstance.forceUpdate();
46
+ expect(mockCallback).toHaveBeenCalled();
47
+ });
48
+
49
+ it('Should call callback on forceUpdate with childSpan', () => {
50
+ appendMockedChildren(mockElement);
51
+ watcherInstance.forceUpdate();
52
+
53
+ const childSpan = mockElement.children[1];
54
+ expect(mockCallback).toHaveBeenCalledWith(expect.arrayContaining([childSpan]));
55
+ });
56
+
57
+ it('Should call callback on forceUpdate with childSpan when notOverFlow is empty', () => {
58
+ appendMockedChildren(mockElement);
59
+
60
+ const params: OverFlowWatcherParams = {
61
+ element: mockElement,
62
+ callback: mockCallback,
63
+ overFlowDirection: OverflowDirection.HORIZONTAL,
64
+ debounce: 1,
65
+ deltaSize: 1,
66
+ };
67
+
68
+ const withNoOverFlow = new OverflowWatcher(params);
69
+ setPrivateField(withNoOverFlow, '_lastContainerSize', 100);
70
+ setPrivateField(withNoOverFlow, '_lastContainerInstance', mockElement);
71
+
72
+ withNoOverFlow.forceUpdate();
73
+
74
+ const childSpan = mockElement.children[1];
75
+ expect(mockCallback).toHaveBeenCalledWith(expect.arrayContaining([childSpan]));
76
+ });
77
+
78
+ it('Should call callback on forceUpdate with childSpan considering overflowed elements', () => {
79
+ appendMockedChildren(mockElement);
80
+ const childButton = mockElement.children[0];
81
+ const childSpan = mockElement.children[1];
82
+ childSpan.classList.add(OVERFLOWED_CLASS_NAME);
83
+
84
+ const hiddemItemsMock: Map<Element, {size: number, margin: number}> = new Map();
85
+ hiddemItemsMock.set(childSpan, {size: 50, margin: 0});
86
+ hiddemItemsMock.set(childButton, {size: 0, margin: 50});
87
+ setPrivateField(watcherInstance, '_hiddenItemsProps', hiddemItemsMock);
88
+
89
+ watcherInstance.forceUpdate();
90
+
91
+ expect(mockCallback).toHaveBeenCalledWith(expect.arrayContaining([childSpan]));
92
+ });
93
+
94
+ it('Should call callback on forceUpdate with empty list', () => {
95
+ appendMockedChildren(mockElement);
96
+ setPrivateField(watcherInstance, '_lastContainerSize', 200);
97
+ watcherInstance.forceUpdate();
98
+ const childButton = mockElement.children[0];
99
+ const childSpan = mockElement.children[1];
100
+
101
+ expect(mockCallback).not.toHaveBeenCalledWith(expect.arrayContaining([childButton, childSpan]));
102
+ });
103
+
104
+ it('should ignore elements that can not overflow', () => {
105
+ appendMockedChildren(mockElement);
106
+
107
+ const notOverflowElement = document.createElement('div');
108
+ notOverflowElement.setAttribute('data-element-id', 'testId') ;
109
+ notOverflowElement.getBoundingClientRect = jest.fn().mockReturnValue(getMockedRectClientValue(50));
110
+
111
+ const notOverflowElement2 = document.createElement('div');
112
+ notOverflowElement2.setAttribute('data-element-id', 'testId2') ;
113
+ notOverflowElement2.getBoundingClientRect = jest.fn().mockReturnValue(getMockedRectClientValue(50));
114
+
115
+ mockElement.appendChild(notOverflowElement);
116
+ mockElement.appendChild(notOverflowElement2);
117
+
118
+ watcherInstance.addNotOverFlowElement('testId');
119
+ watcherInstance.addNotOverFlowElement('testId2');
120
+
121
+ watcherInstance.forceUpdate();
122
+
123
+ expect(mockCallback).not.toHaveBeenCalledWith(expect.arrayContaining([notOverflowElement]));
124
+ });
125
+
126
+ it('Should not call callback on forceUpdate', () => {
127
+ watcherInstance.forceUpdate();
128
+ expect(mockCallback).not.toHaveBeenCalled();
129
+ });
130
+
131
+ });
132
+
133
+ function appendMockedChildren(mockElement: HTMLElement) {
134
+ const chilldButton = document.createElement('button');
135
+ const childSpan = document.createElement('span');
136
+
137
+ chilldButton.getBoundingClientRect = jest.fn().mockReturnValue(getMockedRectClientValue(50));
138
+ childSpan.getBoundingClientRect = jest.fn().mockReturnValue(getMockedRectClientValue(50));
139
+
140
+ mockElement.appendChild(chilldButton);
141
+ mockElement.appendChild(childSpan);
142
+ }
143
+
144
+ function getMockedRectClientValue(size: number) {
145
+ return {
146
+ x: 0, y: 0, width: size, height: 10, top: 0, right: 0, bottom: 0, left: 0, toJSON: () => {}
147
+ };
148
+ }
149
+
150
+ function setPrivateField<T>(instance: T, fieldName: string, value: any): void {
151
+ (instance as any)[fieldName] = value;
152
+ }