@infinite-table/infinite-react 0.4.13 → 0.5.1

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/.vscode/settings.json +3 -0
  2. package/API.md +0 -0
  3. package/build/buildPackageJson.js +43 -0
  4. package/build/scripts/test.js +37 -0
  5. package/bundler.config.js +25 -0
  6. package/globals.d.ts +7 -0
  7. package/package.json +102 -3
  8. package/rollup.config.js +15 -0
  9. package/run-build-deepmap.js +47 -0
  10. package/run-build.js +45 -0
  11. package/run-dts-concat.js +21 -0
  12. package/src/components/CSSVariableWatch.tsx +82 -0
  13. package/src/components/DataSource/BooleanCollectionState.ts +214 -0
  14. package/src/components/DataSource/BooleanDeepCollectionState.ts +208 -0
  15. package/src/components/DataSource/DataSourceContext.ts +20 -0
  16. package/src/components/DataSource/GroupRowsState.ts +74 -0
  17. package/src/components/DataSource/Indexer.ts +27 -0
  18. package/src/components/DataSource/RowSelectionState.ts +763 -0
  19. package/src/components/DataSource/defaultFilterTypes.ts +64 -0
  20. package/src/components/DataSource/index.tsx +108 -0
  21. package/src/components/DataSource/privateHooks/getChangeDetect.ts +7 -0
  22. package/src/components/DataSource/privateHooks/useLoadData.ts +783 -0
  23. package/src/components/DataSource/publicHooks/useDataSource.ts +19 -0
  24. package/src/components/DataSource/publicHooks/useDataSourceActions.ts +14 -0
  25. package/src/components/DataSource/state/getInitialState.ts +494 -0
  26. package/src/components/DataSource/state/normalizeSortInfo.ts +35 -0
  27. package/src/components/DataSource/state/reducer.ts +466 -0
  28. package/src/components/DataSource/state/rowInfoStatus.ts +27 -0
  29. package/src/components/DataSource/types.ts +548 -0
  30. package/src/components/HeadlessTable/HeadlessTableWithPinnedContainers.tsx +142 -0
  31. package/src/components/HeadlessTable/MappedCells.ts +251 -0
  32. package/src/components/HeadlessTable/RawTable.tsx +98 -0
  33. package/src/components/HeadlessTable/ReactHeadlessTableRenderer.tsx +1516 -0
  34. package/src/components/HeadlessTable/index.tsx +234 -0
  35. package/src/components/InfiniteTable/InfiniteCls.css.ts +164 -0
  36. package/src/components/InfiniteTable/InfiniteTableContext.ts +16 -0
  37. package/src/components/InfiniteTable/api/getImperativeApi.ts +391 -0
  38. package/src/components/InfiniteTable/api/getSelectionApi.ts +364 -0
  39. package/src/components/InfiniteTable/api/type.ts +11 -0
  40. package/src/components/InfiniteTable/components/ActiveCellIndicator.css.ts +51 -0
  41. package/src/components/InfiniteTable/components/ActiveCellIndicator.tsx +116 -0
  42. package/src/components/InfiniteTable/components/ActiveRowIndicator.css.ts +56 -0
  43. package/src/components/InfiniteTable/components/ActiveRowIndicator.tsx +94 -0
  44. package/src/components/InfiniteTable/components/CheckBox.css.ts +13 -0
  45. package/src/components/InfiniteTable/components/CheckBox.tsx +96 -0
  46. package/src/components/InfiniteTable/components/FilterEditors.tsx +52 -0
  47. package/src/components/InfiniteTable/components/InfiniteTableBody/InfiniteTableBody.tsx +27 -0
  48. package/src/components/InfiniteTable/components/InfiniteTableBody/index.tsx +1 -0
  49. package/src/components/InfiniteTable/components/InfiniteTableFooter/InfiniteTableFooter.tsx +31 -0
  50. package/src/components/InfiniteTable/components/InfiniteTableFooter/index.tsx +1 -0
  51. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableColumnHeaderFilter.tsx +102 -0
  52. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeader.tsx +163 -0
  53. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderCell.tsx +574 -0
  54. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderGroup.tsx +79 -0
  55. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderTypes.tsx +25 -0
  56. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderWrapper.tsx +185 -0
  57. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/GroupResizeHandle.tsx +159 -0
  58. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/ResizeHandle.css.ts +124 -0
  59. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/columnResizer.ts +166 -0
  60. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/index.tsx +146 -0
  61. package/src/components/InfiniteTable/components/InfiniteTableHeader/buildColumnAndGroupTree.ts +240 -0
  62. package/src/components/InfiniteTable/components/InfiniteTableHeader/header.css.ts +358 -0
  63. package/src/components/InfiniteTable/components/InfiniteTableHeader/index.tsx +1 -0
  64. package/src/components/InfiniteTable/components/InfiniteTableHeader/useColumnGroupResizeHandle.tsx +114 -0
  65. package/src/components/InfiniteTable/components/InfiniteTableHeader/useColumnResizeHandle.tsx +146 -0
  66. package/src/components/InfiniteTable/components/InfiniteTableLicenseFooter/footer.css.ts +7 -0
  67. package/src/components/InfiniteTable/components/InfiniteTableLicenseFooter/index.tsx +110 -0
  68. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableCell.tsx +120 -0
  69. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableCellTypes.ts +74 -0
  70. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableColumnCell.tsx +457 -0
  71. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRow.tsx +107 -0
  72. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowClassName.ts +6 -0
  73. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowTypes.ts +32 -0
  74. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowUnvirtualized.tsx +75 -0
  75. package/src/components/InfiniteTable/components/InfiniteTableRow/columnRendering.tsx +263 -0
  76. package/src/components/InfiniteTable/components/InfiniteTableRow/index.tsx +1 -0
  77. package/src/components/InfiniteTable/components/InfiniteTableRow/row.css.ts +74 -0
  78. package/src/components/InfiniteTable/components/InfiniteTableRow/useRowDOMProps.ts +199 -0
  79. package/src/components/InfiniteTable/components/LoadMask.css.ts +34 -0
  80. package/src/components/InfiniteTable/components/LoadMask.tsx +27 -0
  81. package/src/components/InfiniteTable/components/ScrollbarPlaceholder.tsx +56 -0
  82. package/src/components/InfiniteTable/components/cell.css.ts +192 -0
  83. package/src/components/InfiniteTable/components/icons/ArrowDown.tsx +14 -0
  84. package/src/components/InfiniteTable/components/icons/ArrowUp.tsx +14 -0
  85. package/src/components/InfiniteTable/components/icons/ExpanderIcon.css.ts +31 -0
  86. package/src/components/InfiniteTable/components/icons/ExpanderIcon.tsx +63 -0
  87. package/src/components/InfiniteTable/components/icons/Icon.tsx +18 -0
  88. package/src/components/InfiniteTable/components/icons/InfiniteTableIconClassName.ts +1 -0
  89. package/src/components/InfiniteTable/components/icons/LoadingIcon.css.ts +8 -0
  90. package/src/components/InfiniteTable/components/icons/LoadingIcon.tsx +45 -0
  91. package/src/components/InfiniteTable/components/icons/MenuIcon.tsx +50 -0
  92. package/src/components/InfiniteTable/components/icons/SortIcon.tsx +113 -0
  93. package/src/components/InfiniteTable/eventHandlers/eventHandlerTypes.ts +57 -0
  94. package/src/components/InfiniteTable/eventHandlers/index.ts +95 -0
  95. package/src/components/InfiniteTable/eventHandlers/keyboardNavigation.ts +232 -0
  96. package/src/components/InfiniteTable/eventHandlers/keyboardSelection.ts +110 -0
  97. package/src/components/InfiniteTable/eventHandlers/onCellClick.ts +94 -0
  98. package/src/components/InfiniteTable/eventHandlers/onKeyDown.ts +25 -0
  99. package/src/components/InfiniteTable/hooks/adjustColumnOrderForAllColumns.ts +70 -0
  100. package/src/components/InfiniteTable/hooks/reorderColumnsOnDrag.ts +476 -0
  101. package/src/components/InfiniteTable/hooks/useAutoSizeColumns.ts +206 -0
  102. package/src/components/InfiniteTable/hooks/useCellClassName.ts +80 -0
  103. package/src/components/InfiniteTable/hooks/useCellRendering.tsx +217 -0
  104. package/src/components/InfiniteTable/hooks/useColumnGroups.ts +71 -0
  105. package/src/components/InfiniteTable/hooks/useColumnMenu.ts +72 -0
  106. package/src/components/InfiniteTable/hooks/useColumnPointerEvents.ts +258 -0
  107. package/src/components/InfiniteTable/hooks/useColumnRowspan.ts +43 -0
  108. package/src/components/InfiniteTable/hooks/useColumnSizeFn.ts +24 -0
  109. package/src/components/InfiniteTable/hooks/useColumnsWhen.ts +582 -0
  110. package/src/components/InfiniteTable/hooks/useComputed.ts +186 -0
  111. package/src/components/InfiniteTable/hooks/useComputedVisibleColumns.ts +219 -0
  112. package/src/components/InfiniteTable/hooks/useDOMProps.ts +306 -0
  113. package/src/components/InfiniteTable/hooks/useEffectWithRaf.ts +47 -0
  114. package/src/components/InfiniteTable/hooks/useInfiniteTable.ts +10 -0
  115. package/src/components/InfiniteTable/hooks/useInfiniteTableState.ts +11 -0
  116. package/src/components/InfiniteTable/hooks/useInternalProps.ts +8 -0
  117. package/src/components/InfiniteTable/hooks/useLicense/LicenseDetails.ts +13 -0
  118. package/src/components/InfiniteTable/hooks/useLicense/crc32.ts +56 -0
  119. package/src/components/InfiniteTable/hooks/useLicense/decode.ts +147 -0
  120. package/src/components/InfiniteTable/hooks/useLicense/useLicense.ts +39 -0
  121. package/src/components/InfiniteTable/hooks/useRerenderOnKeyChange.ts +21 -0
  122. package/src/components/InfiniteTable/hooks/useRowHover.ts +18 -0
  123. package/src/components/InfiniteTable/hooks/useScrollToActiveCell.ts +48 -0
  124. package/src/components/InfiniteTable/hooks/useScrollToActiveRow.ts +44 -0
  125. package/src/components/InfiniteTable/hooks/useScrollbars.ts +51 -0
  126. package/src/components/InfiniteTable/hooks/useToggleGroupRow.ts +56 -0
  127. package/src/components/InfiniteTable/hooks/useUnpinnedRendering.tsx +165 -0
  128. package/src/components/InfiniteTable/hooks/useYourBrain.ts +55 -0
  129. package/src/components/InfiniteTable/index.tsx +352 -0
  130. package/src/components/InfiniteTable/internalProps.ts +4 -0
  131. package/src/components/InfiniteTable/state/computeColumnGroupsDepths.ts +29 -0
  132. package/src/components/InfiniteTable/state/getColumnVisibilityForHideEmptyGroupColumns.ts +127 -0
  133. package/src/components/InfiniteTable/state/getInitialState.ts +375 -0
  134. package/src/components/InfiniteTable/theme.css.ts +556 -0
  135. package/src/components/InfiniteTable/types/InfiniteTableAction.ts +6 -0
  136. package/src/components/InfiniteTable/types/InfiniteTableActionType.ts +12 -0
  137. package/src/components/InfiniteTable/types/InfiniteTableColumn.ts +478 -0
  138. package/src/components/InfiniteTable/types/InfiniteTableComputedValues.ts +43 -0
  139. package/src/components/InfiniteTable/types/InfiniteTableContextValue.ts +12 -0
  140. package/src/components/InfiniteTable/types/InfiniteTableInternalProps.ts +3 -0
  141. package/src/components/InfiniteTable/types/InfiniteTableProps.ts +511 -0
  142. package/src/components/InfiniteTable/types/InfiniteTableState.ts +195 -0
  143. package/src/components/InfiniteTable/types/Utility.ts +35 -0
  144. package/src/components/InfiniteTable/types/index.ts +96 -0
  145. package/src/components/InfiniteTable/utilities.css.ts +179 -0
  146. package/src/components/InfiniteTable/utils/MultiRowSelector.ts +111 -0
  147. package/src/components/InfiniteTable/utils/RenderHookComponentForInfinite.tsx +52 -0
  148. package/src/components/InfiniteTable/utils/adjustColumnOrderForPinning.ts +33 -0
  149. package/src/components/InfiniteTable/utils/assignFiltered.ts +29 -0
  150. package/src/components/InfiniteTable/utils/defaultGetColumContextMenuItems.tsx +108 -0
  151. package/src/components/InfiniteTable/utils/getColumnComputedType.ts +33 -0
  152. package/src/components/InfiniteTable/utils/getColumnForGroupBy.tsx +313 -0
  153. package/src/components/InfiniteTable/utils/getComputedVisibleColumns.ts +773 -0
  154. package/src/components/InfiniteTable/utils/getContextMenuForColumn.tsx +72 -0
  155. package/src/components/InfiniteTable/utils/infiniteDOMUtils.ts +189 -0
  156. package/src/components/InfiniteTable/utils/mapToObject.ts +20 -0
  157. package/src/components/InfiniteTable/utils/moveXatY.ts +25 -0
  158. package/src/components/InfiniteTable/utils/objectValuesExcept.ts +9 -0
  159. package/src/components/InfiniteTable/utils/progressiveSpeedScroller.ts +158 -0
  160. package/src/components/InfiniteTable/utils/rafFn.ts +13 -0
  161. package/src/components/InfiniteTable/utils/toCSSVarName.ts +1 -0
  162. package/src/components/InfiniteTable/utils/toMap.ts +24 -0
  163. package/src/components/Menu/Menu.tsx +750 -0
  164. package/src/components/Menu/MenuCls.css.ts +139 -0
  165. package/src/components/Menu/MenuContext.ts +10 -0
  166. package/src/components/Menu/MenuContextValue.ts +15 -0
  167. package/src/components/Menu/MenuProps.ts +98 -0
  168. package/src/components/Menu/MenuState.ts +56 -0
  169. package/src/components/Menu/MenuTriangleContext.ts +352 -0
  170. package/src/components/Menu/childrenToRuntimeItems.tsx +103 -0
  171. package/src/components/Menu/getMenuState.tsx +119 -0
  172. package/src/components/Menu/index.tsx +88 -0
  173. package/src/components/Menu/propToIdentifyMenu.ts +1 -0
  174. package/src/components/RawList/AvoidReactDiff.tsx +48 -0
  175. package/src/components/RawList/MappedItems.ts +143 -0
  176. package/src/components/RawList/ReactVirtualRenderer.tsx +307 -0
  177. package/src/components/RawList/index.tsx +42 -0
  178. package/src/components/RawList/types.ts +23 -0
  179. package/src/components/RawList/useVirtualRenderer.ts +36 -0
  180. package/src/components/RenderHookComponent.tsx +10 -0
  181. package/src/components/ResizeObserver/index.tsx +170 -0
  182. package/src/components/VirtualBrain/MatrixBrain.ts +1621 -0
  183. package/src/components/VirtualBrain/ScrollListener.ts +39 -0
  184. package/src/components/VirtualBrain/index.ts +664 -0
  185. package/src/components/VirtualList/ColumnListWithExternalScrolling.tsx +78 -0
  186. package/src/components/VirtualList/InfiniteListRootClassName.ts +1 -0
  187. package/src/components/VirtualList/RowListWithExternalScrolling.tsx +120 -0
  188. package/src/components/VirtualList/SpacePlaceholder.tsx +32 -0
  189. package/src/components/VirtualList/VirtualList.css.ts +29 -0
  190. package/src/components/VirtualList/VirtualList.tsx +141 -0
  191. package/src/components/VirtualList/VirtualRowList.tsx +34 -0
  192. package/src/components/VirtualList/types.ts +56 -0
  193. package/src/components/VirtualList/useCorrectHeightForRowElements.ts +14 -0
  194. package/src/components/VirtualScrollContainer/VirtualScrollContainer.css.ts +51 -0
  195. package/src/components/VirtualScrollContainer/getScrollableClassName.ts +30 -0
  196. package/src/components/VirtualScrollContainer/index.tsx +63 -0
  197. package/src/components/flexbox/index.ts +562 -0
  198. package/src/components/hooks/useComponentState/index.tsx +562 -0
  199. package/src/components/hooks/useComponentState/types.ts +32 -0
  200. package/src/components/hooks/useEffectOnceWithProperUnmount.ts +33 -0
  201. package/src/components/hooks/useEffectWithChanges.ts +56 -0
  202. package/src/components/hooks/useImmutableRef.ts +7 -0
  203. package/src/components/hooks/useInterceptedMap.ts +71 -0
  204. package/src/components/hooks/useLatest.tsx +8 -0
  205. package/src/components/hooks/useLazyLatest.ts +23 -0
  206. package/src/components/hooks/useMemoShallowObjectMerge.ts +16 -0
  207. package/src/components/hooks/useMounted.ts +18 -0
  208. package/src/components/hooks/useOnMount.ts +21 -0
  209. package/src/components/hooks/useOnScroll.ts +34 -0
  210. package/src/components/hooks/useOnce.ts +10 -0
  211. package/src/components/hooks/useOverlay/index.tsx +418 -0
  212. package/src/components/hooks/usePrevious.ts +8 -0
  213. package/src/components/hooks/usePropertyOld.ts +168 -0
  214. package/src/components/hooks/useRerender.ts +12 -0
  215. package/src/components/hooks/xuseProperty.ts +165 -0
  216. package/src/components/types/CellPosition.ts +4 -0
  217. package/src/components/types/NonUndefined.ts +1 -0
  218. package/src/components/types/RemoveObject.ts +22 -0
  219. package/src/components/types/Renderable.ts +3 -0
  220. package/src/components/types/ScrollPosition.ts +7 -0
  221. package/src/components/types/Setter.ts +2 -0
  222. package/src/components/types/Size.ts +6 -0
  223. package/src/components/types/SubscriptionCallback.ts +10 -0
  224. package/src/components/types/VoidFn.ts +1 -0
  225. package/src/components/utils/buildSubscriptionCallback.tsx +60 -0
  226. package/src/components/utils/clamp.ts +3 -0
  227. package/src/components/utils/debounce.ts +16 -0
  228. package/src/components/utils/decamelize.ts +11 -0
  229. package/src/components/utils/discardCallsWithEqualArg.ts +42 -0
  230. package/src/components/utils/getRenderIndexes.ts +33 -0
  231. package/src/components/utils/getScrollbarWidth.ts +31 -0
  232. package/src/components/utils/getVirtualRenderCount.ts +21 -0
  233. package/src/components/utils/isControlled.ts +12 -0
  234. package/src/components/utils/isControlledValue.ts +5 -0
  235. package/src/index.tsx +34 -0
  236. package/src/test.tsx +18 -0
  237. package/src/utils/DeepMap/index.ts +588 -0
  238. package/src/utils/DeepMap/once.ts +16 -0
  239. package/src/utils/DeepMap/sortAscending.ts +1 -0
  240. package/src/utils/DeepMap/tsconfig.deepmap.json +17 -0
  241. package/src/utils/DeepMap/xpackage.json +26 -0
  242. package/src/utils/debug.ts +40 -0
  243. package/src/utils/deepClone.ts +38 -0
  244. package/src/utils/getGlobal.ts +3 -0
  245. package/src/utils/groupAndPivot/defaultToKey.ts +3 -0
  246. package/src/utils/groupAndPivot/getGroupKeysForDataItem.ts +19 -0
  247. package/src/utils/groupAndPivot/getPivotColumnsAndColumnGroups.ts +361 -0
  248. package/src/utils/groupAndPivot/index.ts +1229 -0
  249. package/src/utils/groupAndPivot/types.ts +10 -0
  250. package/src/utils/join.ts +4 -0
  251. package/src/utils/mathIntersection.ts +21 -0
  252. package/src/utils/minified.d.ts +2 -0
  253. package/src/utils/minified.js +6 -0
  254. package/src/utils/multisort/index.ts +151 -0
  255. package/src/utils/multisort/sortTypes.ts +25 -0
  256. package/src/utils/notes-status.md +92 -0
  257. package/src/utils/pageGeometry/ConvexPoly.ts +34 -0
  258. package/src/utils/pageGeometry/Point.ts +51 -0
  259. package/src/utils/pageGeometry/PolyWithPoints.ts +52 -0
  260. package/src/utils/pageGeometry/Rectangle.ts +98 -0
  261. package/src/utils/pageGeometry/Triangle.ts +16 -0
  262. package/src/utils/pageGeometry/alignment/index.ts +221 -0
  263. package/src/utils/pageGeometry/polyContainsPoint.ts +182 -0
  264. package/src/utils/pageGeometry/types.ts +3 -0
  265. package/src/utils/proxyFnCall.ts +46 -0
  266. package/src/utils/raf.ts +13 -0
  267. package/src/utils/selectParent.ts +18 -0
  268. package/src/utils/shallowEqualObjects.ts +49 -0
  269. package/src/utils/stripVar.ts +3 -0
  270. package/src/utils/toUpperFirst.ts +5 -0
  271. package/todo.md +2 -0
  272. package/tsconfig.build.json +8 -0
  273. package/tsconfig.dev.json +7 -0
  274. package/tsconfig.json +30 -0
  275. package/tsconfig.typebundler.json +13 -0
  276. package/typedoc.json +4 -0
  277. package/README.md +0 -104
  278. package/index.css +0 -857
  279. package/index.d.ts +0 -2111
  280. package/index.esm.css +0 -857
  281. package/index.esm.js +0 -13695
  282. package/index.js +0 -13565
