@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,19 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { DataSourceContextValue } from '../types';
4
-
5
- import { getDataSourceContext } from '../DataSourceContext';
6
- import { DataSourceState } from '..';
7
-
8
- export function useDataSource<T>(): DataSourceState<T> {
9
- const DataSourceContext = getDataSourceContext<T>();
10
- const contextValue = React.useContext(DataSourceContext);
11
-
12
- return contextValue.componentState;
13
- }
14
- export function useDataSourceContextValue<T>(): DataSourceContextValue<T> {
15
- const DataSourceContext = getDataSourceContext<T>();
16
- const contextValue = React.useContext(DataSourceContext);
17
-
18
- return contextValue;
19
- }
@@ -1,14 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { DataSourceComponentActions } from '../types';
4
-
5
- import { getDataSourceContext } from '../DataSourceContext';
6
-
7
- export default function useDataSourceActions<
8
- T,
9
- >(): DataSourceComponentActions<T> {
10
- const DataSourceContext = getDataSourceContext<T>();
11
- const contextValue = React.useContext(DataSourceContext);
12
-
13
- return contextValue.componentActions;
14
- }
@@ -1,494 +0,0 @@
1
- import {
2
- DataSourceComponentActions,
3
- DataSourceDataParams,
4
- RowSelectionState,
5
- } from '..';
6
- import { dbg } from '../../../utils/debug';
7
- import { DeepMap } from '../../../utils/DeepMap';
8
- import defaultSortTypes from '../../../utils/multisort/sortTypes';
9
- import { raf } from '../../../utils/raf';
10
- import { shallowEqualObjects } from '../../../utils/shallowEqualObjects';
11
- import { ForwardPropsToStateFnResult } from '../../hooks/useComponentState';
12
- import { ComponentInterceptedActions } from '../../hooks/useComponentState/types';
13
- import { InfiniteTableRowInfo, Scrollbars } from '../../InfiniteTable';
14
- import { rowSelectionStateConfigGetter } from '../../InfiniteTable/api/getSelectionApi';
15
- import { ScrollStopInfo } from '../../InfiniteTable/types/InfiniteTableProps';
16
- import { buildSubscriptionCallback } from '../../utils/buildSubscriptionCallback';
17
- import { discardCallsWithEqualArg } from '../../utils/discardCallsWithEqualArg';
18
- import { isControlledValue } from '../../utils/isControlledValue';
19
- import { RenderRange } from '../../VirtualBrain';
20
- import { defaultFilterTypes } from '../defaultFilterTypes';
21
- import { GroupRowsState } from '../GroupRowsState';
22
- import { Indexer } from '../Indexer';
23
- import { buildDataSourceDataParams } from '../privateHooks/useLoadData';
24
- import { RowSelectionStateObject } from '../RowSelectionState';
25
- import {
26
- DataSourceMappedState,
27
- DataSourceProps,
28
- DataSourceDerivedState,
29
- DataSourceSetupState,
30
- DataSourceState,
31
- LazyGroupDataDeepMap,
32
- LazyRowInfoGroup,
33
- DataSourceFilterOperator,
34
- DataSourcePropOnRowSelectionChange_MultiRow,
35
- DataSourcePropOnRowSelectionChange_SingleRow,
36
- DataSourcePropSelectionMode,
37
- } from '../types';
38
-
39
- import { normalizeSortInfo } from './normalizeSortInfo';
40
-
41
- export const defaultCursorId = Symbol('cursorId');
42
-
43
- export function initSetupState<T>(): DataSourceSetupState<T> {
44
- const now = Date.now();
45
- const originalDataArray: T[] = [];
46
- const dataArray: InfiniteTableRowInfo<T>[] = [];
47
-
48
- const originalLazyGroupData: LazyGroupDataDeepMap<T> = new DeepMap<
49
- string,
50
- LazyRowInfoGroup<T>
51
- >();
52
-
53
- return {
54
- // TODO cleanup indexer on unmount
55
- indexer: new Indexer<T, any>(),
56
- lazyLoadCacheOfLoadedBatches: new DeepMap<string, true>(),
57
- dataParams: undefined,
58
- notifyScrollbarsChange: buildSubscriptionCallback<Scrollbars>(),
59
- notifyScrollStop: buildSubscriptionCallback<ScrollStopInfo>(),
60
- notifyRenderRangeChange: buildSubscriptionCallback<RenderRange>(),
61
- pivotTotalColumnPosition: 'end',
62
- pivotGrandTotalColumnPosition: false,
63
- scrollStopDelayUpdatedByTable: 100,
64
- originalLazyGroupData,
65
- originalLazyGroupDataChangeDetect: 0,
66
- originalDataArray,
67
- cursorId: defaultCursorId,
68
- showSeparatePivotColumnForSingleAggregation: false,
69
-
70
- propsCache: new Map<keyof DataSourceProps<T>, WeakMap<any, any>>([
71
- ['sortInfo', new WeakMap()],
72
- ]),
73
-
74
- pivotMappings: undefined,
75
-
76
- pivotColumns: undefined,
77
- pivotColumnGroups: undefined,
78
- dataArray,
79
- unfilteredCount: dataArray.length,
80
- filteredCount: dataArray.length,
81
-
82
- updatedAt: now,
83
- groupedAt: 0,
84
- sortedAt: 0,
85
- filteredAt: 0,
86
- reducedAt: now,
87
- generateGroupRows: true,
88
- groupDeepMap: undefined,
89
- reducerResults: undefined,
90
- allRowsSelected: false,
91
- someRowsSelected: false,
92
- // selectedRowCount: 0,
93
- postSortDataArray: undefined,
94
- postGroupDataArray: undefined,
95
- lastSortDataArray: undefined,
96
- lastGroupDataArray: undefined,
97
- };
98
- }
99
-
100
- function getCompareObjectForDataParams<T>(
101
- dataParams: DataSourceDataParams<T>,
102
- ): Partial<DataSourceDataParams<T>> {
103
- const obj: Partial<DataSourceDataParams<T>> = {
104
- ...dataParams,
105
- };
106
-
107
- delete obj.originalDataArray;
108
-
109
- return obj;
110
- }
111
- export const forwardProps = <T>(
112
- setupState: DataSourceSetupState<T>,
113
- ): ForwardPropsToStateFnResult<
114
- DataSourceProps<T>,
115
- DataSourceMappedState<T>
116
- > => {
117
- return {
118
- onDataParamsChange: (fn) =>
119
- fn
120
- ? discardCallsWithEqualArg(fn, 100, getCompareObjectForDataParams)
121
- : undefined,
122
- lazyLoad: (lazyLoad) => !!lazyLoad,
123
- data: 1,
124
- pivotBy: 1,
125
- primaryKey: 1,
126
- livePagination: 1,
127
- filterFunction: 1,
128
- filterValue: 1,
129
- useGroupKeysForMultiRowSelection: (useGroupKeysForMultiRowSelection) =>
130
- useGroupKeysForMultiRowSelection ?? false,
131
- filterDelay: (filterDelay) => filterDelay ?? 200,
132
- filterTypes: (filterTypes) => {
133
- return { ...defaultFilterTypes, ...filterTypes };
134
- },
135
-
136
- sortTypes: (sortTypes) => {
137
- return { ...defaultSortTypes, ...sortTypes };
138
- },
139
- sortMode: (sortMode) => sortMode ?? 'local',
140
-
141
- isRowSelected: 1,
142
- aggregationReducers: 1,
143
- collapseGroupRowsOnDataFunctionChange: (
144
- collapseGroupRowsOnDataFunctionChange,
145
- ) => collapseGroupRowsOnDataFunctionChange ?? true,
146
-
147
- loading: (loading) => loading ?? false,
148
- sortInfo: (sortInfo) =>
149
- normalizeSortInfo(sortInfo, setupState.propsCache.get('sortInfo')),
150
- groupBy: (groupBy) => groupBy ?? [],
151
- };
152
- };
153
-
154
- function getLivePaginationCursorValue<T>(
155
- livePaginationCursorProp: DataSourceProps<T>['livePaginationCursor'],
156
- state: DataSourceState<T>,
157
- ) {
158
- const livePaginationCursor =
159
- typeof livePaginationCursorProp === 'function'
160
- ? livePaginationCursorProp({
161
- array: state.originalDataArray,
162
- length: state.originalDataArray.length,
163
- lastItem: state.originalDataArray[state.originalDataArray.length - 1],
164
- })
165
- : livePaginationCursorProp;
166
-
167
- return livePaginationCursor;
168
- }
169
-
170
- export function deriveStateFromProps<T extends any>(params: {
171
- props: DataSourceProps<T>;
172
-
173
- state: DataSourceState<T>;
174
- oldState: DataSourceState<T> | null;
175
- }): DataSourceDerivedState<T> {
176
- const { props, state, oldState } = params;
177
-
178
- const controlledSort = isControlledValue(props.sortInfo);
179
- const controlledFilter = isControlledValue(props.filterValue);
180
-
181
- const { filterTypes } = state;
182
-
183
- const operatorsByFilterType = Object.keys(filterTypes).reduce((acc, key) => {
184
- const operators = filterTypes[key].operators;
185
-
186
- acc[key] = acc[key] || {};
187
- const currentFilterTypeOperators = acc[key];
188
-
189
- operators.forEach((operator) => {
190
- currentFilterTypeOperators[operator.name] = operator;
191
- });
192
-
193
- return acc;
194
- }, {} as Record<string, Record<string, DataSourceFilterOperator<T>>>);
195
-
196
- let selectionMode: DataSourcePropSelectionMode | undefined =
197
- props.selectionMode;
198
-
199
- if (selectionMode === undefined) {
200
- if (
201
- props.cellSelection !== undefined ||
202
- props.defaultCellSelection !== undefined
203
- ) {
204
- // TODO implement single cell selection as well
205
- selectionMode = 'multi-cell';
206
- } else {
207
- const rowSelectionProp =
208
- props.rowSelection !== undefined
209
- ? props.rowSelection
210
- : props.defaultRowSelection;
211
- if (rowSelectionProp !== undefined) {
212
- if (rowSelectionProp && typeof rowSelectionProp === 'object') {
213
- selectionMode = 'multi-row';
214
- } else {
215
- selectionMode = 'single-row';
216
- }
217
- }
218
- selectionMode = selectionMode ?? false;
219
- }
220
- }
221
-
222
- let rowSelectionState: RowSelectionState | null | number | string = null;
223
-
224
- let currentRowSelection =
225
- props.rowSelection !== undefined
226
- ? props.rowSelection
227
- : state.rowSelection === undefined
228
- ? props.defaultRowSelection !== undefined
229
- ? props.defaultRowSelection
230
- : null
231
- : state.rowSelection;
232
-
233
- if (selectionMode !== false) {
234
- if (selectionMode === 'single-row' || selectionMode === 'multi-row') {
235
- if (currentRowSelection === null) {
236
- rowSelectionState =
237
- selectionMode === 'single-row'
238
- ? null
239
- : new RowSelectionState(
240
- {
241
- selectedRows: [],
242
- deselectedRows: [],
243
- defaultSelection: false,
244
- },
245
- rowSelectionStateConfigGetter(state),
246
- );
247
- } else {
248
- rowSelectionState =
249
- selectionMode === 'single-row'
250
- ? (currentRowSelection as string | number)
251
- : currentRowSelection instanceof RowSelectionState
252
- ? currentRowSelection
253
- : new RowSelectionState(
254
- currentRowSelection as RowSelectionStateObject,
255
- rowSelectionStateConfigGetter(state),
256
- );
257
- }
258
- }
259
- }
260
-
261
- const primaryKeyDescriptor = state.primaryKey;
262
- const toPrimaryKey =
263
- typeof primaryKeyDescriptor === 'function'
264
- ? (data: T) => primaryKeyDescriptor(data)
265
- : (data: T) => data[primaryKeyDescriptor];
266
-
267
- let groupRowsState =
268
- props.groupRowsState || state.groupRowsState || props.defaultGroupRowsState;
269
-
270
- if (groupRowsState && !(groupRowsState instanceof GroupRowsState)) {
271
- groupRowsState = new GroupRowsState(groupRowsState);
272
- }
273
-
274
- groupRowsState =
275
- groupRowsState ||
276
- new GroupRowsState(
277
- state.lazyLoad
278
- ? { expandedRows: [], collapsedRows: true }
279
- : {
280
- expandedRows: true,
281
- collapsedRows: [],
282
- },
283
- );
284
-
285
- const result: DataSourceDerivedState<T> = {
286
- selectionMode,
287
- groupRowsState,
288
- // for whatever reason I had to do this cast to appease TS
289
- rowSelection: rowSelectionState as any as null,
290
-
291
- toPrimaryKey,
292
- operatorsByFilterType,
293
- controlledSort,
294
- controlledFilter,
295
-
296
- filterMode:
297
- props.filterMode ?? props.filterFunction != null
298
- ? 'local'
299
- : typeof props.data === 'function'
300
- ? 'remote'
301
- : 'local',
302
-
303
- multiSort: Array.isArray(
304
- controlledSort ? props.sortInfo : props.defaultSortInfo,
305
- ),
306
- lazyLoadBatchSize:
307
- typeof props.lazyLoad === 'object' ? props.lazyLoad.batchSize : undefined,
308
- };
309
-
310
- if (props.livePagination) {
311
- const dataArrayChanged =
312
- !oldState || oldState.originalDataArray !== state.originalDataArray;
313
-
314
- const livePaginationCursor =
315
- typeof props.livePaginationCursor === 'function'
316
- ? dataArrayChanged
317
- ? getLivePaginationCursorValue(props.livePaginationCursor, state)
318
- : state.livePaginationCursor
319
- : props.livePaginationCursor;
320
-
321
- result.livePaginationCursor = livePaginationCursor;
322
- }
323
-
324
- return result;
325
- }
326
-
327
- const debugFullLazyLoad = dbg('DataSource:fullLazyLoad');
328
-
329
- export function onPropChange<T>(
330
- params: { name: keyof T; newValue: any; oldValue: any },
331
- props: DataSourceProps<T>,
332
- actions: DataSourceComponentActions<T>,
333
- ) {
334
- const { name, newValue } = params;
335
-
336
- if (
337
- name === 'data' &&
338
- typeof newValue === 'function' &&
339
- !props.groupRowsState
340
- ) {
341
- if (props.lazyLoad) {
342
- debugFullLazyLoad(`"data" function prop has changed`);
343
- }
344
-
345
- if (props.collapseGroupRowsOnDataFunctionChange !== false) {
346
- actions.groupRowsState = new GroupRowsState({
347
- collapsedRows: true,
348
- expandedRows: [],
349
- });
350
- }
351
- }
352
- }
353
-
354
- const debugDataParams = dbg('DataSource:dataParams');
355
-
356
- export type DataSourceMappedCallbackParams<T> = {
357
- [k in keyof DataSourceState<T>]: (
358
- value: DataSourceState<T>[k],
359
- state: DataSourceState<T>,
360
- ) => {
361
- callbackName?: string;
362
- callbackParams: any[];
363
- };
364
- };
365
-
366
- export function getMappedCallbacks<T>() {
367
- return {
368
- rowSelection: (
369
- rowSelection,
370
- state: DataSourceState<T>,
371
- ): { callbackParams: any[] } => {
372
- if (state.selectionMode === 'single-row') {
373
- return {
374
- callbackParams: [
375
- rowSelection,
376
- 'single-row',
377
- ] as Parameters<DataSourcePropOnRowSelectionChange_SingleRow>,
378
- };
379
- }
380
- return {
381
- callbackParams: [
382
- (rowSelection as RowSelectionState).getState(),
383
- 'multi-row',
384
- ] as Parameters<DataSourcePropOnRowSelectionChange_MultiRow>,
385
- };
386
- },
387
- } as DataSourceMappedCallbackParams<T>;
388
- }
389
-
390
- export function getInterceptActions<T>(): ComponentInterceptedActions<
391
- DataSourceState<T>
392
- > {
393
- return {
394
- sortInfo: (sortInfo, { actions, state }) => {
395
- const dataParams = buildDataSourceDataParams(state, {
396
- sortInfo,
397
- livePaginationCursor: null,
398
- });
399
-
400
- actions.dataParams = dataParams;
401
-
402
- if (state.livePagination) {
403
- // #wait_for_update do it on raf, since it also does actions.dataParams assignment
404
- // so we allow dataParams to be updated (the call 3 lines above) in state
405
-
406
- raf(() => {
407
- actions.livePaginationCursor = null;
408
- });
409
- }
410
- },
411
- groupBy: (groupBy, { actions, state }) => {
412
- const dataParams = buildDataSourceDataParams(state, {
413
- groupBy,
414
- livePaginationCursor: null,
415
- });
416
-
417
- actions.dataParams = dataParams;
418
-
419
- if (state.livePagination) {
420
- // see #wait_for_update above
421
-
422
- raf(() => {
423
- actions.livePaginationCursor = null;
424
- });
425
- }
426
- },
427
- pivotBy: (pivotBy, { actions, state }) => {
428
- const dataParams = buildDataSourceDataParams(state, {
429
- pivotBy,
430
- livePaginationCursor: null,
431
- });
432
-
433
- actions.dataParams = dataParams;
434
-
435
- if (state.livePagination) {
436
- // see #wait_for_update above
437
-
438
- raf(() => {
439
- actions.livePaginationCursor = null;
440
- });
441
- }
442
- },
443
- filterValue: (filterValue, { actions, state }) => {
444
- const dataParams = buildDataSourceDataParams(state, {
445
- filterValue,
446
- livePaginationCursor: null,
447
- });
448
-
449
- actions.dataParams = dataParams;
450
-
451
- if (state.livePagination) {
452
- // see #wait_for_update above
453
-
454
- raf(() => {
455
- actions.livePaginationCursor = null;
456
- });
457
- }
458
- },
459
- cursorId: (cursorId, { actions, state }) => {
460
- const dataParams = buildDataSourceDataParams(state, {
461
- __cursorId: cursorId,
462
- });
463
- actions.dataParams = dataParams;
464
- },
465
- livePaginationCursor: (livePaginationCursor, { actions, state }) => {
466
- const dataParams = buildDataSourceDataParams(state, {
467
- livePaginationCursor,
468
- });
469
-
470
- actions.dataParams = dataParams;
471
- },
472
- dataParams: (dataParams, { state }) => {
473
- if (
474
- shallowEqualObjects(
475
- dataParams!,
476
- state.dataParams!,
477
- new Set<keyof DataSourceDataParams<T>>([
478
- 'changes',
479
- 'originalDataArray',
480
- ]),
481
- )
482
- ) {
483
- return false;
484
- }
485
-
486
- debugDataParams(
487
- 'onDataParamsChange triggered because the following values have changed',
488
- dataParams?.changes,
489
- );
490
-
491
- return true;
492
- },
493
- };
494
- }
@@ -1,35 +0,0 @@
1
- import { DataSourceSingleSortInfo, DataSourceSortInfo } from '../types';
2
-
3
- const EMPTY_ARRAY: DataSourceSingleSortInfo<any>[] = Object.freeze(
4
- [],
5
- ) as any as DataSourceSingleSortInfo<any>[];
6
-
7
- // the idea of using a weakmap was that single objects always get
8
- // mapped into an array, thus become a new reference on every render
9
- // which breaks React.memo and useEffect comparisons.
10
- //
11
- // but now, mostly just having the EMPTY_ARRAY fixes the referencial issue
12
-
13
- export const normalizeSortInfo = <T>(
14
- initialSortInfo?: DataSourceSortInfo<T>,
15
- weakMap?: WeakMap<any, any>,
16
- ): DataSourceSingleSortInfo<T>[] => {
17
- const sortInfo =
18
- initialSortInfo ?? (EMPTY_ARRAY as DataSourceSingleSortInfo<T>[]);
19
-
20
- const result = Array.isArray(sortInfo) ? sortInfo : [sortInfo];
21
-
22
- if (weakMap && weakMap.has(sortInfo)) {
23
- const prevResult = weakMap.get(sortInfo);
24
-
25
- if (prevResult && prevResult.length === result.length) {
26
- return prevResult;
27
- }
28
- }
29
-
30
- if (weakMap && sortInfo) {
31
- weakMap.set(sortInfo, result);
32
- }
33
-
34
- return result;
35
- };