material-react-table 1.15.0 → 2.0.0-alpha.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 (482) hide show
  1. package/dist/cjs/index.js +1624 -1269
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/MaterialReactTable.d.ts +7 -11
  4. package/dist/cjs/types/body/MRT_TableBody.d.ts +4 -5
  5. package/dist/cjs/types/body/MRT_TableBodyCell.d.ts +5 -5
  6. package/dist/cjs/types/body/MRT_TableBodyCellValue.d.ts +4 -4
  7. package/dist/cjs/types/body/MRT_TableBodyRow.d.ts +6 -6
  8. package/dist/cjs/types/body/MRT_TableBodyRowGrabHandle.d.ts +5 -5
  9. package/dist/cjs/types/body/MRT_TableBodyRowPinButton.d.ts +7 -0
  10. package/dist/cjs/types/body/MRT_TableDetailPanel.d.ts +6 -6
  11. package/dist/cjs/types/body/index.d.ts +7 -0
  12. package/dist/cjs/types/buttons/MRT_ColumnPinningButtons.d.ts +2 -2
  13. package/dist/cjs/types/buttons/MRT_CopyButton.d.ts +2 -2
  14. package/dist/cjs/types/buttons/MRT_EditActionButtons.d.ts +2 -2
  15. package/dist/cjs/types/buttons/MRT_ExpandAllButton.d.ts +3 -3
  16. package/dist/cjs/types/buttons/MRT_ExpandButton.d.ts +2 -2
  17. package/dist/cjs/types/buttons/MRT_GrabHandleButton.d.ts +2 -2
  18. package/dist/cjs/types/buttons/MRT_RowPinButton.d.ts +9 -0
  19. package/dist/cjs/types/buttons/MRT_ShowHideColumnsButton.d.ts +2 -2
  20. package/dist/cjs/types/buttons/MRT_ToggleDensePaddingButton.d.ts +2 -2
  21. package/dist/cjs/types/buttons/MRT_ToggleFiltersButton.d.ts +2 -2
  22. package/dist/cjs/types/buttons/MRT_ToggleFullScreenButton.d.ts +7 -0
  23. package/dist/cjs/types/buttons/MRT_ToggleGlobalFilterButton.d.ts +2 -2
  24. package/dist/cjs/types/buttons/MRT_ToggleRowActionMenuButton.d.ts +2 -2
  25. package/dist/cjs/types/buttons/index.d.ts +13 -0
  26. package/dist/cjs/types/column.utils.d.ts +40 -51
  27. package/dist/cjs/types/filterFns.d.ts +14 -14
  28. package/dist/cjs/types/footer/MRT_TableFooter.d.ts +3 -3
  29. package/dist/cjs/types/footer/MRT_TableFooterCell.d.ts +4 -4
  30. package/dist/cjs/types/footer/MRT_TableFooterRow.d.ts +4 -4
  31. package/dist/cjs/types/footer/index.d.ts +3 -0
  32. package/dist/cjs/types/head/MRT_TableHead.d.ts +3 -3
  33. package/dist/cjs/types/head/MRT_TableHeadCell.d.ts +4 -4
  34. package/dist/cjs/types/head/MRT_TableHeadCellColumnActionsButton.d.ts +4 -4
  35. package/dist/cjs/types/head/MRT_TableHeadCellFilterContainer.d.ts +4 -4
  36. package/dist/cjs/types/head/MRT_TableHeadCellFilterLabel.d.ts +4 -4
  37. package/dist/cjs/types/head/MRT_TableHeadCellGrabHandle.d.ts +4 -4
  38. package/dist/cjs/types/head/MRT_TableHeadCellResizeHandle.d.ts +4 -4
  39. package/dist/cjs/types/head/MRT_TableHeadCellSortLabel.d.ts +4 -4
  40. package/dist/cjs/types/head/MRT_TableHeadRow.d.ts +4 -4
  41. package/dist/cjs/types/head/index.d.ts +9 -0
  42. package/dist/cjs/types/hooks/useMRT_DisplayColumns.d.ts +9 -0
  43. package/dist/cjs/types/hooks/useMRT_Effects.d.ts +2 -0
  44. package/dist/cjs/types/hooks/useMRT_TableInstance.d.ts +2 -0
  45. package/dist/cjs/types/hooks/useMRT_TableOptions.d.ts +2 -0
  46. package/dist/cjs/types/index.d.ts +14 -25
  47. package/dist/cjs/types/inputs/MRT_EditCellTextField.d.ts +2 -3
  48. package/dist/cjs/types/inputs/MRT_FilterCheckbox.d.ts +4 -4
  49. package/dist/cjs/types/inputs/MRT_FilterRangeFields.d.ts +4 -4
  50. package/dist/cjs/types/inputs/MRT_FilterRangeSlider.d.ts +4 -4
  51. package/dist/cjs/types/inputs/MRT_FilterTextField.d.ts +4 -4
  52. package/dist/cjs/types/inputs/MRT_GlobalFilterTextField.d.ts +2 -2
  53. package/dist/cjs/types/inputs/MRT_SelectCheckbox.d.ts +4 -4
  54. package/dist/cjs/types/inputs/index.d.ts +7 -0
  55. package/dist/cjs/types/locales/ar.d.ts +2 -0
  56. package/dist/cjs/types/locales/bg.d.ts +2 -0
  57. package/dist/cjs/types/locales/et.d.ts +2 -0
  58. package/dist/cjs/types/locales/ko.d.ts +2 -0
  59. package/dist/cjs/types/menus/MRT_ColumnActionMenu.d.ts +4 -4
  60. package/dist/cjs/types/menus/MRT_FilterOptionMenu.d.ts +2 -2
  61. package/dist/cjs/types/menus/MRT_RowActionMenu.d.ts +4 -4
  62. package/dist/cjs/types/menus/MRT_ShowHideColumnsMenu.d.ts +2 -2
  63. package/dist/cjs/types/menus/MRT_ShowHideColumnsMenuItems.d.ts +2 -2
  64. package/dist/cjs/types/menus/index.d.ts +5 -0
  65. package/dist/cjs/types/modals/MRT_EditRowModal.d.ts +7 -0
  66. package/dist/cjs/types/modals/index.d.ts +1 -0
  67. package/dist/cjs/types/sortingFns.d.ts +3 -2
  68. package/dist/cjs/types/table/MRT_Table.d.ts +3 -3
  69. package/dist/cjs/types/table/MRT_TableContainer.d.ts +3 -3
  70. package/dist/cjs/types/table/MRT_TablePaper.d.ts +3 -3
  71. package/dist/cjs/types/table/index.d.ts +4 -0
  72. package/dist/cjs/types/toolbar/MRT_BottomToolbar.d.ts +2 -2
  73. package/dist/cjs/types/toolbar/MRT_LinearProgressBar.d.ts +2 -2
  74. package/dist/cjs/types/toolbar/MRT_TablePagination.d.ts +2 -2
  75. package/dist/cjs/types/toolbar/MRT_ToolbarAlertBanner.d.ts +2 -2
  76. package/dist/cjs/types/toolbar/MRT_ToolbarDropZone.d.ts +2 -2
  77. package/dist/cjs/types/toolbar/MRT_ToolbarInternalButtons.d.ts +2 -2
  78. package/dist/cjs/types/toolbar/MRT_TopToolbar.d.ts +2 -2
  79. package/dist/cjs/types/toolbar/index.d.ts +7 -0
  80. package/dist/cjs/types/types.d.ts +128 -91
  81. package/dist/cjs/types/useMaterialReactTable.d.ts +2 -0
  82. package/dist/esm/material-react-table.esm.js +1567 -1279
  83. package/dist/esm/material-react-table.esm.js.map +1 -1
  84. package/dist/esm/types/MaterialReactTable.d.ts +7 -11
  85. package/dist/esm/types/body/MRT_TableBody.d.ts +4 -5
  86. package/dist/esm/types/body/MRT_TableBodyCell.d.ts +5 -5
  87. package/dist/esm/types/body/MRT_TableBodyCellValue.d.ts +4 -4
  88. package/dist/esm/types/body/MRT_TableBodyRow.d.ts +6 -6
  89. package/dist/esm/types/body/MRT_TableBodyRowGrabHandle.d.ts +5 -5
  90. package/dist/esm/types/body/MRT_TableBodyRowPinButton.d.ts +7 -0
  91. package/dist/esm/types/body/MRT_TableDetailPanel.d.ts +6 -6
  92. package/dist/esm/types/body/index.d.ts +7 -0
  93. package/dist/esm/types/buttons/MRT_ColumnPinningButtons.d.ts +2 -2
  94. package/dist/esm/types/buttons/MRT_CopyButton.d.ts +2 -2
  95. package/dist/esm/types/buttons/MRT_EditActionButtons.d.ts +2 -2
  96. package/dist/esm/types/buttons/MRT_ExpandAllButton.d.ts +3 -3
  97. package/dist/esm/types/buttons/MRT_ExpandButton.d.ts +2 -2
  98. package/dist/esm/types/buttons/MRT_GrabHandleButton.d.ts +2 -2
  99. package/dist/esm/types/buttons/MRT_RowPinButton.d.ts +9 -0
  100. package/dist/esm/types/buttons/MRT_ShowHideColumnsButton.d.ts +2 -2
  101. package/dist/esm/types/buttons/MRT_ToggleDensePaddingButton.d.ts +2 -2
  102. package/dist/esm/types/buttons/MRT_ToggleFiltersButton.d.ts +2 -2
  103. package/dist/esm/types/buttons/MRT_ToggleFullScreenButton.d.ts +7 -0
  104. package/dist/esm/types/buttons/MRT_ToggleGlobalFilterButton.d.ts +2 -2
  105. package/dist/esm/types/buttons/MRT_ToggleRowActionMenuButton.d.ts +2 -2
  106. package/dist/esm/types/buttons/index.d.ts +13 -0
  107. package/dist/esm/types/column.utils.d.ts +40 -51
  108. package/dist/esm/types/filterFns.d.ts +14 -14
  109. package/dist/esm/types/footer/MRT_TableFooter.d.ts +3 -3
  110. package/dist/esm/types/footer/MRT_TableFooterCell.d.ts +4 -4
  111. package/dist/esm/types/footer/MRT_TableFooterRow.d.ts +4 -4
  112. package/dist/esm/types/footer/index.d.ts +3 -0
  113. package/dist/esm/types/head/MRT_TableHead.d.ts +3 -3
  114. package/dist/esm/types/head/MRT_TableHeadCell.d.ts +4 -4
  115. package/dist/esm/types/head/MRT_TableHeadCellColumnActionsButton.d.ts +4 -4
  116. package/dist/esm/types/head/MRT_TableHeadCellFilterContainer.d.ts +4 -4
  117. package/dist/esm/types/head/MRT_TableHeadCellFilterLabel.d.ts +4 -4
  118. package/dist/esm/types/head/MRT_TableHeadCellGrabHandle.d.ts +4 -4
  119. package/dist/esm/types/head/MRT_TableHeadCellResizeHandle.d.ts +4 -4
  120. package/dist/esm/types/head/MRT_TableHeadCellSortLabel.d.ts +4 -4
  121. package/dist/esm/types/head/MRT_TableHeadRow.d.ts +4 -4
  122. package/dist/esm/types/head/index.d.ts +9 -0
  123. package/dist/esm/types/hooks/useMRT_DisplayColumns.d.ts +9 -0
  124. package/dist/esm/types/hooks/useMRT_Effects.d.ts +2 -0
  125. package/dist/esm/types/hooks/useMRT_TableInstance.d.ts +2 -0
  126. package/dist/esm/types/hooks/useMRT_TableOptions.d.ts +2 -0
  127. package/dist/esm/types/index.d.ts +14 -25
  128. package/dist/esm/types/inputs/MRT_EditCellTextField.d.ts +2 -3
  129. package/dist/esm/types/inputs/MRT_FilterCheckbox.d.ts +4 -4
  130. package/dist/esm/types/inputs/MRT_FilterRangeFields.d.ts +4 -4
  131. package/dist/esm/types/inputs/MRT_FilterRangeSlider.d.ts +4 -4
  132. package/dist/esm/types/inputs/MRT_FilterTextField.d.ts +4 -4
  133. package/dist/esm/types/inputs/MRT_GlobalFilterTextField.d.ts +2 -2
  134. package/dist/esm/types/inputs/MRT_SelectCheckbox.d.ts +4 -4
  135. package/dist/esm/types/inputs/index.d.ts +7 -0
  136. package/dist/esm/types/locales/ar.d.ts +2 -0
  137. package/dist/esm/types/locales/bg.d.ts +2 -0
  138. package/dist/esm/types/locales/et.d.ts +2 -0
  139. package/dist/esm/types/locales/ko.d.ts +2 -0
  140. package/dist/esm/types/menus/MRT_ColumnActionMenu.d.ts +4 -4
  141. package/dist/esm/types/menus/MRT_FilterOptionMenu.d.ts +2 -2
  142. package/dist/esm/types/menus/MRT_RowActionMenu.d.ts +4 -4
  143. package/dist/esm/types/menus/MRT_ShowHideColumnsMenu.d.ts +2 -2
  144. package/dist/esm/types/menus/MRT_ShowHideColumnsMenuItems.d.ts +2 -2
  145. package/dist/esm/types/menus/index.d.ts +5 -0
  146. package/dist/esm/types/modals/MRT_EditRowModal.d.ts +7 -0
  147. package/dist/esm/types/modals/index.d.ts +1 -0
  148. package/dist/esm/types/sortingFns.d.ts +3 -2
  149. package/dist/esm/types/table/MRT_Table.d.ts +3 -3
  150. package/dist/esm/types/table/MRT_TableContainer.d.ts +3 -3
  151. package/dist/esm/types/table/MRT_TablePaper.d.ts +3 -3
  152. package/dist/esm/types/table/index.d.ts +4 -0
  153. package/dist/esm/types/toolbar/MRT_BottomToolbar.d.ts +2 -2
  154. package/dist/esm/types/toolbar/MRT_LinearProgressBar.d.ts +2 -2
  155. package/dist/esm/types/toolbar/MRT_TablePagination.d.ts +2 -2
  156. package/dist/esm/types/toolbar/MRT_ToolbarAlertBanner.d.ts +2 -2
  157. package/dist/esm/types/toolbar/MRT_ToolbarDropZone.d.ts +2 -2
  158. package/dist/esm/types/toolbar/MRT_ToolbarInternalButtons.d.ts +2 -2
  159. package/dist/esm/types/toolbar/MRT_TopToolbar.d.ts +2 -2
  160. package/dist/esm/types/toolbar/index.d.ts +7 -0
  161. package/dist/esm/types/types.d.ts +128 -91
  162. package/dist/esm/types/useMaterialReactTable.d.ts +2 -0
  163. package/dist/index.d.ts +626 -155
  164. package/locales/ar.d.ts +2 -0
  165. package/locales/ar.esm.d.ts +2 -0
  166. package/locales/ar.esm.js +93 -0
  167. package/locales/ar.esm.js.map +1 -0
  168. package/locales/ar.js +97 -0
  169. package/locales/ar.js.map +1 -0
  170. package/locales/bg.d.ts +2 -0
  171. package/locales/bg.esm.d.ts +2 -0
  172. package/locales/bg.esm.js +93 -0
  173. package/locales/bg.esm.js.map +1 -0
  174. package/locales/bg.js +97 -0
  175. package/locales/bg.js.map +1 -0
  176. package/locales/cs.esm.js +1 -2
  177. package/locales/cs.esm.js.map +1 -1
  178. package/locales/cs.js +1 -2
  179. package/locales/cs.js.map +1 -1
  180. package/locales/da.esm.js +0 -1
  181. package/locales/da.esm.js.map +1 -1
  182. package/locales/da.js +0 -1
  183. package/locales/da.js.map +1 -1
  184. package/locales/de.esm.js +0 -1
  185. package/locales/de.esm.js.map +1 -1
  186. package/locales/de.js +0 -1
  187. package/locales/de.js.map +1 -1
  188. package/locales/en.esm.js +1 -1
  189. package/locales/en.esm.js.map +1 -1
  190. package/locales/en.js +1 -1
  191. package/locales/en.js.map +1 -1
  192. package/locales/es.esm.js +0 -1
  193. package/locales/es.esm.js.map +1 -1
  194. package/locales/es.js +0 -1
  195. package/locales/es.js.map +1 -1
  196. package/locales/et.d.ts +2 -0
  197. package/locales/et.esm.d.ts +2 -0
  198. package/locales/et.esm.js +93 -0
  199. package/locales/et.esm.js.map +1 -0
  200. package/locales/et.js +97 -0
  201. package/locales/et.js.map +1 -0
  202. package/locales/fa.esm.js +0 -1
  203. package/locales/fa.esm.js.map +1 -1
  204. package/locales/fa.js +0 -1
  205. package/locales/fa.js.map +1 -1
  206. package/locales/fi.esm.js +0 -1
  207. package/locales/fi.esm.js.map +1 -1
  208. package/locales/fi.js +0 -1
  209. package/locales/fi.js.map +1 -1
  210. package/locales/fr.esm.js +0 -1
  211. package/locales/fr.esm.js.map +1 -1
  212. package/locales/fr.js +0 -1
  213. package/locales/fr.js.map +1 -1
  214. package/locales/hu.esm.js +0 -1
  215. package/locales/hu.esm.js.map +1 -1
  216. package/locales/hu.js +0 -1
  217. package/locales/hu.js.map +1 -1
  218. package/locales/id.esm.js +0 -1
  219. package/locales/id.esm.js.map +1 -1
  220. package/locales/id.js +0 -1
  221. package/locales/id.js.map +1 -1
  222. package/locales/it.esm.js +0 -1
  223. package/locales/it.esm.js.map +1 -1
  224. package/locales/it.js +0 -1
  225. package/locales/it.js.map +1 -1
  226. package/locales/ja.esm.js +0 -1
  227. package/locales/ja.esm.js.map +1 -1
  228. package/locales/ja.js +0 -1
  229. package/locales/ja.js.map +1 -1
  230. package/locales/ko.d.ts +2 -0
  231. package/locales/ko.esm.d.ts +2 -0
  232. package/locales/ko.esm.js +93 -0
  233. package/locales/ko.esm.js.map +1 -0
  234. package/locales/ko.js +97 -0
  235. package/locales/ko.js.map +1 -0
  236. package/locales/nl.esm.js +0 -1
  237. package/locales/nl.esm.js.map +1 -1
  238. package/locales/nl.js +0 -1
  239. package/locales/nl.js.map +1 -1
  240. package/locales/no.esm.js +0 -1
  241. package/locales/no.esm.js.map +1 -1
  242. package/locales/no.js +0 -1
  243. package/locales/no.js.map +1 -1
  244. package/locales/pl.esm.js +0 -1
  245. package/locales/pl.esm.js.map +1 -1
  246. package/locales/pl.js +0 -1
  247. package/locales/pl.js.map +1 -1
  248. package/locales/pt-BR.esm.js +0 -1
  249. package/locales/pt-BR.esm.js.map +1 -1
  250. package/locales/pt-BR.js +0 -1
  251. package/locales/pt-BR.js.map +1 -1
  252. package/locales/pt.esm.js +0 -1
  253. package/locales/pt.esm.js.map +1 -1
  254. package/locales/pt.js +0 -1
  255. package/locales/pt.js.map +1 -1
  256. package/locales/ro.esm.js +0 -1
  257. package/locales/ro.esm.js.map +1 -1
  258. package/locales/ro.js +0 -1
  259. package/locales/ro.js.map +1 -1
  260. package/locales/ru.esm.js +0 -1
  261. package/locales/ru.esm.js.map +1 -1
  262. package/locales/ru.js +0 -1
  263. package/locales/ru.js.map +1 -1
  264. package/locales/sk.esm.js +0 -1
  265. package/locales/sk.esm.js.map +1 -1
  266. package/locales/sk.js +0 -1
  267. package/locales/sk.js.map +1 -1
  268. package/locales/sr-Cyrl-RS.esm.js +0 -1
  269. package/locales/sr-Cyrl-RS.esm.js.map +1 -1
  270. package/locales/sr-Cyrl-RS.js +0 -1
  271. package/locales/sr-Cyrl-RS.js.map +1 -1
  272. package/locales/sr-Latn-RS.esm.js +0 -1
  273. package/locales/sr-Latn-RS.esm.js.map +1 -1
  274. package/locales/sr-Latn-RS.js +0 -1
  275. package/locales/sr-Latn-RS.js.map +1 -1
  276. package/locales/sv.esm.js +0 -1
  277. package/locales/sv.esm.js.map +1 -1
  278. package/locales/sv.js +0 -1
  279. package/locales/sv.js.map +1 -1
  280. package/package.json +18 -16
  281. package/src/MaterialReactTable.tsx +31 -168
  282. package/src/body/MRT_TableBody.tsx +184 -93
  283. package/src/body/MRT_TableBodyCell.tsx +55 -56
  284. package/src/body/MRT_TableBodyCellValue.tsx +7 -4
  285. package/src/body/MRT_TableBodyRow.tsx +111 -23
  286. package/src/body/MRT_TableBodyRowGrabHandle.tsx +15 -11
  287. package/src/body/MRT_TableBodyRowPinButton.tsx +46 -0
  288. package/src/body/MRT_TableDetailPanel.tsx +21 -27
  289. package/src/body/index.ts +7 -0
  290. package/src/buttons/MRT_ColumnPinningButtons.tsx +2 -4
  291. package/src/buttons/MRT_CopyButton.tsx +17 -23
  292. package/src/buttons/MRT_EditActionButtons.tsx +56 -25
  293. package/src/buttons/MRT_ExpandAllButton.tsx +10 -10
  294. package/src/buttons/MRT_ExpandButton.tsx +8 -9
  295. package/src/buttons/MRT_GrabHandleButton.tsx +4 -5
  296. package/src/buttons/MRT_RowPinButton.tsx +74 -0
  297. package/src/buttons/MRT_ShowHideColumnsButton.tsx +2 -5
  298. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +2 -3
  299. package/src/buttons/MRT_ToggleFiltersButton.tsx +2 -5
  300. package/src/buttons/{MRT_FullScreenToggleButton.tsx → MRT_ToggleFullScreenButton.tsx} +13 -6
  301. package/src/buttons/MRT_ToggleGlobalFilterButton.tsx +3 -5
  302. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +18 -11
  303. package/src/buttons/index.ts +13 -0
  304. package/src/column.utils.ts +107 -50
  305. package/src/filterFns.ts +14 -14
  306. package/src/footer/MRT_TableFooter.tsx +17 -11
  307. package/src/footer/MRT_TableFooterCell.tsx +14 -24
  308. package/src/footer/MRT_TableFooterRow.tsx +12 -13
  309. package/src/footer/index.ts +3 -0
  310. package/src/head/MRT_TableHead.tsx +15 -11
  311. package/src/head/MRT_TableHeadCell.tsx +16 -24
  312. package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +18 -24
  313. package/src/head/MRT_TableHeadCellFilterContainer.tsx +9 -4
  314. package/src/head/MRT_TableHeadCellFilterLabel.tsx +9 -4
  315. package/src/head/MRT_TableHeadCellGrabHandle.tsx +13 -20
  316. package/src/head/MRT_TableHeadCellResizeHandle.tsx +9 -4
  317. package/src/head/MRT_TableHeadCellSortLabel.tsx +8 -6
  318. package/src/head/MRT_TableHeadRow.tsx +12 -13
  319. package/src/head/index.ts +9 -0
  320. package/src/hooks/useMRT_DisplayColumns.tsx +155 -0
  321. package/src/hooks/useMRT_Effects.ts +77 -0
  322. package/src/hooks/useMRT_TableInstance.ts +297 -0
  323. package/src/hooks/useMRT_TableOptions.ts +173 -0
  324. package/src/index.ts +16 -0
  325. package/src/inputs/MRT_EditCellTextField.tsx +47 -41
  326. package/src/inputs/MRT_FilterCheckbox.tsx +19 -28
  327. package/src/inputs/MRT_FilterRangeFields.tsx +7 -4
  328. package/src/inputs/MRT_FilterRangeSlider.tsx +14 -32
  329. package/src/inputs/MRT_FilterTextField.tsx +18 -34
  330. package/src/inputs/MRT_GlobalFilterTextField.tsx +6 -8
  331. package/src/inputs/MRT_SelectCheckbox.tsx +39 -21
  332. package/src/inputs/index.ts +7 -0
  333. package/src/locales/ar.ts +94 -0
  334. package/src/locales/bg.ts +93 -0
  335. package/src/{_locales → locales}/cs.ts +1 -2
  336. package/src/{_locales → locales}/da.ts +0 -1
  337. package/src/{_locales → locales}/de.ts +0 -1
  338. package/src/{_locales → locales}/en.ts +1 -1
  339. package/src/{_locales → locales}/es.ts +0 -1
  340. package/src/locales/et.ts +94 -0
  341. package/src/{_locales → locales}/fa.ts +0 -1
  342. package/src/{_locales → locales}/fi.ts +0 -1
  343. package/src/{_locales → locales}/fr.ts +0 -1
  344. package/src/{_locales → locales}/hu.ts +0 -1
  345. package/src/{_locales → locales}/id.ts +0 -1
  346. package/src/{_locales → locales}/it.ts +0 -1
  347. package/src/{_locales → locales}/ja.ts +0 -1
  348. package/src/locales/ko.ts +93 -0
  349. package/src/{_locales → locales}/nl.ts +0 -1
  350. package/src/{_locales → locales}/no.ts +1 -1
  351. package/src/{_locales → locales}/pl.ts +0 -1
  352. package/src/{_locales → locales}/pt-BR.ts +0 -1
  353. package/src/{_locales → locales}/pt.ts +0 -1
  354. package/src/{_locales → locales}/ro.ts +0 -1
  355. package/src/{_locales → locales}/ru.ts +0 -1
  356. package/src/{_locales → locales}/sk.ts +0 -1
  357. package/src/{_locales → locales}/sr-Cyrl-RS.ts +0 -1
  358. package/src/{_locales → locales}/sr-Latn-RS.ts +0 -1
  359. package/src/{_locales → locales}/sv.ts +0 -1
  360. package/src/{_locales → locales}/tr.ts +0 -1
  361. package/src/{_locales → locales}/uk.ts +0 -1
  362. package/src/{_locales → locales}/vi.ts +0 -1
  363. package/src/{_locales → locales}/zh-Hans.ts +7 -8
  364. package/src/{_locales → locales}/zh-Hant.ts +1 -2
  365. package/src/menus/MRT_ColumnActionMenu.tsx +8 -8
  366. package/src/menus/MRT_FilterOptionMenu.tsx +4 -3
  367. package/src/menus/MRT_RowActionMenu.tsx +16 -17
  368. package/src/menus/MRT_ShowHideColumnsMenu.tsx +4 -6
  369. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +4 -4
  370. package/src/menus/index.ts +5 -0
  371. package/src/modals/MRT_EditRowModal.tsx +107 -0
  372. package/src/modals/index.ts +1 -0
  373. package/src/sortingFns.ts +6 -2
  374. package/src/table/MRT_Table.tsx +42 -40
  375. package/src/table/MRT_TableContainer.tsx +24 -12
  376. package/src/table/MRT_TablePaper.tsx +22 -17
  377. package/src/table/index.ts +4 -0
  378. package/src/toolbar/MRT_BottomToolbar.tsx +16 -22
  379. package/src/toolbar/MRT_LinearProgressBar.tsx +7 -6
  380. package/src/toolbar/MRT_TablePagination.tsx +7 -9
  381. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +10 -13
  382. package/src/toolbar/MRT_ToolbarDropZone.tsx +2 -2
  383. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +6 -8
  384. package/src/toolbar/MRT_TopToolbar.tsx +10 -16
  385. package/src/toolbar/index.ts +7 -0
  386. package/src/types.ts +803 -770
  387. package/src/useMaterialReactTable.ts +11 -0
  388. package/dist/cjs/types/body/MRT_EditRowModal.d.ts +0 -8
  389. package/dist/cjs/types/buttons/MRT_FullScreenToggleButton.d.ts +0 -7
  390. package/dist/cjs/types/table/MRT_TableRoot.d.ts +0 -1
  391. package/dist/esm/types/body/MRT_EditRowModal.d.ts +0 -8
  392. package/dist/esm/types/buttons/MRT_FullScreenToggleButton.d.ts +0 -7
  393. package/dist/esm/types/table/MRT_TableRoot.d.ts +0 -1
  394. package/locales/tr.d.ts +0 -2
  395. package/locales/tr.esm.d.ts +0 -2
  396. package/locales/tr.esm.js +0 -94
  397. package/locales/tr.esm.js.map +0 -1
  398. package/locales/tr.js +0 -98
  399. package/locales/tr.js.map +0 -1
  400. package/locales/uk.d.ts +0 -2
  401. package/locales/uk.esm.d.ts +0 -2
  402. package/locales/uk.esm.js +0 -94
  403. package/locales/uk.esm.js.map +0 -1
  404. package/locales/uk.js +0 -98
  405. package/locales/uk.js.map +0 -1
  406. package/locales/vi.d.ts +0 -2
  407. package/locales/vi.esm.d.ts +0 -2
  408. package/locales/vi.esm.js +0 -94
  409. package/locales/vi.esm.js.map +0 -1
  410. package/locales/vi.js +0 -98
  411. package/locales/vi.js.map +0 -1
  412. package/locales/zh-Hans.d.ts +0 -2
  413. package/locales/zh-Hans.esm.d.ts +0 -2
  414. package/locales/zh-Hans.esm.js +0 -94
  415. package/locales/zh-Hans.esm.js.map +0 -1
  416. package/locales/zh-Hans.js +0 -98
  417. package/locales/zh-Hans.js.map +0 -1
  418. package/locales/zh-Hant.d.ts +0 -2
  419. package/locales/zh-Hant.esm.d.ts +0 -2
  420. package/locales/zh-Hant.esm.js +0 -94
  421. package/locales/zh-Hant.esm.js.map +0 -1
  422. package/locales/zh-Hant.js +0 -98
  423. package/locales/zh-Hant.js.map +0 -1
  424. package/src/body/MRT_EditRowModal.tsx +0 -57
  425. package/src/index.tsx +0 -50
  426. package/src/table/MRT_TableRoot.tsx +0 -421
  427. /package/dist/cjs/types/{_locales → locales}/cs.d.ts +0 -0
  428. /package/dist/cjs/types/{_locales → locales}/da.d.ts +0 -0
  429. /package/dist/cjs/types/{_locales → locales}/de.d.ts +0 -0
  430. /package/dist/cjs/types/{_locales → locales}/en.d.ts +0 -0
  431. /package/dist/cjs/types/{_locales → locales}/es.d.ts +0 -0
  432. /package/dist/cjs/types/{_locales → locales}/fa.d.ts +0 -0
  433. /package/dist/cjs/types/{_locales → locales}/fi.d.ts +0 -0
  434. /package/dist/cjs/types/{_locales → locales}/fr.d.ts +0 -0
  435. /package/dist/cjs/types/{_locales → locales}/hu.d.ts +0 -0
  436. /package/dist/cjs/types/{_locales → locales}/id.d.ts +0 -0
  437. /package/dist/cjs/types/{_locales → locales}/it.d.ts +0 -0
  438. /package/dist/cjs/types/{_locales → locales}/ja.d.ts +0 -0
  439. /package/dist/cjs/types/{_locales → locales}/nl.d.ts +0 -0
  440. /package/dist/cjs/types/{_locales → locales}/no.d.ts +0 -0
  441. /package/dist/cjs/types/{_locales → locales}/pl.d.ts +0 -0
  442. /package/dist/cjs/types/{_locales → locales}/pt-BR.d.ts +0 -0
  443. /package/dist/cjs/types/{_locales → locales}/pt.d.ts +0 -0
  444. /package/dist/cjs/types/{_locales → locales}/ro.d.ts +0 -0
  445. /package/dist/cjs/types/{_locales → locales}/ru.d.ts +0 -0
  446. /package/dist/cjs/types/{_locales → locales}/sk.d.ts +0 -0
  447. /package/dist/cjs/types/{_locales → locales}/sr-Cyrl-RS.d.ts +0 -0
  448. /package/dist/cjs/types/{_locales → locales}/sr-Latn-RS.d.ts +0 -0
  449. /package/dist/cjs/types/{_locales → locales}/sv.d.ts +0 -0
  450. /package/dist/cjs/types/{_locales → locales}/tr.d.ts +0 -0
  451. /package/dist/cjs/types/{_locales → locales}/uk.d.ts +0 -0
  452. /package/dist/cjs/types/{_locales → locales}/vi.d.ts +0 -0
  453. /package/dist/cjs/types/{_locales → locales}/zh-Hans.d.ts +0 -0
  454. /package/dist/cjs/types/{_locales → locales}/zh-Hant.d.ts +0 -0
  455. /package/dist/esm/types/{_locales → locales}/cs.d.ts +0 -0
  456. /package/dist/esm/types/{_locales → locales}/da.d.ts +0 -0
  457. /package/dist/esm/types/{_locales → locales}/de.d.ts +0 -0
  458. /package/dist/esm/types/{_locales → locales}/en.d.ts +0 -0
  459. /package/dist/esm/types/{_locales → locales}/es.d.ts +0 -0
  460. /package/dist/esm/types/{_locales → locales}/fa.d.ts +0 -0
  461. /package/dist/esm/types/{_locales → locales}/fi.d.ts +0 -0
  462. /package/dist/esm/types/{_locales → locales}/fr.d.ts +0 -0
  463. /package/dist/esm/types/{_locales → locales}/hu.d.ts +0 -0
  464. /package/dist/esm/types/{_locales → locales}/id.d.ts +0 -0
  465. /package/dist/esm/types/{_locales → locales}/it.d.ts +0 -0
  466. /package/dist/esm/types/{_locales → locales}/ja.d.ts +0 -0
  467. /package/dist/esm/types/{_locales → locales}/nl.d.ts +0 -0
  468. /package/dist/esm/types/{_locales → locales}/no.d.ts +0 -0
  469. /package/dist/esm/types/{_locales → locales}/pl.d.ts +0 -0
  470. /package/dist/esm/types/{_locales → locales}/pt-BR.d.ts +0 -0
  471. /package/dist/esm/types/{_locales → locales}/pt.d.ts +0 -0
  472. /package/dist/esm/types/{_locales → locales}/ro.d.ts +0 -0
  473. /package/dist/esm/types/{_locales → locales}/ru.d.ts +0 -0
  474. /package/dist/esm/types/{_locales → locales}/sk.d.ts +0 -0
  475. /package/dist/esm/types/{_locales → locales}/sr-Cyrl-RS.d.ts +0 -0
  476. /package/dist/esm/types/{_locales → locales}/sr-Latn-RS.d.ts +0 -0
  477. /package/dist/esm/types/{_locales → locales}/sv.d.ts +0 -0
  478. /package/dist/esm/types/{_locales → locales}/tr.d.ts +0 -0
  479. /package/dist/esm/types/{_locales → locales}/uk.d.ts +0 -0
  480. /package/dist/esm/types/{_locales → locales}/vi.d.ts +0 -0
  481. /package/dist/esm/types/{_locales → locales}/zh-Hans.d.ts +0 -0
  482. /package/dist/esm/types/{_locales → locales}/zh-Hant.d.ts +0 -0