@@ -0,0 +1,40 @@
1
+ const debug = require('debug');
2
+
3
+ const debugTable = debug(`InfiniteTable`);
4
+
5
+ export interface LogFn {
6
+ (...args: any[]): LogFn;
7
+ extend: (channelName: string) => LogFn;
8
+ }
9
+ export const dbg = (channelName: string): LogFn => {
10
+ const result = debugTable.extend(channelName);
11
+
12
+ result.log = console.log.bind(console);
13
+
14
+ return result;
15
+ };
16
+
17
+ export const err = (channelName: string): LogFn => {
18
+ const result = debugTable.extend(`${channelName}:error`);
19
+
20
+ result.log = console.error.bind(console);
21
+
22
+ return result;
23
+ };
24
+
25
+ const emptyLogFn = () => emptyLogFn;
26
+ emptyLogFn.extend = () => emptyLogFn;
27
+
28
+ export class Logger {
29
+ debug: LogFn;
30
+ error: LogFn;
31
+
32
+ constructor(channelName: string) {
33
+ this.debug = emptyLogFn;
34
+ this.error = emptyLogFn;
35
+ if (__DEV__) {
36
+ this.debug = dbg(channelName);
37
+ this.error = err(channelName);
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,38 @@
1
+ import { getGlobal } from './getGlobal';
2
+
3
+ function cloneArray(arr: any[]) {
4
+ return arr.map(deepClone);
5
+ }
6
+
7
+ export function deepClone(source: any): any {
8
+ //@ts-ignore
9
+ if (getGlobal().structuredClone) {
10
+ //@ts-ignore
11
+ return getGlobal().structuredClone(source);
12
+ }
13
+
14
+ if (source === null || typeof source !== 'object') {
15
+ // this is a scalar value
16
+ return source;
17
+ }
18
+ if (Array.isArray(source)) {
19
+ return cloneArray(source);
20
+ }
21
+ if (source instanceof Date) {
22
+ return new Date(source);
23
+ }
24
+ if (source instanceof Set) {
25
+ return new Set(cloneArray(Array.from(source)));
26
+ }
27
+ if (source instanceof Map) {
28
+ return new Map(cloneArray(Array.from(source)));
29
+ }
30
+
31
+ let target: any = {};
32
+ for (let key in source)
33
+ if (source.hasOwnProperty(key)) {
34
+ target[key] = deepClone(source[key]);
35
+ }
36
+
37
+ return target;
38
+ }
@@ -0,0 +1,3 @@
1
+ export function getGlobal<T extends Window>() {
2
+ return globalThis as any as T;
3
+ }
@@ -0,0 +1,3 @@
1
+ export function DEFAULT_TO_KEY<T>(value: T): T {
2
+ return value;
3
+ }
@@ -0,0 +1,19 @@
1
+ import { DEFAULT_TO_KEY } from './defaultToKey';
2
+ import { GroupBy, GroupKeyType } from './types';
3
+
4
+ export function getGroupKeysForDataItem<DataType, KeyType = any>(
5
+ data: DataType,
6
+ groupBy: GroupBy<DataType, KeyType>[],
7
+ ) {
8
+ return groupBy.reduce((groupKeys, groupBy) => {
9
+ const { field: groupByProperty, toKey: groupToKey } = groupBy;
10
+ const key: GroupKeyType<KeyType> = (groupToKey || DEFAULT_TO_KEY)(
11
+ data[groupByProperty],
12
+ data,
13
+ );
14
+
15
+ groupKeys.push(key);
16
+
17
+ return groupKeys;
18
+ }, [] as any[]);
19
+ }
@@ -0,0 +1,361 @@
1
+ import type {
2
+ DataSourceAggregationReducer,
3
+ DataSourcePivotBy,
4
+ } from '../../components/DataSource';
5
+ import type {
6
+ InfiniteTableColumnGroup,
7
+ InfiniteTablePropColumnGroups,
8
+ InfiniteTableColumnsMap,
9
+ } from '../../components/InfiniteTable';
10
+ import type {
11
+ InfiniteTablePivotColumn,
12
+ InfiniteTablePivotFinalColumnGroup,
13
+ InfiniteTablePivotFinalColumnVariant,
14
+ } from '../../components/InfiniteTable/types/InfiniteTableColumn';
15
+ import { InfiniteTablePropColumnGroupsMap } from '../../components/InfiniteTable/types/InfiniteTableProps';
16
+ import type {
17
+ InfiniteTablePropPivotTotalColumnPosition,
18
+ InfiniteTablePropPivotGrandTotalColumnPosition,
19
+ } from '../../components/InfiniteTable/types/InfiniteTableState';
20
+ import { DeepMap } from '../DeepMap';
21
+ import { once } from '../DeepMap/once';
22
+
23
+ import { AggregationReducer } from '.';
24
+
25
+ export type ComputedColumnsAndGroups<DataType> = {
26
+ columns: InfiniteTableColumnsMap<
27
+ DataType,
28
+ InfiniteTablePivotColumn<DataType>
29
+ >;
30
+ columnGroups: InfiniteTablePropColumnGroupsMap;
31
+ };
32
+
33
+ function prepareColumn<DataType>(
34
+ column: InfiniteTablePivotFinalColumnVariant<DataType>,
35
+ ) {
36
+ const { pivotByAtIndex: pivotByForColumn, pivotAggregator } = column;
37
+
38
+ if (pivotByForColumn?.column) {
39
+ if (typeof pivotByForColumn.column === 'function') {
40
+ Object.assign(column, pivotByForColumn.column({ column }));
41
+ } else {
42
+ Object.assign(column, pivotByForColumn.column);
43
+ }
44
+ }
45
+ if (pivotAggregator?.pivotColumn) {
46
+ if (typeof pivotAggregator.pivotColumn === 'function') {
47
+ Object.assign(column, pivotAggregator.pivotColumn({ column }));
48
+ } else {
49
+ Object.assign(column, pivotAggregator.pivotColumn);
50
+ }
51
+ }
52
+
53
+ return column;
54
+ }
55
+
56
+ function prepareColumnGroup<DataType>(
57
+ columnGroup: InfiniteTablePivotFinalColumnGroup<DataType>,
58
+ ) {
59
+ const { pivotByAtIndex: pivotByForColumnGroup } = columnGroup;
60
+
61
+ if (pivotByForColumnGroup?.columnGroup) {
62
+ if (typeof pivotByForColumnGroup.columnGroup === 'function') {
63
+ Object.assign(
64
+ columnGroup,
65
+ pivotByForColumnGroup.columnGroup({ columnGroup }),
66
+ );
67
+ } else {
68
+ Object.assign(columnGroup, pivotByForColumnGroup.columnGroup);
69
+ }
70
+ }
71
+
72
+ return columnGroup;
73
+ }
74
+
75
+ export function getPivotColumnsAndColumnGroups<
76
+ DataType,
77
+ KeyType extends string | number = string | number,
78
+ >({
79
+ deepMap,
80
+ pivotBy,
81
+ pivotTotalColumnPosition,
82
+ pivotGrandTotalColumnPosition,
83
+ reducers = {},
84
+ showSeparatePivotColumnForSingleAggregation = false,
85
+ }: {
86
+ deepMap: DeepMap<KeyType, boolean>;
87
+ pivotBy: DataSourcePivotBy<DataType>[];
88
+ pivotTotalColumnPosition: InfiniteTablePropPivotTotalColumnPosition;
89
+ pivotGrandTotalColumnPosition: InfiniteTablePropPivotGrandTotalColumnPosition;
90
+ reducers?: Record<string, DataSourceAggregationReducer<DataType, any>>;
91
+ showSeparatePivotColumnForSingleAggregation?: boolean;
92
+ }): ComputedColumnsAndGroups<DataType> {
93
+ const pivotLength = pivotBy.length;
94
+ const aggregationReducers: AggregationReducer<DataType, any>[] = Object.keys(
95
+ reducers,
96
+ ).map((key) => {
97
+ return { ...reducers[key], id: key };
98
+ });
99
+ const columns: InfiniteTableColumnsMap<
100
+ DataType,
101
+ InfiniteTablePivotColumn<DataType>
102
+ > = new Map<string, InfiniteTablePivotColumn<DataType>>([
103
+ // [
104
+ // 'labels',
105
+ // {
106
+ // header: 'Row labels',
107
+ // pivotBy,
108
+ // valueGetter: (params) => {
109
+ // const { rowInfo } = params;
110
+ // if (!rowInfo.data) {
111
+ // // TODO replace with loading spinner
112
+ // return 'Loading ...';
113
+ // }
114
+ // return rowInfo.groupKeys
115
+ // ? rowInfo.groupKeys[rowInfo.groupKeys?.length - 1]
116
+ // : null;
117
+ // },
118
+ // },
119
+ // ],
120
+ ]);
121
+
122
+ const columnGroups: InfiniteTablePropColumnGroups = new Map<
123
+ string,
124
+ InfiniteTableColumnGroup
125
+ >();
126
+
127
+ const addGrandTotalColumns = once(function () {
128
+ aggregationReducers.forEach((reducer, index) => {
129
+ columns.set(
130
+ `total:${reducer.id}`,
131
+ prepareColumn({
132
+ header: `${reducer.name || reducer.id} total`,
133
+ pivotBy,
134
+ pivotColumn: true,
135
+ pivotTotalColumn: true,
136
+ pivotAggregator: reducer,
137
+ pivotAggregatorIndex: index,
138
+
139
+ pivotGroupKeys: [],
140
+ pivotGroupKey: '',
141
+ pivotIndex: -1,
142
+
143
+ valueFormatter: ({ rowInfo }) => {
144
+ // return rowInfo.reducerResults?.[reducer.id] as any as string;
145
+
146
+ return rowInfo.isGroupRow
147
+ ? (rowInfo.reducerResults?.[reducer.id] as any as string)
148
+ : null;
149
+ },
150
+ }),
151
+ );
152
+ });
153
+ });
154
+
155
+ if (
156
+ (!pivotLength && pivotTotalColumnPosition === 'start') ||
157
+ pivotGrandTotalColumnPosition === 'start'
158
+ ) {
159
+ addGrandTotalColumns();
160
+ }
161
+
162
+ const isSingleAggregationColumn =
163
+ !showSeparatePivotColumnForSingleAggregation &&
164
+ aggregationReducers.length === 1;
165
+
166
+ deepMap.visitDepthFirst((_value, keys: KeyType[], _indexInGroup, next) => {
167
+ keys = [...keys];
168
+
169
+ if (pivotTotalColumnPosition === 'end') {
170
+ next?.();
171
+ }
172
+
173
+ if (keys.length === pivotLength) {
174
+ const pivotByForColumn = pivotBy[keys.length - 1];
175
+ const parentKeys = keys.slice(0, -1);
176
+
177
+ let parentColumnGroupId = parentKeys.join('/');
178
+ // const initialParentColumnGroupId = parentColumnGroupId;
179
+
180
+ if (!isSingleAggregationColumn) {
181
+ const columnGroupId = parentColumnGroupId;
182
+ parentColumnGroupId = keys.join('/');
183
+
184
+ const pivotGroupKey = keys[keys.length - 1];
185
+ columnGroups.set(
186
+ parentColumnGroupId,
187
+ prepareColumnGroup({
188
+ header: pivotGroupKey,
189
+ columnGroup: columnGroupId,
190
+ pivotBy,
191
+ pivotGroupKeys: keys,
192
+ pivotByAtIndex: pivotByForColumn,
193
+ pivotIndex: keys.length - 1,
194
+ pivotGroupKey,
195
+ }),
196
+ );
197
+ }
198
+
199
+ // todo when !isSingleAggregationColumn add here pivot total column
200
+ aggregationReducers.forEach((reducer, index) => {
201
+ const header = isSingleAggregationColumn
202
+ ? keys[keys.length - 1]
203
+ : reducer.name || reducer.id;
204
+
205
+ const computedPivotColumn = prepareColumn({
206
+ pivotBy,
207
+ pivotColumn: true,
208
+ pivotTotalColumn: false,
209
+ pivotAggregator: reducer,
210
+ pivotAggregatorIndex: index,
211
+ pivotGroupKeys: keys,
212
+ pivotGroupKey: keys[keys.length - 1],
213
+ pivotIndex: keys.length - 1,
214
+ pivotByAtIndex: pivotByForColumn,
215
+ sortable: false,
216
+ columnGroup: parentColumnGroupId,
217
+ header,
218
+ valueFormatter: ({ rowInfo }) => {
219
+ if (!rowInfo.isGroupRow) {
220
+ return null;
221
+ }
222
+ return rowInfo.pivotValuesMap?.get(keys)?.reducerResults[
223
+ reducer.id
224
+ ] as any as string;
225
+ },
226
+ });
227
+
228
+ const columnId = `${reducer.id}:${keys.join('/')}`;
229
+
230
+ columns.set(columnId, computedPivotColumn);
231
+ });
232
+
233
+ // todo fix https://github.com/infinite-table/infinite-react/issues/22
234
+
235
+ // if (!isSingleAggregationColumn) {
236
+ // aggregationReducers.forEach((reducer, index) => {
237
+ // const computedPivotTotalColumn = prepareColumn({
238
+ // columnGroup: parentColumnGroupId,
239
+ // header: isSingleAggregationColumn
240
+ // ? `${keys[keys.length - 1]} total `
241
+ // : `${reducer.id} total`,
242
+ // pivotAggregator: reducer,
243
+ // pivotAggregatorIndex: index,
244
+ // pivotColumn: true,
245
+ // pivotTotalColumn: true,
246
+ // pivotGroupKeys: keys,
247
+ // pivotGroupKey: keys[keys.length - 1],
248
+ // pivotByAtIndex: pivotByForColumn,
249
+ // pivotIndex: keys.length - 1,
250
+ // pivotBy,
251
+ // sortable: false,
252
+ // valueGetter: ({ rowInfo }) => {
253
+ // return rowInfo.pivotValuesMap?.get(keys)?.reducerResults[
254
+ // reducer.id
255
+ // ];
256
+ // },
257
+ // });
258
+
259
+ // columns.set(
260
+ // `total:${reducer.id}:${keys.join('/')}`,
261
+ // computedPivotTotalColumn,
262
+ // );
263
+ // });
264
+ // }
265
+ } else {
266
+ const colGroupId = keys.join('/');
267
+ const parentKeys = keys.slice(0, -1);
268
+
269
+ columnGroups.set(
270
+ colGroupId,
271
+ prepareColumnGroup({
272
+ columnGroup: parentKeys.length ? parentKeys.join('/') : undefined,
273
+ header: keys[keys.length - 1],
274
+ pivotBy,
275
+ pivotGroupKeys: keys,
276
+ pivotIndex: keys.length - 1,
277
+ pivotByAtIndex: pivotBy[keys.length - 1],
278
+ pivotGroupKey: keys[keys.length - 1],
279
+ }),
280
+ );
281
+
282
+ if (pivotTotalColumnPosition !== false) {
283
+ const pivotByForColumn = pivotBy[keys.length - 1];
284
+ let columnGroupId = parentKeys.length
285
+ ? parentKeys.join('/')
286
+ : undefined;
287
+
288
+ if (!isSingleAggregationColumn) {
289
+ const parentGroupForTotalsGroup = columnGroupId;
290
+ columnGroupId = `total:${keys.join('/')}`;
291
+ columnGroups.set(
292
+ columnGroupId,
293
+ prepareColumnGroup({
294
+ header: `${keys[keys.length - 1]} total`,
295
+ columnGroup: parentGroupForTotalsGroup,
296
+ pivotBy,
297
+ pivotTotalColumnGroup: true,
298
+ pivotGroupKeys: keys,
299
+ pivotIndex: keys.length - 1,
300
+ pivotByAtIndex: pivotByForColumn,
301
+ pivotGroupKey: keys[keys.length - 1],
302
+ }),
303
+ );
304
+ }
305
+
306
+ aggregationReducers.forEach((reducer, index) => {
307
+ const header = isSingleAggregationColumn
308
+ ? `${keys[keys.length - 1]} total `
309
+ : `${reducer.name || reducer.id} total`;
310
+ const computedPivotColumn = prepareColumn({
311
+ columnGroup: columnGroupId,
312
+ header,
313
+ pivotAggregator: reducer,
314
+ pivotAggregatorIndex: index,
315
+ pivotColumn: true,
316
+ pivotTotalColumn: true,
317
+ pivotGroupKeys: keys,
318
+ pivotGroupKey: keys[keys.length - 1],
319
+ pivotByAtIndex: pivotByForColumn,
320
+ pivotIndex: keys.length - 1,
321
+ pivotBy,
322
+ sortable: false,
323
+ valueFormatter: ({ rowInfo }) => {
324
+ if (!rowInfo.isGroupRow) {
325
+ return null;
326
+ }
327
+ return rowInfo.pivotValuesMap?.get(keys)?.reducerResults[
328
+ reducer.id
329
+ ] as any as string;
330
+ },
331
+ });
332
+ columns.set(
333
+ `total:${reducer.id}:${keys.join('/')}`,
334
+ computedPivotColumn,
335
+ );
336
+ });
337
+ }
338
+ }
339
+
340
+ if (
341
+ pivotTotalColumnPosition === 'start' ||
342
+ pivotTotalColumnPosition === false
343
+ ) {
344
+ next?.();
345
+ }
346
+ });
347
+
348
+ if (
349
+ (!pivotLength && pivotTotalColumnPosition === 'end') ||
350
+ pivotGrandTotalColumnPosition === 'end'
351
+ ) {
352
+ addGrandTotalColumns();
353
+ }
354
+
355
+ const result = {
356
+ columns,
357
+ columnGroups,
358
+ };
359
+
360
+ return result;
361
+ }