material-react-table 1.15.0 → 2.0.0-alpha.0

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