@infinite-table/infinite-react 0.5.1 → 0.5.3

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 (282) hide show
  1. package/README.md +104 -0
  2. package/index.css +896 -0
  3. package/index.d.ts +2264 -0
  4. package/index.esm.css +896 -0
  5. package/index.esm.js +15404 -0
  6. package/index.js +15240 -0
  7. package/package.json +3 -95
  8. package/.vscode/settings.json +0 -3
  9. package/API.md +0 -0
  10. package/build/buildPackageJson.js +0 -43
  11. package/build/scripts/test.js +0 -37
  12. package/bundler.config.js +0 -25
  13. package/globals.d.ts +0 -7
  14. package/rollup.config.js +0 -15
  15. package/run-build-deepmap.js +0 -47
  16. package/run-build.js +0 -45
  17. package/run-dts-concat.js +0 -21
  18. package/src/components/CSSVariableWatch.tsx +0 -82
  19. package/src/components/DataSource/BooleanCollectionState.ts +0 -214
  20. package/src/components/DataSource/BooleanDeepCollectionState.ts +0 -208
  21. package/src/components/DataSource/DataSourceContext.ts +0 -20
  22. package/src/components/DataSource/GroupRowsState.ts +0 -74
  23. package/src/components/DataSource/Indexer.ts +0 -27
  24. package/src/components/DataSource/RowSelectionState.ts +0 -763
  25. package/src/components/DataSource/defaultFilterTypes.ts +0 -64
  26. package/src/components/DataSource/index.tsx +0 -108
  27. package/src/components/DataSource/privateHooks/getChangeDetect.ts +0 -7
  28. package/src/components/DataSource/privateHooks/useLoadData.ts +0 -783
  29. package/src/components/DataSource/publicHooks/useDataSource.ts +0 -19
  30. package/src/components/DataSource/publicHooks/useDataSourceActions.ts +0 -14
  31. package/src/components/DataSource/state/getInitialState.ts +0 -494
  32. package/src/components/DataSource/state/normalizeSortInfo.ts +0 -35
  33. package/src/components/DataSource/state/reducer.ts +0 -466
  34. package/src/components/DataSource/state/rowInfoStatus.ts +0 -27
  35. package/src/components/DataSource/types.ts +0 -548
  36. package/src/components/HeadlessTable/HeadlessTableWithPinnedContainers.tsx +0 -142
  37. package/src/components/HeadlessTable/MappedCells.ts +0 -251
  38. package/src/components/HeadlessTable/RawTable.tsx +0 -98
  39. package/src/components/HeadlessTable/ReactHeadlessTableRenderer.tsx +0 -1516
  40. package/src/components/HeadlessTable/index.tsx +0 -234
  41. package/src/components/InfiniteTable/InfiniteCls.css.ts +0 -164
  42. package/src/components/InfiniteTable/InfiniteTableContext.ts +0 -16
  43. package/src/components/InfiniteTable/api/getImperativeApi.ts +0 -391
  44. package/src/components/InfiniteTable/api/getSelectionApi.ts +0 -364
  45. package/src/components/InfiniteTable/api/type.ts +0 -11
  46. package/src/components/InfiniteTable/components/ActiveCellIndicator.css.ts +0 -51
  47. package/src/components/InfiniteTable/components/ActiveCellIndicator.tsx +0 -116
  48. package/src/components/InfiniteTable/components/ActiveRowIndicator.css.ts +0 -56
  49. package/src/components/InfiniteTable/components/ActiveRowIndicator.tsx +0 -94
  50. package/src/components/InfiniteTable/components/CheckBox.css.ts +0 -13
  51. package/src/components/InfiniteTable/components/CheckBox.tsx +0 -96
  52. package/src/components/InfiniteTable/components/FilterEditors.tsx +0 -52
  53. package/src/components/InfiniteTable/components/InfiniteTableBody/InfiniteTableBody.tsx +0 -27
  54. package/src/components/InfiniteTable/components/InfiniteTableBody/index.tsx +0 -1
  55. package/src/components/InfiniteTable/components/InfiniteTableFooter/InfiniteTableFooter.tsx +0 -31
  56. package/src/components/InfiniteTable/components/InfiniteTableFooter/index.tsx +0 -1
  57. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableColumnHeaderFilter.tsx +0 -102
  58. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeader.tsx +0 -163
  59. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderCell.tsx +0 -574
  60. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderGroup.tsx +0 -79
  61. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderTypes.tsx +0 -25
  62. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderWrapper.tsx +0 -185
  63. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/GroupResizeHandle.tsx +0 -159
  64. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/ResizeHandle.css.ts +0 -124
  65. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/columnResizer.ts +0 -166
  66. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/index.tsx +0 -146
  67. package/src/components/InfiniteTable/components/InfiniteTableHeader/buildColumnAndGroupTree.ts +0 -240
  68. package/src/components/InfiniteTable/components/InfiniteTableHeader/header.css.ts +0 -358
  69. package/src/components/InfiniteTable/components/InfiniteTableHeader/index.tsx +0 -1
  70. package/src/components/InfiniteTable/components/InfiniteTableHeader/useColumnGroupResizeHandle.tsx +0 -114
  71. package/src/components/InfiniteTable/components/InfiniteTableHeader/useColumnResizeHandle.tsx +0 -146
  72. package/src/components/InfiniteTable/components/InfiniteTableLicenseFooter/footer.css.ts +0 -7
  73. package/src/components/InfiniteTable/components/InfiniteTableLicenseFooter/index.tsx +0 -110
  74. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableCell.tsx +0 -120
  75. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableCellTypes.ts +0 -74
  76. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableColumnCell.tsx +0 -457
  77. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRow.tsx +0 -107
  78. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowClassName.ts +0 -6
  79. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowTypes.ts +0 -32
  80. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowUnvirtualized.tsx +0 -75
  81. package/src/components/InfiniteTable/components/InfiniteTableRow/columnRendering.tsx +0 -263
  82. package/src/components/InfiniteTable/components/InfiniteTableRow/index.tsx +0 -1
  83. package/src/components/InfiniteTable/components/InfiniteTableRow/row.css.ts +0 -74
  84. package/src/components/InfiniteTable/components/InfiniteTableRow/useRowDOMProps.ts +0 -199
  85. package/src/components/InfiniteTable/components/LoadMask.css.ts +0 -34
  86. package/src/components/InfiniteTable/components/LoadMask.tsx +0 -27
  87. package/src/components/InfiniteTable/components/ScrollbarPlaceholder.tsx +0 -56
  88. package/src/components/InfiniteTable/components/cell.css.ts +0 -192
  89. package/src/components/InfiniteTable/components/icons/ArrowDown.tsx +0 -14
  90. package/src/components/InfiniteTable/components/icons/ArrowUp.tsx +0 -14
  91. package/src/components/InfiniteTable/components/icons/ExpanderIcon.css.ts +0 -31
  92. package/src/components/InfiniteTable/components/icons/ExpanderIcon.tsx +0 -63
  93. package/src/components/InfiniteTable/components/icons/Icon.tsx +0 -18
  94. package/src/components/InfiniteTable/components/icons/InfiniteTableIconClassName.ts +0 -1
  95. package/src/components/InfiniteTable/components/icons/LoadingIcon.css.ts +0 -8
  96. package/src/components/InfiniteTable/components/icons/LoadingIcon.tsx +0 -45
  97. package/src/components/InfiniteTable/components/icons/MenuIcon.tsx +0 -50
  98. package/src/components/InfiniteTable/components/icons/SortIcon.tsx +0 -113
  99. package/src/components/InfiniteTable/eventHandlers/eventHandlerTypes.ts +0 -57
  100. package/src/components/InfiniteTable/eventHandlers/index.ts +0 -95
  101. package/src/components/InfiniteTable/eventHandlers/keyboardNavigation.ts +0 -232
  102. package/src/components/InfiniteTable/eventHandlers/keyboardSelection.ts +0 -110
  103. package/src/components/InfiniteTable/eventHandlers/onCellClick.ts +0 -94
  104. package/src/components/InfiniteTable/eventHandlers/onKeyDown.ts +0 -25
  105. package/src/components/InfiniteTable/hooks/adjustColumnOrderForAllColumns.ts +0 -70
  106. package/src/components/InfiniteTable/hooks/reorderColumnsOnDrag.ts +0 -476
  107. package/src/components/InfiniteTable/hooks/useAutoSizeColumns.ts +0 -206
  108. package/src/components/InfiniteTable/hooks/useCellClassName.ts +0 -80
  109. package/src/components/InfiniteTable/hooks/useCellRendering.tsx +0 -217
  110. package/src/components/InfiniteTable/hooks/useColumnGroups.ts +0 -71
  111. package/src/components/InfiniteTable/hooks/useColumnMenu.ts +0 -72
  112. package/src/components/InfiniteTable/hooks/useColumnPointerEvents.ts +0 -258
  113. package/src/components/InfiniteTable/hooks/useColumnRowspan.ts +0 -43
  114. package/src/components/InfiniteTable/hooks/useColumnSizeFn.ts +0 -24
  115. package/src/components/InfiniteTable/hooks/useColumnsWhen.ts +0 -582
  116. package/src/components/InfiniteTable/hooks/useComputed.ts +0 -186
  117. package/src/components/InfiniteTable/hooks/useComputedVisibleColumns.ts +0 -219
  118. package/src/components/InfiniteTable/hooks/useDOMProps.ts +0 -306
  119. package/src/components/InfiniteTable/hooks/useEffectWithRaf.ts +0 -47
  120. package/src/components/InfiniteTable/hooks/useInfiniteTable.ts +0 -10
  121. package/src/components/InfiniteTable/hooks/useInfiniteTableState.ts +0 -11
  122. package/src/components/InfiniteTable/hooks/useInternalProps.ts +0 -8
  123. package/src/components/InfiniteTable/hooks/useLicense/LicenseDetails.ts +0 -13
  124. package/src/components/InfiniteTable/hooks/useLicense/crc32.ts +0 -56
  125. package/src/components/InfiniteTable/hooks/useLicense/decode.ts +0 -147
  126. package/src/components/InfiniteTable/hooks/useLicense/useLicense.ts +0 -39
  127. package/src/components/InfiniteTable/hooks/useRerenderOnKeyChange.ts +0 -21
  128. package/src/components/InfiniteTable/hooks/useRowHover.ts +0 -18
  129. package/src/components/InfiniteTable/hooks/useScrollToActiveCell.ts +0 -48
  130. package/src/components/InfiniteTable/hooks/useScrollToActiveRow.ts +0 -44
  131. package/src/components/InfiniteTable/hooks/useScrollbars.ts +0 -51
  132. package/src/components/InfiniteTable/hooks/useToggleGroupRow.ts +0 -56
  133. package/src/components/InfiniteTable/hooks/useUnpinnedRendering.tsx +0 -165
  134. package/src/components/InfiniteTable/hooks/useYourBrain.ts +0 -55
  135. package/src/components/InfiniteTable/index.tsx +0 -352
  136. package/src/components/InfiniteTable/internalProps.ts +0 -4
  137. package/src/components/InfiniteTable/state/computeColumnGroupsDepths.ts +0 -29
  138. package/src/components/InfiniteTable/state/getColumnVisibilityForHideEmptyGroupColumns.ts +0 -127
  139. package/src/components/InfiniteTable/state/getInitialState.ts +0 -375
  140. package/src/components/InfiniteTable/theme.css.ts +0 -556
  141. package/src/components/InfiniteTable/types/InfiniteTableAction.ts +0 -6
  142. package/src/components/InfiniteTable/types/InfiniteTableActionType.ts +0 -12
  143. package/src/components/InfiniteTable/types/InfiniteTableColumn.ts +0 -478
  144. package/src/components/InfiniteTable/types/InfiniteTableComputedValues.ts +0 -43
  145. package/src/components/InfiniteTable/types/InfiniteTableContextValue.ts +0 -12
  146. package/src/components/InfiniteTable/types/InfiniteTableInternalProps.ts +0 -3
  147. package/src/components/InfiniteTable/types/InfiniteTableProps.ts +0 -511
  148. package/src/components/InfiniteTable/types/InfiniteTableState.ts +0 -195
  149. package/src/components/InfiniteTable/types/Utility.ts +0 -35
  150. package/src/components/InfiniteTable/types/index.ts +0 -96
  151. package/src/components/InfiniteTable/utilities.css.ts +0 -179
  152. package/src/components/InfiniteTable/utils/MultiRowSelector.ts +0 -111
  153. package/src/components/InfiniteTable/utils/RenderHookComponentForInfinite.tsx +0 -52
  154. package/src/components/InfiniteTable/utils/adjustColumnOrderForPinning.ts +0 -33
  155. package/src/components/InfiniteTable/utils/assignFiltered.ts +0 -29
  156. package/src/components/InfiniteTable/utils/defaultGetColumContextMenuItems.tsx +0 -108
  157. package/src/components/InfiniteTable/utils/getColumnComputedType.ts +0 -33
  158. package/src/components/InfiniteTable/utils/getColumnForGroupBy.tsx +0 -313
  159. package/src/components/InfiniteTable/utils/getComputedVisibleColumns.ts +0 -773
  160. package/src/components/InfiniteTable/utils/getContextMenuForColumn.tsx +0 -72
  161. package/src/components/InfiniteTable/utils/infiniteDOMUtils.ts +0 -189
  162. package/src/components/InfiniteTable/utils/mapToObject.ts +0 -20
  163. package/src/components/InfiniteTable/utils/moveXatY.ts +0 -25
  164. package/src/components/InfiniteTable/utils/objectValuesExcept.ts +0 -9
  165. package/src/components/InfiniteTable/utils/progressiveSpeedScroller.ts +0 -158
  166. package/src/components/InfiniteTable/utils/rafFn.ts +0 -13
  167. package/src/components/InfiniteTable/utils/toCSSVarName.ts +0 -1
  168. package/src/components/InfiniteTable/utils/toMap.ts +0 -24
  169. package/src/components/Menu/Menu.tsx +0 -750
  170. package/src/components/Menu/MenuCls.css.ts +0 -139
  171. package/src/components/Menu/MenuContext.ts +0 -10
  172. package/src/components/Menu/MenuContextValue.ts +0 -15
  173. package/src/components/Menu/MenuProps.ts +0 -98
  174. package/src/components/Menu/MenuState.ts +0 -56
  175. package/src/components/Menu/MenuTriangleContext.ts +0 -352
  176. package/src/components/Menu/childrenToRuntimeItems.tsx +0 -103
  177. package/src/components/Menu/getMenuState.tsx +0 -119
  178. package/src/components/Menu/index.tsx +0 -88
  179. package/src/components/Menu/propToIdentifyMenu.ts +0 -1
  180. package/src/components/RawList/AvoidReactDiff.tsx +0 -48
  181. package/src/components/RawList/MappedItems.ts +0 -143
  182. package/src/components/RawList/ReactVirtualRenderer.tsx +0 -307
  183. package/src/components/RawList/index.tsx +0 -42
  184. package/src/components/RawList/types.ts +0 -23
  185. package/src/components/RawList/useVirtualRenderer.ts +0 -36
  186. package/src/components/RenderHookComponent.tsx +0 -10
  187. package/src/components/ResizeObserver/index.tsx +0 -170
  188. package/src/components/VirtualBrain/MatrixBrain.ts +0 -1621
  189. package/src/components/VirtualBrain/ScrollListener.ts +0 -39
  190. package/src/components/VirtualBrain/index.ts +0 -664
  191. package/src/components/VirtualList/ColumnListWithExternalScrolling.tsx +0 -78
  192. package/src/components/VirtualList/InfiniteListRootClassName.ts +0 -1
  193. package/src/components/VirtualList/RowListWithExternalScrolling.tsx +0 -120
  194. package/src/components/VirtualList/SpacePlaceholder.tsx +0 -32
  195. package/src/components/VirtualList/VirtualList.css.ts +0 -29
  196. package/src/components/VirtualList/VirtualList.tsx +0 -141
  197. package/src/components/VirtualList/VirtualRowList.tsx +0 -34
  198. package/src/components/VirtualList/types.ts +0 -56
  199. package/src/components/VirtualList/useCorrectHeightForRowElements.ts +0 -14
  200. package/src/components/VirtualScrollContainer/VirtualScrollContainer.css.ts +0 -51
  201. package/src/components/VirtualScrollContainer/getScrollableClassName.ts +0 -30
  202. package/src/components/VirtualScrollContainer/index.tsx +0 -63
  203. package/src/components/flexbox/index.ts +0 -562
  204. package/src/components/hooks/useComponentState/index.tsx +0 -562
  205. package/src/components/hooks/useComponentState/types.ts +0 -32
  206. package/src/components/hooks/useEffectOnceWithProperUnmount.ts +0 -33
  207. package/src/components/hooks/useEffectWithChanges.ts +0 -56
  208. package/src/components/hooks/useImmutableRef.ts +0 -7
  209. package/src/components/hooks/useInterceptedMap.ts +0 -71
  210. package/src/components/hooks/useLatest.tsx +0 -8
  211. package/src/components/hooks/useLazyLatest.ts +0 -23
  212. package/src/components/hooks/useMemoShallowObjectMerge.ts +0 -16
  213. package/src/components/hooks/useMounted.ts +0 -18
  214. package/src/components/hooks/useOnMount.ts +0 -21
  215. package/src/components/hooks/useOnScroll.ts +0 -34
  216. package/src/components/hooks/useOnce.ts +0 -10
  217. package/src/components/hooks/useOverlay/index.tsx +0 -418
  218. package/src/components/hooks/usePrevious.ts +0 -8
  219. package/src/components/hooks/usePropertyOld.ts +0 -168
  220. package/src/components/hooks/useRerender.ts +0 -12
  221. package/src/components/hooks/xuseProperty.ts +0 -165
  222. package/src/components/types/CellPosition.ts +0 -4
  223. package/src/components/types/NonUndefined.ts +0 -1
  224. package/src/components/types/RemoveObject.ts +0 -22
  225. package/src/components/types/Renderable.ts +0 -3
  226. package/src/components/types/ScrollPosition.ts +0 -7
  227. package/src/components/types/Setter.ts +0 -2
  228. package/src/components/types/Size.ts +0 -6
  229. package/src/components/types/SubscriptionCallback.ts +0 -10
  230. package/src/components/types/VoidFn.ts +0 -1
  231. package/src/components/utils/buildSubscriptionCallback.tsx +0 -60
  232. package/src/components/utils/clamp.ts +0 -3
  233. package/src/components/utils/debounce.ts +0 -16
  234. package/src/components/utils/decamelize.ts +0 -11
  235. package/src/components/utils/discardCallsWithEqualArg.ts +0 -42
  236. package/src/components/utils/getRenderIndexes.ts +0 -33
  237. package/src/components/utils/getScrollbarWidth.ts +0 -31
  238. package/src/components/utils/getVirtualRenderCount.ts +0 -21
  239. package/src/components/utils/isControlled.ts +0 -12
  240. package/src/components/utils/isControlledValue.ts +0 -5
  241. package/src/index.tsx +0 -34
  242. package/src/test.tsx +0 -18
  243. package/src/utils/DeepMap/index.ts +0 -588
  244. package/src/utils/DeepMap/once.ts +0 -16
  245. package/src/utils/DeepMap/sortAscending.ts +0 -1
  246. package/src/utils/DeepMap/tsconfig.deepmap.json +0 -17
  247. package/src/utils/DeepMap/xpackage.json +0 -26
  248. package/src/utils/debug.ts +0 -40
  249. package/src/utils/deepClone.ts +0 -38
  250. package/src/utils/getGlobal.ts +0 -3
  251. package/src/utils/groupAndPivot/defaultToKey.ts +0 -3
  252. package/src/utils/groupAndPivot/getGroupKeysForDataItem.ts +0 -19
  253. package/src/utils/groupAndPivot/getPivotColumnsAndColumnGroups.ts +0 -361
  254. package/src/utils/groupAndPivot/index.ts +0 -1229
  255. package/src/utils/groupAndPivot/types.ts +0 -10
  256. package/src/utils/join.ts +0 -4
  257. package/src/utils/mathIntersection.ts +0 -21
  258. package/src/utils/minified.d.ts +0 -2
  259. package/src/utils/minified.js +0 -6
  260. package/src/utils/multisort/index.ts +0 -151
  261. package/src/utils/multisort/sortTypes.ts +0 -25
  262. package/src/utils/notes-status.md +0 -92
  263. package/src/utils/pageGeometry/ConvexPoly.ts +0 -34
  264. package/src/utils/pageGeometry/Point.ts +0 -51
  265. package/src/utils/pageGeometry/PolyWithPoints.ts +0 -52
  266. package/src/utils/pageGeometry/Rectangle.ts +0 -98
  267. package/src/utils/pageGeometry/Triangle.ts +0 -16
  268. package/src/utils/pageGeometry/alignment/index.ts +0 -221
  269. package/src/utils/pageGeometry/polyContainsPoint.ts +0 -182
  270. package/src/utils/pageGeometry/types.ts +0 -3
  271. package/src/utils/proxyFnCall.ts +0 -46
  272. package/src/utils/raf.ts +0 -13
  273. package/src/utils/selectParent.ts +0 -18
  274. package/src/utils/shallowEqualObjects.ts +0 -49
  275. package/src/utils/stripVar.ts +0 -3
  276. package/src/utils/toUpperFirst.ts +0 -5
  277. package/todo.md +0 -2
  278. package/tsconfig.build.json +0 -8
  279. package/tsconfig.dev.json +0 -7
  280. package/tsconfig.json +0 -30
  281. package/tsconfig.typebundler.json +0 -13
  282. package/typedoc.json +0 -4