@@ -4,17 +4,17 @@ import Tooltip from '@mui/material/Tooltip';
4
4
  import { type MRT_Header, type MRT_TableInstance } from '../types';
5
5
  import { type TableCellProps } from '@mui/material/TableCell';
6
6
 
7
- interface Props {
8
- header: MRT_Header;
9
- table: MRT_TableInstance;
7
+ interface Props<TData extends Record<string, any>> {
8
+ header: MRT_Header<TData>;
9
+ table: MRT_TableInstance<TData>;
10
10
  tableCellProps?: TableCellProps;
11
11
  }
12
12
 
13
- export const MRT_TableHeadCellSortLabel = ({
13
+ export const MRT_TableHeadCellSortLabel = <TData extends Record<string, any>>({
14
14
  header,
15
15
  table,
16
16
  tableCellProps,
17
- }: Props) => {
17
+ }: Props<TData>) => {
18
18
  const {
19
19
  getState,
20
20
  options: {
@@ -30,7 +30,9 @@ export const MRT_TableHeadCellSortLabel = ({
30
30
  ? column.getIsSorted() === 'desc'
31
31
  ? localization.sortedByColumnDesc.replace('{column}', columnDef.header)
32
32
  : localization.sortedByColumnAsc.replace('{column}', columnDef.header)
33
- : localization.unsorted;
33
+ : column.getNextSortingOrder() === 'desc'
34
+ ? localization.sortByColumnDesc.replace('{column}', columnDef.header)
35
+ : localization.sortByColumnAsc.replace('{column}', columnDef.header);
34
36
 
35
37
  return (
36
38
  <Tooltip arrow placement="top" title={sortTooltip}>
@@ -7,30 +7,31 @@ import {
7
7
  type MRT_HeaderGroup,
8
8
  type MRT_TableInstance,
9
9
  } from '../types';
10
+ import { parseFromValuesOrFunc } from '../column.utils';
10
11
 
11
- interface Props {
12
- headerGroup: MRT_HeaderGroup;
13
- table: MRT_TableInstance;
12
+ interface Props<TData extends Record<string, any>> {
13
+ headerGroup: MRT_HeaderGroup<TData>;
14
+ table: MRT_TableInstance<TData>;
14
15
  virtualColumns?: VirtualItem[];
15
16
  virtualPaddingLeft?: number;
16
17
  virtualPaddingRight?: number;
17
18
  }
18
19
 
19
- export const MRT_TableHeadRow = ({
20
+ export const MRT_TableHeadRow = <TData extends Record<string, any>>({
20
21
  headerGroup,
21
22
  table,
22
23
  virtualColumns,
23
24
  virtualPaddingLeft,
24
25
  virtualPaddingRight,
25
- }: Props) => {
26
+ }: Props<TData>) => {
26
27
  const {
27
28
  options: { layoutMode, muiTableHeadRowProps },
28
29
  } = table;
29
30
 
30
- const tableRowProps =
31
- muiTableHeadRowProps instanceof Function
32
- ? muiTableHeadRowProps({ headerGroup, table })
33
- : muiTableHeadRowProps;
31
+ const tableRowProps = parseFromValuesOrFunc(muiTableHeadRowProps, {
32
+ headerGroup,
33
+ table,
34
+ });
34
35
 
35
36
  return (
36
37
  <TableRow
@@ -40,9 +41,7 @@ export const MRT_TableHeadRow = ({
40
41
  boxShadow: `4px 0 8px ${alpha(theme.palette.common.black, 0.1)}`,
41
42
  display: layoutMode === 'grid' ? 'flex' : 'table-row',
42
43
  top: 0,
43
- ...(tableRowProps?.sx instanceof Function
44
- ? tableRowProps?.sx(theme)
45
- : (tableRowProps?.sx as any)),
44
+ ...(parseFromValuesOrFunc(tableRowProps?.sx, theme) as any),
46
45
  })}
47
46
  >
48
47
  {virtualPaddingLeft ? (
@@ -51,7 +50,7 @@ export const MRT_TableHeadRow = ({
51
50
  {(virtualColumns ?? headerGroup.headers).map((headerOrVirtualHeader) => {
52
51
  const header = virtualColumns
53
52
  ? headerGroup.headers[headerOrVirtualHeader.index]
54
- : (headerOrVirtualHeader as MRT_Header);
53
+ : (headerOrVirtualHeader as MRT_Header<TData>);
55
54
 
56
55
  return (
57
56
  <MRT_TableHeadCell header={header} key={header.id} table={table} />
@@ -0,0 +1,9 @@
1
+ export * from './MRT_TableHead';
2
+ export * from './MRT_TableHeadCell';
3
+ export * from './MRT_TableHeadCellColumnActionsButton';
4
+ export * from './MRT_TableHeadCellFilterContainer';
5
+ export * from './MRT_TableHeadCellFilterLabel';
6
+ export * from './MRT_TableHeadCellGrabHandle';
7
+ export * from './MRT_TableHeadCellResizeHandle';
8
+ export * from './MRT_TableHeadCellSortLabel';
9
+ export * from './MRT_TableHeadRow';
@@ -0,0 +1,155 @@
1
+ import { type RefObject, useMemo } from 'react';
2
+ import { showExpandColumn } from '../column.utils';
3
+ import { MRT_TableBodyRowPinButton } from '../body/MRT_TableBodyRowPinButton';
4
+ import { MRT_TableBodyRowGrabHandle } from '../body';
5
+ import { MRT_ExpandAllButton } from '../buttons/MRT_ExpandAllButton';
6
+ import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
7
+ import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton';
8
+ import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
9
+ import {
10
+ type MRT_ColumnDef,
11
+ type MRT_ColumnOrderState,
12
+ type MRT_GroupingState,
13
+ type MRT_DefinedTableOptions,
14
+ type MRT_Row,
15
+ } from '../types';
16
+
17
+ interface Params<TData extends Record<string, any>> {
18
+ creatingRow: MRT_Row<TData> | null;
19
+ columnOrder: MRT_ColumnOrderState;
20
+ grouping: MRT_GroupingState;
21
+ tableOptions: MRT_DefinedTableOptions<TData>;
22
+ }
23
+
24
+ export const useMRT_DisplayColumns = <TData extends Record<string, any>>({
25
+ creatingRow,
26
+ columnOrder,
27
+ grouping,
28
+ tableOptions,
29
+ }: Params<TData>) => {
30
+ return useMemo(
31
+ () =>
32
+ (
33
+ [
34
+ (tableOptions.state?.columnOrder ?? columnOrder).includes(
35
+ 'mrt-row-pin',
36
+ ) && {
37
+ Cell: ({ row, table }) => (
38
+ <MRT_TableBodyRowPinButton row={row} table={table} />
39
+ ),
40
+ header: tableOptions.localization.pin,
41
+ size: 60,
42
+ ...tableOptions.defaultDisplayColumn,
43
+ ...tableOptions.displayColumnDefOptions?.['mrt-row-pin'],
44
+ id: 'mrt-row-pin',
45
+ },
46
+ (tableOptions.state?.columnOrder ?? columnOrder).includes(
47
+ 'mrt-row-drag',
48
+ ) && {
49
+ Cell: ({ row, rowRef, table }) => (
50
+ <MRT_TableBodyRowGrabHandle
51
+ row={row}
52
+ rowRef={rowRef as RefObject<HTMLTableRowElement>}
53
+ table={table}
54
+ />
55
+ ),
56
+ header: tableOptions.localization.move,
57
+ size: 60,
58
+ ...tableOptions.defaultDisplayColumn,
59
+ ...tableOptions.displayColumnDefOptions?.['mrt-row-drag'],
60
+ id: 'mrt-row-drag',
61
+ },
62
+ ((tableOptions.state?.columnOrder ?? columnOrder).includes(
63
+ 'mrt-row-actions',
64
+ ) ||
65
+ (creatingRow && tableOptions.createDisplayMode === 'row')) && {
66
+ Cell: ({ cell, row, table }) => (
67
+ <MRT_ToggleRowActionMenuButton
68
+ cell={cell}
69
+ row={row}
70
+ table={table}
71
+ />
72
+ ),
73
+ header: tableOptions.localization.actions,
74
+ size: 70,
75
+ ...tableOptions.defaultDisplayColumn,
76
+ ...tableOptions.displayColumnDefOptions?.['mrt-row-actions'],
77
+ id: 'mrt-row-actions',
78
+ },
79
+ (tableOptions.state?.columnOrder ?? columnOrder).includes(
80
+ 'mrt-row-expand',
81
+ ) &&
82
+ showExpandColumn(
83
+ tableOptions,
84
+ tableOptions.state?.grouping ?? grouping,
85
+ ) && {
86
+ Cell: ({ row, table }) => (
87
+ <MRT_ExpandButton row={row} table={table} />
88
+ ),
89
+ Header: tableOptions.enableExpandAll
90
+ ? ({ table }) => <MRT_ExpandAllButton table={table} />
91
+ : null,
92
+ header: tableOptions.localization.expand,
93
+ size: 60,
94
+ ...tableOptions.defaultDisplayColumn,
95
+ ...tableOptions.displayColumnDefOptions?.['mrt-row-expand'],
96
+ id: 'mrt-row-expand',
97
+ },
98
+ (tableOptions.state?.columnOrder ?? columnOrder).includes(
99
+ 'mrt-row-select',
100
+ ) && {
101
+ Cell: ({ row, table }) => (
102
+ <MRT_SelectCheckbox row={row} table={table} />
103
+ ),
104
+ Header:
105
+ tableOptions.enableSelectAll &&
106
+ tableOptions.enableMultiRowSelection
107
+ ? ({ table }) => <MRT_SelectCheckbox selectAll table={table} />
108
+ : null,
109
+ header: tableOptions.localization.select,
110
+ size: 60,
111
+ ...tableOptions.defaultDisplayColumn,
112
+ ...tableOptions.displayColumnDefOptions?.['mrt-row-select'],
113
+ id: 'mrt-row-select',
114
+ },
115
+ (tableOptions.state?.columnOrder ?? columnOrder).includes(
116
+ 'mrt-row-numbers',
117
+ ) && {
118
+ Cell: ({ row }) => row.index + 1,
119
+ Header: () => tableOptions.localization.rowNumber,
120
+ header: tableOptions.localization.rowNumbers,
121
+ size: 60,
122
+ ...tableOptions.defaultDisplayColumn,
123
+ ...tableOptions.displayColumnDefOptions?.['mrt-row-numbers'],
124
+ id: 'mrt-row-numbers',
125
+ },
126
+ ] as MRT_ColumnDef<TData>[]
127
+ ).filter(Boolean),
128
+ [
129
+ columnOrder,
130
+ grouping,
131
+ tableOptions.displayColumnDefOptions,
132
+ tableOptions.editDisplayMode,
133
+ tableOptions.enableColumnDragging,
134
+ tableOptions.enableColumnFilterModes,
135
+ tableOptions.enableColumnOrdering,
136
+ tableOptions.enableEditing,
137
+ tableOptions.enableExpandAll,
138
+ tableOptions.enableExpanding,
139
+ tableOptions.enableGrouping,
140
+ tableOptions.enableRowActions,
141
+ tableOptions.enableRowDragging,
142
+ tableOptions.enableRowNumbers,
143
+ tableOptions.enableRowOrdering,
144
+ tableOptions.enableRowSelection,
145
+ tableOptions.enableSelectAll,
146
+ tableOptions.localization,
147
+ tableOptions.positionActionsColumn,
148
+ tableOptions.renderDetailPanel,
149
+ tableOptions.renderRowActionMenuItems,
150
+ tableOptions.renderRowActions,
151
+ tableOptions.state?.columnOrder,
152
+ tableOptions.state?.grouping,
153
+ ],
154
+ );
155
+ };
@@ -0,0 +1,77 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { getCanRankRows } from '../column.utils';
3
+ import { type MRT_SortingState, type MRT_TableInstance } from '../types';
4
+
5
+ export const useMRT_Effects = <TData extends Record<string, any> = {}>(
6
+ table: MRT_TableInstance<TData>,
7
+ ) => {
8
+ const {
9
+ getState,
10
+ options: { enablePagination, rowCount },
11
+ } = table;
12
+ const {
13
+ globalFilter,
14
+ isFullScreen,
15
+ pagination,
16
+ sorting,
17
+ isLoading,
18
+ showSkeletons,
19
+ } = getState();
20
+
21
+ const isMounted = useRef(false);
22
+ const initialBodyHeight = useRef<string>();
23
+ const previousTop = useRef<number>();
24
+
25
+ useEffect(() => {
26
+ if (typeof window !== 'undefined') {
27
+ initialBodyHeight.current = document.body.style.height;
28
+ }
29
+ }, []);
30
+
31
+ useEffect(() => {
32
+ if (isMounted && typeof window !== 'undefined') {
33
+ if (isFullScreen) {
34
+ previousTop.current = document.body.getBoundingClientRect().top; //save scroll position
35
+ document.body.style.height = '100vh'; //hide page scrollbars when table is in full screen mode
36
+ } else {
37
+ document.body.style.height = initialBodyHeight.current as string;
38
+ if (!previousTop.current) return;
39
+ //restore scroll position
40
+ window.scrollTo({
41
+ top: -1 * (previousTop.current as number),
42
+ behavior: 'instant',
43
+ });
44
+ }
45
+ }
46
+ isMounted.current = true;
47
+ }, [isFullScreen]);
48
+
49
+ //if page index is out of bounds, set it to the last page
50
+ useEffect(() => {
51
+ if (!enablePagination || isLoading || showSkeletons) return;
52
+ const { pageIndex, pageSize } = pagination;
53
+ const totalRowCount =
54
+ rowCount ?? table.getPrePaginationRowModel().rows.length;
55
+ const firstVisibleRowIndex = pageIndex * pageSize;
56
+ if (firstVisibleRowIndex > totalRowCount) {
57
+ table.setPageIndex(Math.floor(totalRowCount / pageSize));
58
+ }
59
+ }, [rowCount, table.getPrePaginationRowModel().rows.length]);
60
+
61
+ //turn off sort when global filter is looking for ranked results
62
+ const appliedSort = useRef<MRT_SortingState>(sorting);
63
+ useEffect(() => {
64
+ if (sorting.length) {
65
+ appliedSort.current = sorting;
66
+ }
67
+ }, [sorting]);
68
+
69
+ useEffect(() => {
70
+ if (!getCanRankRows(table)) return;
71
+ if (globalFilter) {
72
+ table.setSorting([]);
73
+ } else {
74
+ table.setSorting(() => appliedSort.current || []);
75
+ }
76
+ }, [globalFilter]);
77
+ };
@@ -0,0 +1,297 @@
1
+ import { useMemo, useRef, useState } from 'react';
2
+ import {
3
+ getCoreRowModel,
4
+ getExpandedRowModel,
5
+ getFacetedMinMaxValues,
6
+ getFacetedRowModel,
7
+ getFacetedUniqueValues,
8
+ getFilteredRowModel,
9
+ getGroupedRowModel,
10
+ getPaginationRowModel,
11
+ getSortedRowModel,
12
+ useReactTable,
13
+ } from '@tanstack/react-table';
14
+ import {
15
+ createRow,
16
+ getAllLeafColumnDefs,
17
+ getColumnId,
18
+ getDefaultColumnFilterFn,
19
+ getDefaultColumnOrderIds,
20
+ prepareColumns,
21
+ } from '../column.utils';
22
+ import { useMRT_DisplayColumns } from './useMRT_DisplayColumns';
23
+ import { useMRT_Effects } from './useMRT_Effects';
24
+ import {
25
+ type MRT_Cell,
26
+ type MRT_Column,
27
+ type MRT_ColumnDef,
28
+ type MRT_ColumnOrderState,
29
+ type MRT_DefinedTableOptions,
30
+ type MRT_DensityState,
31
+ type MRT_ColumnFilterFnsState,
32
+ type MRT_FilterOption,
33
+ type MRT_GroupingState,
34
+ type MRT_Row,
35
+ type MRT_TableInstance,
36
+ type MRT_TableState,
37
+ type MRT_Updater,
38
+ } from '../types';
39
+
40
+ export const useMRT_TableInstance: <TData extends Record<string, any>>(
41
+ tableOptions: MRT_DefinedTableOptions<TData>,
42
+ ) => MRT_TableInstance<TData> = <TData extends Record<string, any>>(
43
+ tableOptions: MRT_DefinedTableOptions<TData>,
44
+ ) => {
45
+ const bottomToolbarRef = useRef<HTMLDivElement>(null);
46
+ const editInputRefs = useRef<Record<string, HTMLInputElement>>({});
47
+ const filterInputRefs = useRef<Record<string, HTMLInputElement>>({});
48
+ const searchInputRef = useRef<HTMLInputElement>(null);
49
+ const tableContainerRef = useRef<HTMLDivElement>(null);
50
+ const tableHeadCellRefs = useRef<Record<string, HTMLTableCellElement>>({});
51
+ const tablePaperRef = useRef<HTMLDivElement>(null);
52
+ const topToolbarRef = useRef<HTMLDivElement>(null);
53
+ const tableHeadRef = useRef<HTMLTableSectionElement>(null);
54
+ const tableFooterRef = useRef<HTMLTableSectionElement>(null);
55
+
56
+ const initialState: Partial<MRT_TableState<TData>> = useMemo(() => {
57
+ const initState = tableOptions.initialState ?? {};
58
+ initState.columnOrder =
59
+ initState.columnOrder ?? getDefaultColumnOrderIds(tableOptions);
60
+ initState.globalFilterFn = tableOptions.globalFilterFn ?? 'fuzzy';
61
+ return initState;
62
+ }, []);
63
+
64
+ const [creatingRow, _setCreatingRow] = useState<MRT_Row<TData> | null>(
65
+ initialState.creatingRow ?? null,
66
+ );
67
+ const [columnFilterFns, setColumnFilterFns] =
68
+ useState<MRT_ColumnFilterFnsState>(() =>
69
+ Object.assign(
70
+ {},
71
+ ...getAllLeafColumnDefs(
72
+ tableOptions.columns as MRT_ColumnDef<TData>[],
73
+ ).map((col) => ({
74
+ [getColumnId(col)]:
75
+ col.filterFn instanceof Function
76
+ ? col.filterFn.name ?? 'custom'
77
+ : col.filterFn ??
78
+ initialState?.columnFilterFns?.[getColumnId(col)] ??
79
+ getDefaultColumnFilterFn(col),
80
+ })),
81
+ ),
82
+ );
83
+ const [columnOrder, setColumnOrder] = useState<MRT_ColumnOrderState>(
84
+ initialState.columnOrder ?? [],
85
+ );
86
+ const [density, setDensity] = useState<MRT_DensityState>(
87
+ initialState?.density ?? 'comfortable',
88
+ );
89
+ const [draggingColumn, setDraggingColumn] =
90
+ useState<MRT_Column<TData> | null>(initialState.draggingColumn ?? null);
91
+ const [draggingRow, setDraggingRow] = useState<MRT_Row<TData> | null>(
92
+ initialState.draggingRow ?? null,
93
+ );
94
+ const [editingCell, setEditingCell] = useState<MRT_Cell<TData> | null>(
95
+ initialState.editingCell ?? null,
96
+ );
97
+ const [editingRow, setEditingRow] = useState<MRT_Row<TData> | null>(
98
+ initialState.editingRow ?? null,
99
+ );
100
+ const [globalFilterFn, setGlobalFilterFn] = useState<MRT_FilterOption>(
101
+ initialState.globalFilterFn ?? 'fuzzy',
102
+ );
103
+ const [grouping, setGrouping] = useState<MRT_GroupingState>(
104
+ initialState.grouping ?? [],
105
+ );
106
+ const [hoveredColumn, setHoveredColumn] = useState<
107
+ MRT_Column<TData> | { id: string } | null
108
+ >(initialState.hoveredColumn ?? null);
109
+ const [hoveredRow, setHoveredRow] = useState<
110
+ MRT_Row<TData> | { id: string } | null
111
+ >(initialState.hoveredRow ?? null);
112
+ const [isFullScreen, setIsFullScreen] = useState<boolean>(
113
+ initialState?.isFullScreen ?? false,
114
+ );
115
+ const [showAlertBanner, setShowAlertBanner] = useState<boolean>(
116
+ tableOptions.initialState?.showAlertBanner ?? false,
117
+ );
118
+ const [showColumnFilters, setShowColumnFilters] = useState<boolean>(
119
+ initialState?.showColumnFilters ?? false,
120
+ );
121
+ const [showGlobalFilter, setShowGlobalFilter] = useState<boolean>(
122
+ initialState?.showGlobalFilter ?? false,
123
+ );
124
+ const [showToolbarDropZone, setShowToolbarDropZone] = useState<boolean>(
125
+ initialState?.showToolbarDropZone ?? false,
126
+ );
127
+
128
+ const displayColumns = useMRT_DisplayColumns({
129
+ columnOrder,
130
+ creatingRow,
131
+ grouping,
132
+ tableOptions,
133
+ });
134
+
135
+ const columnDefs = useMemo(
136
+ () =>
137
+ prepareColumns({
138
+ aggregationFns: tableOptions.aggregationFns as any,
139
+ columnDefs: [...displayColumns, ...tableOptions.columns],
140
+ columnFilterFns: tableOptions.state?.columnFilterFns ?? columnFilterFns,
141
+ defaultDisplayColumn: tableOptions.defaultDisplayColumn ?? {},
142
+ filterFns: tableOptions.filterFns as any,
143
+ sortingFns: tableOptions.sortingFns as any,
144
+ }),
145
+ [
146
+ columnFilterFns,
147
+ displayColumns,
148
+ tableOptions.columns,
149
+ tableOptions.state?.columnFilterFns,
150
+ ],
151
+ );
152
+
153
+ const data: TData[] = useMemo(
154
+ () =>
155
+ (tableOptions.state?.isLoading || tableOptions.state?.showSkeletons) &&
156
+ !tableOptions.data.length
157
+ ? [
158
+ ...Array(
159
+ tableOptions.state?.pagination?.pageSize ||
160
+ initialState?.pagination?.pageSize ||
161
+ 10,
162
+ ).fill(null),
163
+ ].map(() =>
164
+ Object.assign(
165
+ {},
166
+ ...getAllLeafColumnDefs(tableOptions.columns).map((col) => ({
167
+ [getColumnId(col)]: null,
168
+ })),
169
+ ),
170
+ )
171
+ : tableOptions.data,
172
+ [
173
+ tableOptions.data,
174
+ tableOptions.state?.isLoading,
175
+ tableOptions.state?.showSkeletons,
176
+ ],
177
+ );
178
+
179
+ //@ts-ignore
180
+ const table = useReactTable({
181
+ getCoreRowModel: getCoreRowModel(),
182
+ getExpandedRowModel:
183
+ tableOptions.enableExpanding || tableOptions.enableGrouping
184
+ ? getExpandedRowModel()
185
+ : undefined,
186
+ getFacetedMinMaxValues: tableOptions.enableFacetedValues
187
+ ? getFacetedMinMaxValues()
188
+ : undefined,
189
+ getFacetedRowModel: tableOptions.enableFacetedValues
190
+ ? getFacetedRowModel()
191
+ : undefined,
192
+ getFacetedUniqueValues: tableOptions.enableFacetedValues
193
+ ? getFacetedUniqueValues()
194
+ : undefined,
195
+ getFilteredRowModel:
196
+ tableOptions.enableColumnFilters ||
197
+ tableOptions.enableGlobalFilter ||
198
+ tableOptions.enableFilters
199
+ ? getFilteredRowModel()
200
+ : undefined,
201
+ getGroupedRowModel: tableOptions.enableGrouping
202
+ ? getGroupedRowModel()
203
+ : undefined,
204
+ getPaginationRowModel: tableOptions.enablePagination
205
+ ? getPaginationRowModel()
206
+ : undefined,
207
+ getSortedRowModel: tableOptions.enableSorting
208
+ ? getSortedRowModel()
209
+ : undefined,
210
+ onColumnOrderChange: setColumnOrder,
211
+ onGroupingChange: setGrouping,
212
+ getSubRows: (row) => row?.subRows,
213
+ ...tableOptions,
214
+ //@ts-ignore
215
+ columns: columnDefs,
216
+ data,
217
+ globalFilterFn: tableOptions.filterFns?.[globalFilterFn ?? 'fuzzy'],
218
+ initialState,
219
+ state: {
220
+ creatingRow,
221
+ columnFilterFns,
222
+ columnOrder,
223
+ density,
224
+ draggingColumn,
225
+ draggingRow,
226
+ editingCell,
227
+ editingRow,
228
+ globalFilterFn,
229
+ grouping,
230
+ hoveredColumn,
231
+ hoveredRow,
232
+ isFullScreen,
233
+ showAlertBanner,
234
+ showColumnFilters,
235
+ showGlobalFilter,
236
+ showToolbarDropZone,
237
+ ...tableOptions.state,
238
+ },
239
+ }) as MRT_TableInstance<TData>;
240
+
241
+ // @ts-ignore
242
+ table.refs = {
243
+ // @ts-ignore
244
+ bottomToolbarRef,
245
+ editInputRefs,
246
+ filterInputRefs,
247
+ // @ts-ignore
248
+ searchInputRef,
249
+ // @ts-ignore
250
+ tableContainerRef,
251
+ tableHeadCellRefs,
252
+ // @ts-ignore
253
+ tablePaperRef,
254
+ // @ts-ignore
255
+ topToolbarRef,
256
+ // @ts-ignore
257
+ tableFooterRef,
258
+ // @ts-ignore
259
+ tableHeadRef,
260
+ };
261
+
262
+ const setCreatingRow = (row: MRT_Updater<MRT_Row<TData> | null | true>) => {
263
+ if (row === true) {
264
+ table.setCreatingRow(createRow(table));
265
+ } else {
266
+ _setCreatingRow(row as MRT_Row<TData> | null);
267
+ }
268
+ };
269
+
270
+ table.setCreatingRow = setCreatingRow;
271
+ table.setColumnFilterFns =
272
+ tableOptions.onColumnFilterFnsChange ?? setColumnFilterFns;
273
+ table.setDensity = tableOptions.onDensityChange ?? setDensity;
274
+ table.setDraggingColumn =
275
+ tableOptions.onDraggingColumnChange ?? setDraggingColumn;
276
+ table.setDraggingRow = tableOptions.onDraggingRowChange ?? setDraggingRow;
277
+ table.setEditingCell = tableOptions.onEditingCellChange ?? setEditingCell;
278
+ table.setEditingRow = tableOptions.onEditingRowChange ?? setEditingRow;
279
+ table.setGlobalFilterFn =
280
+ tableOptions.onGlobalFilterFnChange ?? setGlobalFilterFn;
281
+ table.setHoveredColumn =
282
+ tableOptions.onHoveredColumnChange ?? setHoveredColumn;
283
+ table.setHoveredRow = tableOptions.onHoveredRowChange ?? setHoveredRow;
284
+ table.setIsFullScreen = tableOptions.onIsFullScreenChange ?? setIsFullScreen;
285
+ table.setShowAlertBanner =
286
+ tableOptions.onShowAlertBannerChange ?? setShowAlertBanner;
287
+ table.setShowColumnFilters =
288
+ tableOptions.onShowColumnFiltersChange ?? setShowColumnFilters;
289
+ table.setShowGlobalFilter =
290
+ tableOptions.onShowGlobalFilterChange ?? setShowGlobalFilter;
291
+ table.setShowToolbarDropZone =
292
+ tableOptions.onShowToolbarDropZoneChange ?? setShowToolbarDropZone;
293
+
294
+ useMRT_Effects(table);
295
+
296
+ return table;
297
+ };