@@ -1,251 +0,0 @@
1
- import { Logger } from '../../utils/debug';
2
- import { DeepMap } from '../../utils/DeepMap';
3
- import { Renderable } from '../types/Renderable';
4
- import { TableRenderRange } from '../VirtualBrain/MatrixBrain';
5
-
6
- /**
7
- * This class abstracts the following behavior:
8
- *
9
- * in the DOM, we have a list (flat, so no nesting) of elements that represent table cells
10
- * At any one time, just a fraction of all table cells are rendered/present in the DOM
11
- * and we need to keep track and know for each element what cell represents and for each
12
- * rendered cell, to what element it is currently mapped (so we need a bi-directional mapping)
13
- *
14
- * This class has tests - see tests/mapped-cells.spec.ts
15
- */
16
-
17
- export class MappedCells extends Logger {
18
- /**
19
- * This is the mapping from element index to cell info.
20
- * The index in the array is the element index while the value at the position is an array where
21
- * the first number is the row index and the second number is the column index.
22
- */
23
- private elementIndexToCell!: ([number, number] | null)[];
24
-
25
- /**
26
- * This is the mapping from cell address to element index.
27
- * The key in the map is the cell address (built like this: `${rowIndex}:${columnIndex}`)
28
- * while the value is the element index it is being rendered to.
29
- */
30
- private cellToElementIndex!: DeepMap<number, number>;
31
-
32
- /**
33
- * Keeps the JSX of rendered elements in memory, so we can possibly reuse it later.
34
- */
35
- private renderedElements!: Renderable[];
36
-
37
- constructor() {
38
- super(`MappedCells`);
39
- this.init();
40
-
41
- // if (__DEV__) {
42
- // (globalThis as any).mappedCells = this;
43
- // (globalThis as any).DeepMap = DeepMap;
44
- // }
45
- }
46
-
47
- getElementFromListForColumn = (
48
- elementsOutsideItemRange: number[],
49
- colIndex: number,
50
- ): number | undefined => {
51
- const { elementIndexToCell } = this;
52
- const last = elementsOutsideItemRange.length - 1;
53
- for (let i = last; i >= 0; i--) {
54
- const elementIndex = elementsOutsideItemRange[i];
55
-
56
- const cell = elementIndexToCell[elementIndex];
57
- if (cell && cell[1] === colIndex) {
58
- if (i === last) {
59
- return elementsOutsideItemRange.pop();
60
- }
61
- elementsOutsideItemRange.splice(i, 1);
62
- // console.log('found ', elementIndex, 'at index', i, 'for col', colIndex);
63
- return elementIndex;
64
- }
65
- }
66
- return elementsOutsideItemRange.pop();
67
- };
68
-
69
- init() {
70
- this.elementIndexToCell = [];
71
- this.cellToElementIndex = new DeepMap();
72
- this.renderedElements = [];
73
- }
74
-
75
- reset() {
76
- this.init();
77
- }
78
-
79
- destroy() {
80
- this.elementIndexToCell = [];
81
- this.cellToElementIndex.clear();
82
- this.renderedElements = [];
83
- }
84
-
85
- /**
86
- * Retrieves the elements that contain rendered cells that are outside
87
- * of the specified range
88
- *
89
- * @param start in [rowIndex, colIndex] format - represents the topmost-leftmost cell visible of the render range
90
- * @param end in [rowIndex, colIndex] format - represents the bottom-right corner of the visible range. The end is not inclusive,
91
- * so the last visible cell will be [rowIndex-1, colIndex-1]
92
- *
93
- * @returns an array of element indexes that are outside the specified range
94
- */
95
- getElementsOutsideRenderRange = (range: TableRenderRange) => {
96
- const { start, end } = range;
97
- const [startRow, startCol] = start;
98
- const [endRow, endCol] = end;
99
-
100
- const result: number[] = [];
101
-
102
- for (
103
- let elementIndex = 0, len = this.elementIndexToCell.length;
104
- elementIndex < len;
105
- elementIndex++
106
- ) {
107
- const entry = this.elementIndexToCell[elementIndex];
108
- if (!entry) {
109
- continue;
110
- }
111
- const [rowIndex, colIndex] = entry;
112
- const rowBefore = rowIndex < startRow;
113
- const rowAfter = rowIndex >= endRow;
114
-
115
- const colBefore = colIndex < startCol;
116
- const colAfter = colIndex >= endCol;
117
-
118
- const outsideRenderRange = rowBefore || rowAfter || colBefore || colAfter;
119
-
120
- if (outsideRenderRange) {
121
- result.push(elementIndex);
122
- }
123
- }
124
-
125
- return result;
126
- };
127
-
128
- isCellRendered = (rowIndex: number, columnIndex: number): boolean => {
129
- return this.cellToElementIndex.has([rowIndex, columnIndex]);
130
- };
131
-
132
- isElementRendered = (elementIndex: number): boolean => {
133
- return !!this.elementIndexToCell[elementIndex];
134
- };
135
-
136
- getElementsForRowIndex = (rowIndex: number): number[] => {
137
- return this.cellToElementIndex.getValuesStartingWith([rowIndex]);
138
- };
139
-
140
- getRenderedNodeAtElement = (elementIndex: number): Renderable | null => {
141
- return this.renderedElements[elementIndex] || null;
142
- };
143
-
144
- getRenderedCellAtElement = (
145
- elementIndex: number,
146
- ): [number, number] | null => {
147
- const cell = this.elementIndexToCell[elementIndex];
148
- return cell || null;
149
- };
150
-
151
- getRenderedNodeForCell = (
152
- rowIndex: number,
153
- columnIndex: number,
154
- ): Renderable | null => {
155
- const elementIndex = this.cellToElementIndex.get([rowIndex, columnIndex]);
156
-
157
- return elementIndex != null
158
- ? this.renderedElements[elementIndex] || null
159
- : null;
160
- };
161
-
162
- getElementIndexForCell = (
163
- rowIndex: number,
164
- columnIndex: number,
165
- ): number | null => {
166
- const elementIndex = this.cellToElementIndex.get([rowIndex, columnIndex]);
167
-
168
- return elementIndex ?? null;
169
- };
170
-
171
- renderCellAtElement = (
172
- rowIndex: number,
173
- colIndex: number,
174
- elementIndex: number,
175
- renderNode?: Renderable,
176
- ) => {
177
- if (__DEV__) {
178
- this.debug(
179
- `Render cell ${rowIndex},${colIndex} at element ${elementIndex}`,
180
- );
181
- }
182
-
183
- const key = [rowIndex, colIndex];
184
-
185
- const currentCell = this.elementIndexToCell[elementIndex];
186
- if (currentCell) {
187
- this.cellToElementIndex.delete([currentCell[0], currentCell[1]]);
188
- }
189
- if (renderNode) {
190
- this.renderedElements[elementIndex] = renderNode;
191
- }
192
-
193
- this.elementIndexToCell[elementIndex] = [rowIndex, colIndex];
194
- this.cellToElementIndex.set(key, elementIndex);
195
- };
196
-
197
- discardCell = (rowIndex: number, colIndex: number) => {
198
- const key = [rowIndex, colIndex];
199
- const elementIndex = this.cellToElementIndex.get(key);
200
-
201
- if (elementIndex != null) {
202
- this.renderedElements[elementIndex] = null;
203
- this.elementIndexToCell[elementIndex] = null;
204
- this.cellToElementIndex.delete(key);
205
- }
206
- };
207
-
208
- discardElement = (elementIndex: number): [number, number] | null => {
209
- const cell = this.elementIndexToCell[elementIndex];
210
- if (cell) {
211
- const key = [cell[0], cell[1]];
212
-
213
- this.renderedElements[elementIndex] = null;
214
- this.elementIndexToCell[elementIndex] = null;
215
- this.cellToElementIndex.delete(key);
216
-
217
- return cell;
218
- }
219
- return null;
220
- };
221
-
222
- discardElementsStartingWith = (
223
- elIndex: number,
224
- callback?: (index: number, cell: [number, number] | null) => void,
225
- ) => {
226
- let discardedCell: [number, number] | null = null;
227
- let oneDiscarded: boolean = false;
228
-
229
- if (elIndex < this.elementIndexToCell.length) {
230
- for (
231
- let elementIndex = elIndex, len = this.elementIndexToCell.length;
232
- elementIndex < len;
233
- elementIndex++
234
- ) {
235
- discardedCell = this.discardElement(elementIndex);
236
- if (discardedCell) {
237
- oneDiscarded = true;
238
- }
239
- if (callback) {
240
- callback(elementIndex, discardedCell);
241
- }
242
- }
243
-
244
- this.elementIndexToCell.length = elIndex;
245
-
246
- this.renderedElements.length = elIndex;
247
- }
248
-
249
- return oneDiscarded;
250
- };
251
- }
@@ -1,98 +0,0 @@
1
- import * as React from 'react';
2
- import { useEffect, useLayoutEffect, useMemo } from 'react';
3
-
4
- import { AvoidReactDiff } from '../RawList/AvoidReactDiff';
5
- import { Renderable } from '../types/Renderable';
6
- import { SubscriptionCallback } from '../types/SubscriptionCallback';
7
- import { buildSubscriptionCallback } from '../utils/buildSubscriptionCallback';
8
- import { MatrixBrain } from '../VirtualBrain/MatrixBrain';
9
-
10
- import {
11
- ReactHeadlessTableRenderer,
12
- TableRenderCellFn,
13
- } from './ReactHeadlessTableRenderer';
14
-
15
- export type RawTableProps = {
16
- name?: string;
17
- brain: MatrixBrain;
18
- renderCell: TableRenderCellFn;
19
- cellHoverClassNames?: string[];
20
- renderer?: ReactHeadlessTableRenderer;
21
- onRenderUpdater?: SubscriptionCallback<Renderable>;
22
- };
23
-
24
- function createRenderer(brain: MatrixBrain) {
25
- const renderer = new ReactHeadlessTableRenderer(brain);
26
- const onRenderUpdater = buildSubscriptionCallback<Renderable>();
27
-
28
- brain.onDestroy(() => {
29
- renderer.destroy();
30
- onRenderUpdater.destroy();
31
- });
32
-
33
- return {
34
- renderer,
35
- onRenderUpdater,
36
- };
37
- }
38
- export function RawTableFn(props: RawTableProps) {
39
- const { brain, renderCell } = props;
40
-
41
- const { renderer, onRenderUpdater } = useMemo(() => {
42
- return props.onRenderUpdater && props.renderer
43
- ? {
44
- renderer: props.renderer,
45
- onRenderUpdater: props.onRenderUpdater,
46
- }
47
- : createRenderer(brain);
48
- }, [brain, props.onRenderUpdater, props.renderer]);
49
-
50
- useEffect(() => {
51
- renderer.cellHoverClassNames = props.cellHoverClassNames || [];
52
- }, [renderer, props.cellHoverClassNames]);
53
-
54
- // we need to useLayoutEffect here instead of useEffect!
55
- // as otherwise sometimes column headers might not be rendered correctly
56
- //
57
- // For example, for http://localhost:3000/tests/table/props/column/column-change
58
- // sometimes firstName and salary are not displayed!!!! in the column header if `useEffect` is used
59
-
60
- useLayoutEffect(() => {
61
- const renderRange = brain.getRenderRange();
62
-
63
- renderer.renderRange(renderRange, {
64
- onRender: onRenderUpdater,
65
- force: true,
66
- renderCell,
67
- });
68
- }, [renderer, brain, renderCell, onRenderUpdater]);
69
-
70
- useEffect(() => {
71
- const remove = brain.onRenderRangeChange((renderRange) => {
72
- renderer.renderRange(renderRange, {
73
- force: false, // TODO should be false
74
- onRender: (items) => {
75
- const currentItems = onRenderUpdater.get();
76
- if (
77
- currentItems &&
78
- items &&
79
- (currentItems as any).length === items.length
80
- ) {
81
- // dont update, as each item in turn
82
- // is an AvoidReactDiff component
83
- // which is updating itself
84
- return;
85
- }
86
- onRenderUpdater(items);
87
- },
88
- renderCell,
89
- });
90
- });
91
-
92
- return remove;
93
- }, [renderCell]);
94
-
95
- return <AvoidReactDiff updater={onRenderUpdater} />;
96
- }
97
-
98
- export const RawTable: React.FC<RawTableProps> = React.memo(RawTableFn);