@databiosphere/findable-ui 18.0.0 → 20.0.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 (536) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +22 -0
  3. package/lib/components/Authentication/components/SessionController/components/GoogleSessionController/SessionController.d.ts +2 -0
  4. package/lib/components/Authentication/components/SessionController/components/GoogleSessionController/SessionController.js +29 -0
  5. package/lib/components/Authentication/components/SessionController/components/GoogleSessionController/types.d.ts +6 -0
  6. package/lib/components/Authentication/components/SessionController/components/NextSessionController/SessionController.d.ts +2 -0
  7. package/lib/components/Authentication/components/SessionController/components/NextSessionController/SessionController.js +17 -0
  8. package/lib/components/Authentication/components/SessionController/components/NextSessionController/constants.d.ts +5 -0
  9. package/lib/components/Authentication/components/SessionController/components/NextSessionController/constants.js +12 -0
  10. package/lib/components/Authentication/components/SessionController/components/NextSessionController/types.d.ts +4 -0
  11. package/lib/components/Authentication/components/SessionController/components/NextSessionController/types.js +1 -0
  12. package/lib/components/Authentication/components/SessionController/components/NextSessionController/utils.d.ts +15 -0
  13. package/lib/components/Authentication/components/SessionController/components/NextSessionController/utils.js +53 -0
  14. package/lib/components/ComponentCreator/ComponentCreator.js +2 -3
  15. package/lib/components/Detail/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.js +2 -0
  16. package/lib/components/Detail/components/Table/components/TableRows/tableRows.js +1 -15
  17. package/lib/components/Export/components/ExportForm/components/ExportFileSummaryForm/exportFileSummaryForm.js +9 -10
  18. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/FormStep/components/AcceptTerraTOS/acceptTerraTOS.js +2 -2
  19. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/NIHAccountExpiryWarning/nihAccountExpiryWarning.js +1 -1
  20. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/terraSetUpForm.js +8 -3
  21. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.d.ts +2 -1
  22. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.js +17 -14
  23. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.d.ts +3 -4
  24. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.js +15 -24
  25. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.d.ts +1 -1
  26. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.js +2 -2
  27. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.d.ts +2 -0
  28. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.js +14 -0
  29. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/Button/button.styles.js +3 -2
  30. package/lib/components/Layout/components/Header/header.js +1 -1
  31. package/lib/components/Links/components/Link/components/ExploreViewLink/exploreViewLink.js +23 -12
  32. package/lib/components/Login/components/Button/button.d.ts +2 -0
  33. package/lib/components/Login/components/Button/button.js +6 -0
  34. package/lib/components/Login/components/Button/button.styles.d.ts +5 -0
  35. package/lib/components/Login/components/Button/button.styles.js +11 -0
  36. package/lib/components/Login/components/Button/constants.d.ts +2 -0
  37. package/lib/components/Login/components/Button/constants.js +6 -0
  38. package/lib/components/Login/components/Button/types.d.ts +3 -0
  39. package/lib/components/Login/components/Button/types.js +1 -0
  40. package/lib/components/Login/login.d.ts +2 -9
  41. package/lib/components/Login/login.js +9 -10
  42. package/lib/components/Login/types.d.ts +10 -0
  43. package/lib/components/Login/types.js +1 -0
  44. package/lib/components/Table/common/columnDef.js +1 -0
  45. package/lib/components/Table/common/gridTable.styles.js +5 -11
  46. package/lib/components/Table/common/utils.d.ts +3 -29
  47. package/lib/components/Table/common/utils.js +25 -60
  48. package/lib/components/Table/components/TableBody/hooks/virtualizer/constants.d.ts +3 -0
  49. package/lib/components/Table/components/TableBody/hooks/virtualizer/constants.js +3 -0
  50. package/lib/components/Table/components/TableBody/hooks/virtualizer/hook.d.ts +8 -0
  51. package/lib/components/Table/components/TableBody/hooks/virtualizer/hook.js +18 -0
  52. package/lib/components/Table/components/TableBody/hooks/virtualizer/types.d.ts +4 -0
  53. package/lib/components/Table/components/TableBody/hooks/virtualizer/types.js +1 -0
  54. package/lib/components/Table/components/TableBody/tableBody.d.ts +3 -2
  55. package/lib/components/Table/components/TableBody/tableBody.js +7 -28
  56. package/lib/components/Table/components/TableBody/utils.d.ts +12 -0
  57. package/lib/components/Table/components/TableBody/utils.js +17 -0
  58. package/lib/components/Table/components/TableCell/components/CollapsableCell/collapsableCell.d.ts +3 -1
  59. package/lib/components/Table/components/TableCell/components/CollapsableCell/collapsableCell.js +6 -14
  60. package/lib/components/Table/components/TableFeatures/ColumnGrouping/utils.d.ts +28 -0
  61. package/lib/components/Table/components/TableFeatures/ColumnGrouping/utils.js +52 -0
  62. package/lib/components/Table/components/TableFeatures/ColumnVisibility/utils.d.ts +21 -0
  63. package/lib/components/Table/components/TableFeatures/ColumnVisibility/utils.js +37 -0
  64. package/lib/components/Table/components/TableFeatures/RowSorting/utils.d.ts +29 -0
  65. package/lib/components/Table/components/TableFeatures/RowSorting/utils.js +68 -0
  66. package/lib/components/Table/components/TableHead/tableHead.d.ts +2 -6
  67. package/lib/components/Table/components/TableHead/tableHead.js +6 -4
  68. package/lib/components/Table/components/TableHead/types.d.ts +6 -0
  69. package/lib/components/Table/components/TableHead/types.js +1 -0
  70. package/lib/components/Table/components/TableHead/utils.d.ts +19 -0
  71. package/lib/components/Table/components/TableHead/utils.js +34 -0
  72. package/lib/components/Table/components/TableRow/tableRow.styles.d.ts +1 -0
  73. package/lib/components/Table/components/TableRow/tableRow.styles.js +14 -2
  74. package/lib/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.d.ts +3 -2
  75. package/lib/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.js +8 -4
  76. package/lib/components/Table/components/TableRows/components/CollapsableRows/hook.d.ts +9 -0
  77. package/lib/components/Table/components/TableRows/components/CollapsableRows/hook.js +17 -0
  78. package/lib/components/Table/components/TableRows/tableRows.d.ts +3 -3
  79. package/lib/components/Table/components/TableRows/tableRows.js +9 -5
  80. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/columnGrouping.d.ts +3 -0
  81. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/columnGrouping.js +26 -0
  82. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/columnGrouping.styles.d.ts +2 -0
  83. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/columnGrouping.styles.js +16 -0
  84. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/components/MenuItems/menuItems.d.ts +3 -0
  85. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/components/MenuItems/menuItems.js +12 -0
  86. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/components/MenuItems/types.d.ts +7 -0
  87. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/components/MenuItems/types.js +1 -0
  88. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/constants.d.ts +4 -0
  89. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/constants.js +13 -0
  90. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/types.d.ts +4 -0
  91. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/types.js +1 -0
  92. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/utils.d.ts +17 -0
  93. package/lib/components/Table/components/TableToolbar/components/ColumnGrouping/utils.js +36 -0
  94. package/lib/components/Table/components/TableToolbar/components/RowSelection/components/DropdownMenu/dropdownMenu.d.ts +2 -3
  95. package/lib/components/Table/components/TableToolbar/components/RowSelection/components/DropdownMenu/dropdownMenu.js +3 -11
  96. package/lib/components/Table/components/TableToolbar/tableToolbar.js +4 -2
  97. package/lib/components/Table/features/RowPosition/constants.js +2 -2
  98. package/lib/components/Table/features/RowPosition/utils.d.ts +2 -2
  99. package/lib/components/Table/features/RowPosition/utils.js +12 -5
  100. package/lib/components/Table/options/updater.d.ts +10 -0
  101. package/lib/components/Table/options/updater.js +24 -0
  102. package/lib/components/Table/table.js +22 -17
  103. package/lib/components/TableCreator/common/constants.d.ts +2 -2
  104. package/lib/components/TableCreator/common/constants.js +2 -1
  105. package/lib/components/TableCreator/common/utils.d.ts +5 -2
  106. package/lib/components/TableCreator/common/utils.js +11 -4
  107. package/lib/components/TableCreator/options/expanded/constants.d.ts +2 -0
  108. package/lib/components/TableCreator/options/expanded/constants.js +6 -0
  109. package/lib/components/TableCreator/options/expanded/hook.d.ts +2 -0
  110. package/lib/components/TableCreator/options/expanded/hook.js +4 -0
  111. package/lib/components/TableCreator/options/grouping/constants.d.ts +2 -0
  112. package/lib/components/TableCreator/options/grouping/constants.js +5 -0
  113. package/lib/components/TableCreator/options/grouping/hook.d.ts +2 -0
  114. package/lib/components/TableCreator/options/grouping/hook.js +9 -0
  115. package/lib/components/TableCreator/options/hook.d.ts +2 -0
  116. package/lib/components/TableCreator/options/hook.js +25 -0
  117. package/lib/components/TableCreator/options/rowSelection/constants.d.ts +2 -0
  118. package/lib/components/TableCreator/options/rowSelection/constants.js +5 -0
  119. package/lib/components/TableCreator/options/rowSelection/hook.d.ts +2 -0
  120. package/lib/components/TableCreator/options/rowSelection/hook.js +4 -0
  121. package/lib/components/TableCreator/options/sorting/constants.d.ts +2 -0
  122. package/lib/components/TableCreator/options/sorting/constants.js +5 -0
  123. package/lib/components/TableCreator/options/sorting/hook.d.ts +2 -0
  124. package/lib/components/TableCreator/options/sorting/hook.js +4 -0
  125. package/lib/components/TableCreator/tableCreator.d.ts +3 -5
  126. package/lib/components/TableCreator/tableCreator.js +4 -2
  127. package/lib/components/common/Banner/components/SessionTimeout/sessionTimeout.js +1 -1
  128. package/lib/components/common/CustomIcon/common/entities.d.ts +1 -4
  129. package/lib/components/common/CustomIcon/components/GoogleIcon/googleIcon.d.ts +2 -2
  130. package/lib/components/common/CustomIcon/components/GoogleIcon/googleIcon.js +1 -1
  131. package/lib/components/common/DropdownMenu/dropdownMenu.d.ts +2 -3
  132. package/lib/components/common/DropdownMenu/dropdownMenu.js +7 -7
  133. package/lib/components/common/DropdownMenu/dropdownMenu.styles.d.ts +1 -1
  134. package/lib/components/common/DropdownMenu/dropdownMenu.styles.js +1 -1
  135. package/lib/components/common/Menu/hooks/useMenu.d.ts +5 -6
  136. package/lib/config/entities.d.ts +28 -29
  137. package/lib/config/utils.d.ts +0 -7
  138. package/lib/config/utils.js +0 -12
  139. package/lib/hooks/authentication/auth/useAuthReducer.d.ts +2 -0
  140. package/lib/hooks/authentication/auth/useAuthReducer.js +8 -0
  141. package/lib/hooks/authentication/authentication/useAuthenticationReducer.d.ts +2 -0
  142. package/lib/hooks/authentication/authentication/useAuthenticationReducer.js +8 -0
  143. package/lib/hooks/authentication/config/useAuthenticationConfig.d.ts +6 -0
  144. package/lib/hooks/authentication/config/useAuthenticationConfig.js +9 -0
  145. package/lib/hooks/authentication/credentials/useCredentialsReducer.d.ts +2 -0
  146. package/lib/hooks/authentication/credentials/useCredentialsReducer.js +7 -0
  147. package/lib/hooks/authentication/profile/types.d.ts +5 -0
  148. package/lib/hooks/authentication/profile/types.js +1 -0
  149. package/lib/hooks/authentication/profile/useProfile.d.ts +6 -0
  150. package/lib/hooks/authentication/profile/useProfile.js +15 -0
  151. package/lib/hooks/authentication/providers/types.d.ts +6 -0
  152. package/lib/hooks/authentication/providers/types.js +1 -0
  153. package/lib/hooks/authentication/providers/useProviders.d.ts +6 -0
  154. package/lib/hooks/authentication/providers/useProviders.js +14 -0
  155. package/lib/hooks/authentication/session/useSessionActive.d.ts +12 -0
  156. package/lib/hooks/authentication/session/useSessionActive.js +36 -0
  157. package/lib/hooks/authentication/session/useSessionCallbackUrl.d.ts +4 -0
  158. package/lib/hooks/authentication/session/useSessionCallbackUrl.js +20 -0
  159. package/lib/hooks/authentication/session/useSessionIdleTimer.d.ts +6 -0
  160. package/lib/hooks/authentication/session/useSessionIdleTimer.js +8 -0
  161. package/lib/hooks/{useSessionTimeout.js → authentication/session/useSessionTimeout.js} +2 -2
  162. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.d.ts +0 -1
  163. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.js +6 -9
  164. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.js +3 -4
  165. package/lib/hooks/authentication/token/types.d.ts +4 -0
  166. package/lib/hooks/authentication/token/types.js +1 -0
  167. package/lib/hooks/authentication/token/useToken.d.ts +2 -0
  168. package/lib/hooks/authentication/token/useToken.js +5 -0
  169. package/lib/hooks/authentication/token/useTokenReducer.d.ts +7 -0
  170. package/lib/hooks/authentication/token/useTokenReducer.js +12 -0
  171. package/lib/hooks/useEntityList.js +2 -2
  172. package/lib/hooks/useFetchEntity.js +4 -3
  173. package/lib/hooks/useFileManifest/useFetchFilesFacets.js +2 -3
  174. package/lib/hooks/useFileManifest/useFetchSummary.js +2 -3
  175. package/lib/hooks/useRequestFileLocation.js +2 -3
  176. package/lib/hooks/useRouteHistory.d.ts +14 -0
  177. package/lib/hooks/useRouteHistory.js +40 -0
  178. package/lib/hooks/useRouteRoot.d.ts +1 -0
  179. package/lib/hooks/useRouteRoot.js +8 -0
  180. package/lib/hooks/useSummary.js +3 -3
  181. package/lib/providers/authentication/auth/actions.d.ts +8 -0
  182. package/lib/providers/authentication/auth/actions.js +12 -0
  183. package/lib/providers/authentication/auth/constants.d.ts +2 -0
  184. package/lib/providers/authentication/auth/constants.js +5 -0
  185. package/lib/providers/authentication/auth/context.d.ts +2 -0
  186. package/lib/providers/authentication/auth/context.js +7 -0
  187. package/lib/providers/authentication/auth/dispatch.d.ts +23 -0
  188. package/lib/providers/authentication/auth/dispatch.js +43 -0
  189. package/lib/providers/authentication/auth/hook.d.ts +6 -0
  190. package/lib/providers/authentication/auth/hook.js +9 -0
  191. package/lib/providers/authentication/auth/reducer.d.ts +8 -0
  192. package/lib/providers/authentication/auth/reducer.js +24 -0
  193. package/lib/providers/authentication/auth/types.d.ts +48 -0
  194. package/lib/providers/authentication/auth/types.js +11 -0
  195. package/lib/providers/authentication/authentication/actions.d.ts +8 -0
  196. package/lib/providers/authentication/authentication/actions.js +12 -0
  197. package/lib/providers/authentication/authentication/constants.d.ts +2 -0
  198. package/lib/providers/authentication/authentication/constants.js +5 -0
  199. package/lib/providers/authentication/authentication/context.d.ts +2 -0
  200. package/lib/providers/authentication/authentication/context.js +6 -0
  201. package/lib/providers/authentication/authentication/dispatch.d.ts +22 -0
  202. package/lib/providers/authentication/authentication/dispatch.js +42 -0
  203. package/lib/providers/authentication/authentication/hook.d.ts +6 -0
  204. package/lib/providers/authentication/authentication/hook.js +9 -0
  205. package/lib/providers/authentication/authentication/reducer.d.ts +9 -0
  206. package/lib/providers/authentication/authentication/reducer.js +25 -0
  207. package/lib/providers/authentication/authentication/types.d.ts +47 -0
  208. package/lib/providers/authentication/authentication/types.js +11 -0
  209. package/lib/providers/authentication/authentication/utils.d.ts +12 -0
  210. package/lib/providers/authentication/authentication/utils.js +18 -0
  211. package/lib/providers/authentication/common/types.d.ts +1 -0
  212. package/lib/providers/authentication/common/types.js +1 -0
  213. package/lib/providers/authentication/common/utils.d.ts +6 -0
  214. package/lib/providers/authentication/common/utils.js +11 -0
  215. package/lib/providers/authentication/credentials/actions.d.ts +8 -0
  216. package/lib/providers/authentication/credentials/actions.js +12 -0
  217. package/lib/providers/authentication/credentials/constants.d.ts +2 -0
  218. package/lib/providers/authentication/credentials/constants.js +3 -0
  219. package/lib/providers/authentication/credentials/context.d.ts +2 -0
  220. package/lib/providers/authentication/credentials/context.js +6 -0
  221. package/lib/providers/authentication/credentials/dispatch.d.ts +12 -0
  222. package/lib/providers/authentication/credentials/dispatch.js +22 -0
  223. package/lib/providers/authentication/credentials/hook.d.ts +6 -0
  224. package/lib/providers/authentication/credentials/hook.js +9 -0
  225. package/lib/providers/authentication/credentials/reducer.d.ts +8 -0
  226. package/lib/providers/authentication/credentials/reducer.js +22 -0
  227. package/lib/providers/authentication/credentials/types.d.ts +24 -0
  228. package/lib/providers/authentication/credentials/types.js +5 -0
  229. package/lib/providers/authentication/terra/context.d.ts +2 -0
  230. package/lib/providers/authentication/terra/context.js +7 -0
  231. package/lib/providers/authentication/terra/hook.d.ts +6 -0
  232. package/lib/providers/authentication/terra/hook.js +9 -0
  233. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.d.ts +2 -0
  234. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.js +7 -0
  235. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.d.ts +3 -7
  236. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.js +1 -5
  237. package/lib/providers/authentication/terra/hooks/useFetchProfiles.d.ts +13 -0
  238. package/lib/providers/authentication/terra/hooks/useFetchProfiles.js +31 -0
  239. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.js +11 -6
  240. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.js +11 -6
  241. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.js +11 -6
  242. package/lib/providers/authentication/terra/hooks/utils.d.ts +16 -0
  243. package/lib/providers/authentication/terra/hooks/utils.js +19 -0
  244. package/lib/providers/authentication/terra/provider.d.ts +2 -0
  245. package/lib/providers/authentication/terra/provider.js +42 -0
  246. package/lib/providers/authentication/terra/types.d.ts +20 -0
  247. package/lib/providers/authentication/terra/types.js +6 -0
  248. package/lib/providers/authentication/terra/utils.d.ts +19 -0
  249. package/lib/providers/authentication/terra/utils.js +36 -0
  250. package/lib/providers/authentication/token/constants.d.ts +2 -0
  251. package/lib/providers/authentication/token/constants.js +4 -0
  252. package/lib/providers/authentication/token/dispatch.d.ts +12 -0
  253. package/lib/providers/authentication/token/dispatch.js +22 -0
  254. package/lib/providers/authentication/token/reducer.d.ts +8 -0
  255. package/lib/providers/authentication/token/reducer.js +22 -0
  256. package/lib/providers/authentication/token/types.d.ts +28 -0
  257. package/lib/providers/authentication/token/types.js +5 -0
  258. package/lib/providers/exploreState/actions/updateGrouping/action.d.ts +10 -0
  259. package/lib/providers/exploreState/actions/updateGrouping/action.js +16 -0
  260. package/lib/providers/exploreState/actions/updateGrouping/dispatch.d.ts +7 -0
  261. package/lib/providers/exploreState/actions/updateGrouping/dispatch.js +12 -0
  262. package/lib/providers/exploreState/actions/updateGrouping/types.d.ts +9 -0
  263. package/lib/providers/exploreState/actions/updateGrouping/types.js +1 -0
  264. package/lib/providers/exploreState/actions/updateGrouping/utils.d.ts +10 -0
  265. package/lib/providers/exploreState/actions/updateGrouping/utils.js +26 -0
  266. package/lib/providers/exploreState/entities.d.ts +3 -4
  267. package/lib/providers/exploreState/initializer/utils.js +41 -8
  268. package/lib/providers/exploreState/payloads/entities.d.ts +2 -1
  269. package/lib/providers/exploreState/utils.d.ts +6 -4
  270. package/lib/providers/exploreState/utils.js +7 -4
  271. package/lib/providers/exploreState.d.ts +3 -1
  272. package/lib/providers/exploreState.js +18 -10
  273. package/lib/providers/googleSignInAuthentication/common/types.d.ts +17 -0
  274. package/lib/providers/googleSignInAuthentication/common/types.js +1 -0
  275. package/lib/providers/googleSignInAuthentication/constants.d.ts +4 -0
  276. package/lib/providers/googleSignInAuthentication/constants.js +12 -0
  277. package/lib/providers/googleSignInAuthentication/hooks/useGoogleSignInService.d.ts +3 -0
  278. package/lib/providers/googleSignInAuthentication/hooks/useGoogleSignInService.js +36 -0
  279. package/lib/providers/googleSignInAuthentication/profile/types.d.ts +14 -0
  280. package/lib/providers/googleSignInAuthentication/profile/types.js +1 -0
  281. package/lib/providers/googleSignInAuthentication/profile/utils.d.ts +8 -0
  282. package/lib/providers/googleSignInAuthentication/profile/utils.js +25 -0
  283. package/lib/providers/googleSignInAuthentication/provider.d.ts +2 -0
  284. package/lib/providers/googleSignInAuthentication/provider.js +40 -0
  285. package/lib/providers/googleSignInAuthentication/service/constants.d.ts +4 -0
  286. package/lib/providers/googleSignInAuthentication/service/constants.js +9 -0
  287. package/lib/providers/googleSignInAuthentication/service/service.d.ts +6 -0
  288. package/lib/providers/googleSignInAuthentication/service/service.js +43 -0
  289. package/lib/providers/googleSignInAuthentication/types.d.ts +6 -0
  290. package/lib/providers/googleSignInAuthentication/types.js +1 -0
  291. package/lib/providers/nextAuthAuthentication/hooks/useNextAuthService.d.ts +2 -0
  292. package/lib/providers/nextAuthAuthentication/hooks/useNextAuthService.js +14 -0
  293. package/lib/providers/nextAuthAuthentication/provider.d.ts +2 -0
  294. package/lib/providers/nextAuthAuthentication/provider.js +30 -0
  295. package/lib/providers/nextAuthAuthentication/service/service.d.ts +6 -0
  296. package/lib/providers/nextAuthAuthentication/service/service.js +12 -0
  297. package/lib/providers/nextAuthAuthentication/types.d.ts +8 -0
  298. package/lib/providers/nextAuthAuthentication/types.js +1 -0
  299. package/lib/routes/constants.d.ts +3 -0
  300. package/lib/routes/constants.js +3 -0
  301. package/lib/styles/common/mui/button.d.ts +3 -0
  302. package/lib/styles/common/mui/button.js +17 -0
  303. package/lib/styles/common/mui/paper.d.ts +2 -0
  304. package/lib/styles/common/mui/paper.js +9 -0
  305. package/lib/styles/common/mui/popover.d.ts +3 -0
  306. package/lib/styles/common/mui/popover.js +10 -0
  307. package/lib/theme/common/entities.d.ts +6 -0
  308. package/lib/theme/common/entities.js +1 -0
  309. package/lib/views/ExploreView/exploreView.js +2 -2
  310. package/lib/views/LoginView/loginView.d.ts +5 -1
  311. package/lib/views/LoginView/loginView.js +6 -4
  312. package/package.json +3 -2
  313. package/src/components/Authentication/components/SessionController/components/GoogleSessionController/SessionController.tsx +38 -0
  314. package/src/components/Authentication/components/SessionController/components/GoogleSessionController/types.ts +7 -0
  315. package/src/components/Authentication/components/SessionController/components/NextSessionController/SessionController.tsx +23 -0
  316. package/src/components/Authentication/components/SessionController/components/NextSessionController/constants.ts +21 -0
  317. package/src/components/Authentication/components/SessionController/components/NextSessionController/types.ts +5 -0
  318. package/src/components/Authentication/components/SessionController/components/NextSessionController/utils.ts +74 -0
  319. package/src/components/ComponentCreator/ComponentCreator.tsx +4 -3
  320. package/src/components/Detail/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.tsx +2 -0
  321. package/src/components/Detail/components/Table/components/TableRows/tableRows.tsx +3 -18
  322. package/src/components/Export/components/ExportForm/components/ExportFileSummaryForm/exportFileSummaryForm.tsx +28 -32
  323. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/FormStep/components/AcceptTerraTOS/acceptTerraTOS.tsx +4 -4
  324. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/NIHAccountExpiryWarning/nihAccountExpiryWarning.tsx +1 -1
  325. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/terraSetUpForm.tsx +9 -6
  326. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.tsx +27 -25
  327. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.ts +2 -2
  328. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.tsx +18 -42
  329. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.ts +19 -0
  330. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/Button/button.styles.ts +3 -2
  331. package/src/components/Layout/components/Header/header.tsx +1 -1
  332. package/src/components/Links/components/Link/components/ExploreViewLink/exploreViewLink.tsx +27 -13
  333. package/src/components/Login/components/Button/button.styles.ts +12 -0
  334. package/src/components/Login/components/Button/button.tsx +8 -0
  335. package/src/components/Login/components/Button/constants.ts +8 -0
  336. package/src/components/Login/components/Button/types.ts +4 -0
  337. package/src/components/Login/login.tsx +28 -28
  338. package/src/components/Login/types.ts +11 -0
  339. package/src/components/Table/common/columnDef.ts +1 -0
  340. package/src/components/Table/common/gridTable.styles.ts +5 -11
  341. package/src/components/Table/common/utils.ts +44 -107
  342. package/src/components/Table/components/TableBody/hooks/virtualizer/constants.ts +3 -0
  343. package/src/components/Table/components/TableBody/hooks/virtualizer/hook.ts +23 -0
  344. package/src/components/Table/components/TableBody/hooks/virtualizer/types.ts +5 -0
  345. package/src/components/Table/components/TableBody/tableBody.tsx +14 -30
  346. package/src/components/Table/components/TableBody/utils.ts +21 -0
  347. package/src/components/Table/components/TableCell/components/CollapsableCell/collapsableCell.tsx +14 -15
  348. package/src/components/Table/components/TableFeatures/ColumnGrouping/utils.ts +70 -0
  349. package/src/components/Table/components/TableFeatures/ColumnVisibility/utils.ts +52 -0
  350. package/src/components/Table/components/TableFeatures/RowSorting/utils.ts +87 -0
  351. package/src/components/Table/components/TableHead/tableHead.tsx +21 -29
  352. package/src/components/Table/components/TableHead/types.ts +7 -0
  353. package/src/components/Table/components/TableHead/utils.ts +42 -0
  354. package/src/components/Table/components/TableRow/tableRow.styles.ts +19 -2
  355. package/src/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.tsx +8 -2
  356. package/src/components/Table/components/TableRows/components/CollapsableRows/hook.ts +20 -0
  357. package/src/components/Table/components/TableRows/tableRows.tsx +18 -15
  358. package/src/components/Table/components/TableToolbar/components/ColumnGrouping/columnGrouping.styles.ts +17 -0
  359. package/src/components/Table/components/TableToolbar/components/ColumnGrouping/columnGrouping.tsx +54 -0
  360. package/src/components/Table/components/TableToolbar/components/ColumnGrouping/components/MenuItems/menuItems.tsx +28 -0
  361. package/src/components/Table/components/TableToolbar/components/ColumnGrouping/components/MenuItems/types.ts +8 -0
  362. package/src/components/Table/components/TableToolbar/components/ColumnGrouping/constants.ts +17 -0
  363. package/src/components/Table/components/TableToolbar/components/ColumnGrouping/types.ts +5 -0
  364. package/src/components/Table/components/TableToolbar/components/ColumnGrouping/utils.ts +45 -0
  365. package/src/components/Table/components/TableToolbar/components/RowSelection/components/DropdownMenu/dropdownMenu.tsx +7 -20
  366. package/src/components/Table/components/TableToolbar/tableToolbar.tsx +8 -2
  367. package/src/components/Table/features/RowPosition/constants.ts +2 -2
  368. package/src/components/Table/features/RowPosition/utils.ts +10 -5
  369. package/src/components/Table/options/updater.ts +29 -0
  370. package/src/components/Table/table.tsx +43 -25
  371. package/src/components/TableCreator/common/constants.ts +4 -6
  372. package/src/components/TableCreator/common/utils.ts +14 -7
  373. package/src/components/TableCreator/options/expanded/constants.ts +14 -0
  374. package/src/components/TableCreator/options/expanded/hook.ts +6 -0
  375. package/src/components/TableCreator/options/grouping/constants.ts +6 -0
  376. package/src/components/TableCreator/options/grouping/hook.ts +17 -0
  377. package/src/components/TableCreator/options/hook.ts +31 -0
  378. package/src/components/TableCreator/options/rowSelection/constants.ts +10 -0
  379. package/src/components/TableCreator/options/rowSelection/hook.ts +8 -0
  380. package/src/components/TableCreator/options/sorting/constants.ts +10 -0
  381. package/src/components/TableCreator/options/sorting/hook.ts +6 -0
  382. package/src/components/TableCreator/tableCreator.tsx +4 -11
  383. package/src/components/common/Banner/components/SessionTimeout/sessionTimeout.tsx +1 -1
  384. package/src/components/common/CustomIcon/common/entities.ts +1 -4
  385. package/src/components/common/CustomIcon/components/GoogleIcon/googleIcon.tsx +3 -4
  386. package/src/components/common/DropdownMenu/dropdownMenu.styles.ts +1 -1
  387. package/src/components/common/DropdownMenu/dropdownMenu.tsx +19 -17
  388. package/src/components/common/Menu/hooks/useMenu.ts +8 -9
  389. package/src/config/entities.ts +30 -34
  390. package/src/config/utils.ts +0 -14
  391. package/src/hooks/authentication/auth/useAuthReducer.ts +16 -0
  392. package/src/hooks/authentication/authentication/useAuthenticationReducer.ts +16 -0
  393. package/src/hooks/authentication/config/useAuthenticationConfig.ts +13 -0
  394. package/src/hooks/authentication/credentials/useCredentialsReducer.ts +13 -0
  395. package/src/hooks/authentication/profile/types.ts +9 -0
  396. package/src/hooks/authentication/profile/useProfile.ts +21 -0
  397. package/src/hooks/authentication/providers/types.ts +7 -0
  398. package/src/hooks/authentication/providers/useProviders.ts +23 -0
  399. package/src/hooks/authentication/session/useSessionActive.ts +51 -0
  400. package/src/hooks/authentication/session/useSessionCallbackUrl.ts +25 -0
  401. package/src/hooks/authentication/session/useSessionIdleTimer.ts +10 -0
  402. package/src/hooks/{useSessionTimeout.ts → authentication/session/useSessionTimeout.ts} +2 -2
  403. package/src/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.ts +8 -13
  404. package/src/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.ts +3 -4
  405. package/src/hooks/authentication/token/types.ts +5 -0
  406. package/src/hooks/authentication/token/useToken.ts +9 -0
  407. package/src/hooks/authentication/token/useTokenReducer.ts +19 -0
  408. package/src/hooks/useEntityList.ts +2 -2
  409. package/src/hooks/useFetchEntity.tsx +3 -3
  410. package/src/hooks/useFileManifest/useFetchFilesFacets.ts +2 -3
  411. package/src/hooks/useFileManifest/useFetchSummary.ts +2 -3
  412. package/src/hooks/useRequestFileLocation.ts +2 -3
  413. package/src/hooks/useRouteHistory.ts +65 -0
  414. package/src/hooks/useRouteRoot.ts +11 -0
  415. package/src/hooks/useSummary.ts +3 -3
  416. package/src/providers/authentication/auth/actions.ts +17 -0
  417. package/src/providers/authentication/auth/constants.ts +6 -0
  418. package/src/providers/authentication/auth/context.ts +9 -0
  419. package/src/providers/authentication/auth/dispatch.ts +58 -0
  420. package/src/providers/authentication/auth/hook.ts +11 -0
  421. package/src/providers/authentication/auth/reducer.ts +25 -0
  422. package/src/providers/authentication/auth/types.ts +63 -0
  423. package/src/providers/authentication/authentication/actions.ts +17 -0
  424. package/src/providers/authentication/authentication/constants.ts +6 -0
  425. package/src/providers/authentication/authentication/context.ts +8 -0
  426. package/src/providers/authentication/authentication/dispatch.ts +55 -0
  427. package/src/providers/authentication/authentication/hook.ts +11 -0
  428. package/src/providers/authentication/authentication/reducer.ts +34 -0
  429. package/src/providers/authentication/authentication/types.ts +64 -0
  430. package/src/providers/authentication/authentication/utils.ts +25 -0
  431. package/src/providers/authentication/common/types.ts +1 -0
  432. package/src/providers/authentication/common/utils.ts +11 -0
  433. package/src/providers/authentication/credentials/actions.ts +17 -0
  434. package/src/providers/authentication/credentials/constants.ts +5 -0
  435. package/src/providers/authentication/credentials/context.ts +8 -0
  436. package/src/providers/authentication/credentials/dispatch.ts +31 -0
  437. package/src/providers/authentication/credentials/hook.ts +11 -0
  438. package/src/providers/authentication/credentials/reducer.ts +30 -0
  439. package/src/providers/authentication/credentials/types.ts +33 -0
  440. package/src/providers/authentication/terra/context.ts +16 -0
  441. package/src/providers/authentication/terra/hook.ts +11 -0
  442. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.ts +9 -0
  443. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.ts +1 -7
  444. package/src/providers/authentication/terra/hooks/useFetchProfiles.ts +61 -0
  445. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.ts +18 -7
  446. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.ts +18 -7
  447. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.ts +18 -7
  448. package/src/providers/authentication/terra/hooks/utils.ts +29 -0
  449. package/src/providers/authentication/terra/provider.tsx +60 -0
  450. package/src/providers/authentication/terra/types.ts +23 -0
  451. package/src/providers/authentication/terra/utils.ts +49 -0
  452. package/src/providers/authentication/token/constants.ts +6 -0
  453. package/src/providers/authentication/token/dispatch.ts +29 -0
  454. package/src/providers/authentication/token/reducer.ts +26 -0
  455. package/src/providers/authentication/token/types.ts +36 -0
  456. package/src/providers/exploreState/actions/updateGrouping/action.ts +26 -0
  457. package/src/providers/exploreState/actions/updateGrouping/dispatch.ts +16 -0
  458. package/src/providers/exploreState/actions/updateGrouping/types.ts +11 -0
  459. package/src/providers/exploreState/actions/updateGrouping/utils.ts +33 -0
  460. package/src/providers/exploreState/entities.ts +3 -3
  461. package/src/providers/exploreState/initializer/utils.ts +58 -10
  462. package/src/providers/exploreState/payloads/entities.ts +2 -0
  463. package/src/providers/exploreState/utils.ts +10 -7
  464. package/src/providers/exploreState.tsx +32 -10
  465. package/src/providers/googleSignInAuthentication/common/types.ts +28 -0
  466. package/src/providers/googleSignInAuthentication/constants.ts +17 -0
  467. package/src/providers/googleSignInAuthentication/hooks/useGoogleSignInService.ts +53 -0
  468. package/src/providers/googleSignInAuthentication/profile/types.ts +15 -0
  469. package/src/providers/googleSignInAuthentication/profile/utils.ts +29 -0
  470. package/src/providers/googleSignInAuthentication/provider.tsx +53 -0
  471. package/src/providers/googleSignInAuthentication/service/constants.ts +16 -0
  472. package/src/providers/googleSignInAuthentication/service/service.ts +68 -0
  473. package/src/providers/googleSignInAuthentication/types.ts +7 -0
  474. package/src/providers/nextAuthAuthentication/hooks/useNextAuthService.ts +26 -0
  475. package/src/providers/nextAuthAuthentication/provider.tsx +42 -0
  476. package/src/providers/nextAuthAuthentication/service/service.ts +14 -0
  477. package/src/providers/nextAuthAuthentication/types.ts +9 -0
  478. package/src/routes/constants.ts +3 -0
  479. package/src/styles/common/mui/button.ts +20 -0
  480. package/src/styles/common/mui/paper.ts +11 -0
  481. package/src/styles/common/mui/popover.ts +19 -0
  482. package/src/theme/common/entities.ts +7 -0
  483. package/src/views/ExploreView/exploreView.tsx +1 -3
  484. package/src/views/LoginView/loginView.tsx +15 -9
  485. package/tests/getProfileStatus.test.ts +290 -0
  486. package/tests/terraProfileProvider.test.tsx +121 -0
  487. package/tests/transformRoute.test.ts +21 -0
  488. package/tests/useRouteHistory.test.ts +97 -0
  489. package/tests/useSessionActive.test.ts +107 -0
  490. package/types/data-explorer-ui.d.ts +8 -1
  491. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.d.ts +0 -5
  492. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.js +0 -29
  493. package/lib/components/Login/login.stories.d.ts +0 -6
  494. package/lib/components/Login/login.stories.js +0 -31
  495. package/lib/components/TableCreator/common/entities.d.ts +0 -5
  496. package/lib/components/common/Button/components/LoginButton/loginButton.d.ts +0 -3
  497. package/lib/components/common/Button/components/LoginButton/loginButton.js +0 -6
  498. package/lib/components/common/Button/components/LoginButton/loginButton.styles.d.ts +0 -7
  499. package/lib/components/common/Button/components/LoginButton/loginButton.styles.js +0 -11
  500. package/lib/hooks/useAuthentication/useAuthentication.d.ts +0 -6
  501. package/lib/hooks/useAuthentication/useAuthentication.js +0 -9
  502. package/lib/hooks/useAuthentication/useAuthenticationComplete.d.ts +0 -6
  503. package/lib/hooks/useAuthentication/useAuthenticationComplete.js +0 -55
  504. package/lib/hooks/useAuthentication/useAuthenticationStatus.d.ts +0 -20
  505. package/lib/hooks/useAuthentication/useAuthenticationStatus.js +0 -32
  506. package/lib/hooks/useAuthentication/useFetchGoogleProfile.d.ts +0 -21
  507. package/lib/hooks/useAuthentication/useFetchGoogleProfile.js +0 -41
  508. package/lib/hooks/useAuthentication/useTokenClient.d.ts +0 -11
  509. package/lib/hooks/useAuthentication/useTokenClient.js +0 -29
  510. package/lib/hooks/useAuthenticationConfig.d.ts +0 -6
  511. package/lib/hooks/useAuthenticationConfig.js +0 -14
  512. package/lib/providers/authentication.d.ts +0 -51
  513. package/lib/providers/authentication.js +0 -110
  514. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.tsx +0 -35
  515. package/src/components/Login/login.stories.tsx +0 -43
  516. package/src/components/TableCreator/common/entities.ts +0 -6
  517. package/src/components/common/Button/components/LoginButton/loginButton.styles.ts +0 -13
  518. package/src/components/common/Button/components/LoginButton/loginButton.tsx +0 -16
  519. package/src/hooks/useAuthentication/useAuthentication.tsx +0 -10
  520. package/src/hooks/useAuthentication/useAuthenticationComplete.ts +0 -66
  521. package/src/hooks/useAuthentication/useAuthenticationStatus.ts +0 -49
  522. package/src/hooks/useAuthentication/useFetchGoogleProfile.ts +0 -68
  523. package/src/hooks/useAuthentication/useTokenClient.ts +0 -54
  524. package/src/hooks/useAuthenticationConfig.ts +0 -18
  525. package/src/providers/authentication.tsx +0 -181
  526. package/tests/authentication.test.ts +0 -142
  527. package/tests/useAuthenticationStatus.test.ts +0 -155
  528. /package/lib/components/{TableCreator/common/entities.js → Authentication/components/SessionController/components/GoogleSessionController/types.js} +0 -0
  529. /package/lib/hooks/{useSessionTimeout.d.ts → authentication/session/useSessionTimeout.d.ts} +0 -0
  530. /package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.d.ts +0 -0
  531. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.d.ts +0 -0
  532. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.js +0 -0
  533. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.d.ts +0 -0
  534. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.d.ts +0 -0
  535. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.d.ts +0 -0
  536. /package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.ts +0 -0
@@ -1,22 +1,20 @@
1
+ import SouthRoundedIcon from "@mui/icons-material/SouthRounded";
1
2
  import {
2
3
  TableHead as MTableHead,
3
4
  TableRow as MTableRow,
4
5
  TableCell,
5
6
  TableSortLabel,
6
7
  } from "@mui/material";
7
- import { flexRender, RowData, Table } from "@tanstack/react-table";
8
+ import { flexRender, RowData } from "@tanstack/react-table";
8
9
  import React, { Fragment } from "react";
9
10
  import { ROW_DIRECTION } from "../../common/entities";
10
- import { getTableSortLabelProps } from "../../common/utils";
11
11
  import {
12
12
  getTableCellAlign,
13
13
  getTableCellPadding,
14
14
  } from "../TableCell/common/utils";
15
-
16
- export interface TableHeadProps<T extends RowData> {
17
- rowDirection: ROW_DIRECTION;
18
- tableInstance: Table<T>;
19
- }
15
+ import { handleToggleSorting } from "../TableFeatures/RowSorting/utils";
16
+ import { TableHeadProps } from "./types";
17
+ import { isSortDisabled, shouldSortColumn } from "./utils";
20
18
 
21
19
  export const TableHead = <T extends RowData>({
22
20
  rowDirection,
@@ -28,34 +26,28 @@ export const TableHead = <T extends RowData>({
28
26
  tableInstance.getHeaderGroups().map((headerGroup) => (
29
27
  <MTableHead key={headerGroup.id}>
30
28
  <MTableRow>
31
- {headerGroup.headers.map((header) => {
32
- const {
33
- column: {
34
- columnDef: {
35
- meta: { enableSortingInteraction = true } = {},
36
- },
37
- },
38
- } = header;
39
- return header.column.getIsGrouped() ? null : (
29
+ {headerGroup.headers.map(({ column, getContext, id }) => {
30
+ const { columnDef, getIsGrouped, getIsSorted } = column;
31
+ return getIsGrouped() ? null : (
40
32
  <TableCell
41
- key={header.id}
42
- align={getTableCellAlign(header.column)}
43
- padding={getTableCellPadding(header.id)}
33
+ key={id}
34
+ align={getTableCellAlign(column)}
35
+ padding={getTableCellPadding(id)}
44
36
  >
45
- {header.column.getCanSort() && enableSortingInteraction ? (
37
+ {shouldSortColumn(tableInstance, column) ? (
46
38
  <TableSortLabel
47
- {...getTableSortLabelProps(header.column)}
39
+ IconComponent={SouthRoundedIcon}
40
+ active={Boolean(getIsSorted())}
41
+ direction={getIsSorted() || undefined}
42
+ disabled={isSortDisabled(tableInstance)}
43
+ onClick={(mouseEvent) =>
44
+ handleToggleSorting(mouseEvent, tableInstance, column)
45
+ }
48
46
  >
49
- {flexRender(
50
- header.column.columnDef.header,
51
- header.getContext()
52
- )}
47
+ {flexRender(columnDef.header, getContext())}
53
48
  </TableSortLabel>
54
49
  ) : (
55
- flexRender(
56
- header.column.columnDef.header,
57
- header.getContext()
58
- )
50
+ flexRender(columnDef.header, getContext())
59
51
  )}
60
52
  </TableCell>
61
53
  );
@@ -0,0 +1,7 @@
1
+ import { RowData, Table } from "@tanstack/react-table";
2
+ import { ROW_DIRECTION } from "../../common/entities";
3
+
4
+ export interface TableHeadProps<T extends RowData> {
5
+ rowDirection: ROW_DIRECTION;
6
+ tableInstance: Table<T>;
7
+ }
@@ -0,0 +1,42 @@
1
+ import { Column, RowData, Table } from "@tanstack/react-table";
2
+
3
+ /**
4
+ * Determines if the column sorting interaction should be disabled.
5
+ * The sort label is disabled under the following conditions:
6
+ * - The table is in single-sort mode, and is grouped, and the grouped column is already sorted.
7
+ * When multi-sort mode is enabled or the table is not grouped, the sort label remains enabled.
8
+ * @param table - Table.
9
+ * @returns `true` if the sort label should be disabled; otherwise, `false`.
10
+ */
11
+ export function isSortDisabled<T extends RowData>(table: Table<T>): boolean {
12
+ const {
13
+ getColumn,
14
+ getState,
15
+ options: { enableMultiSort },
16
+ } = table;
17
+ const { grouping } = getState();
18
+ // Multi-sort is enabled - sorting is always enabled.
19
+ if (enableMultiSort) return false;
20
+ // Table is not grouped - sorting is always enabled.
21
+ if (grouping.length === 0) return false;
22
+ // In single-sort mode, check if the grouped column is already sorted.
23
+ const groupedColumn = getColumn(grouping[0]); // Grouping state currently only supports single-column grouping.
24
+ return Boolean(groupedColumn?.getIsSorted());
25
+ }
26
+
27
+ /**
28
+ * Checks whether a column in a table can be sorted.
29
+ * A column is sortable if both table sorting interactions are enabled
30
+ * and the column itself is marked as sortable.
31
+ * @param table - Table.
32
+ * @param column - Column.
33
+ * @returns {boolean} `true` if the column can be sorted; otherwise, `false`.
34
+ */
35
+ export function shouldSortColumn<T extends RowData>(
36
+ table: Table<T>,
37
+ column: Column<T>
38
+ ): boolean {
39
+ const { enableSortingInteraction } = table.options;
40
+ const canSort = column.getCanSort();
41
+ return Boolean(enableSortingInteraction && canSort);
42
+ }
@@ -1,18 +1,35 @@
1
1
  import { css } from "@emotion/react";
2
2
  import styled from "@emotion/styled";
3
3
  import { TableRow as MTableRow } from "@mui/material";
4
- import { primaryLightest } from "../../../../styles/common/mixins/colors";
4
+ import {
5
+ primaryLightest,
6
+ smokeLightest,
7
+ } from "../../../../styles/common/mixins/colors";
8
+ import { textBodySmall500 } from "../../../../styles/common/mixins/fonts";
5
9
 
6
10
  interface Props {
11
+ isGrouped?: boolean;
7
12
  isPreview?: boolean;
8
13
  }
9
14
 
10
15
  export const TableRow = styled(MTableRow, {
11
- shouldForwardProp: (prop) => prop !== "isPreview",
16
+ shouldForwardProp: (prop) => prop !== "isPreview" && prop !== "isGrouped",
12
17
  })<Props>`
13
18
  && {
14
19
  transition: background-color 300ms ease-in;
15
20
 
21
+ ${(props) =>
22
+ props.isGrouped &&
23
+ css`
24
+ background-color: ${smokeLightest(props)};
25
+
26
+ td {
27
+ ${textBodySmall500(props)};
28
+ background-color: inherit;
29
+ grid-column: 1 / -1;
30
+ }
31
+ `}
32
+
16
33
  ${(props) =>
17
34
  props.isPreview &&
18
35
  css`
@@ -4,24 +4,29 @@ import React, { Fragment } from "react";
4
4
  import { isCollapsableRowDisabled } from "../../../../common/utils";
5
5
  import { CollapsableCell } from "../../../TableCell/components/CollapsableCell/collapsableCell";
6
6
  import { TableRow } from "../../../TableRow/tableRow.styles";
7
+ import { useCollapsableRows } from "./hook";
7
8
 
8
9
  export interface CollapsableRowsProps<T extends RowData> {
10
+ rows: Row<T>[];
9
11
  tableInstance: Table<T>;
10
12
  virtualizer: Virtualizer<Window, Element>;
11
13
  }
12
14
 
13
15
  export const CollapsableRows = <T extends RowData>({
16
+ rows,
14
17
  tableInstance,
15
18
  virtualizer,
16
19
  }: CollapsableRowsProps<T>): JSX.Element => {
17
- const { getRowModel } = tableInstance;
18
- const { rows } = getRowModel();
20
+ const { getState } = tableInstance;
21
+ const { grouping } = getState();
19
22
  const virtualItems = virtualizer.getVirtualItems();
23
+ useCollapsableRows(tableInstance);
20
24
  return (
21
25
  <Fragment>
22
26
  {virtualItems.map((virtualRow) => {
23
27
  const row = rows[virtualRow.index] as Row<T>;
24
28
  const { getIsPreview } = row;
29
+ if (grouping.length > 0 && row.depth > 0) return null; // TODO(cc) hide sub rows -- sub-rows are within collapsed content -- UI TBD.
25
30
  return (
26
31
  <TableRow
27
32
  key={row.id}
@@ -32,6 +37,7 @@ export const CollapsableRows = <T extends RowData>({
32
37
  <CollapsableCell
33
38
  isDisabled={isCollapsableRowDisabled(tableInstance)}
34
39
  row={row}
40
+ virtualizer={virtualizer}
35
41
  />
36
42
  </TableRow>
37
43
  );
@@ -0,0 +1,20 @@
1
+ import { RowData, Table } from "@tanstack/react-table";
2
+ import { useEffect } from "react";
3
+
4
+ /**
5
+ * Hook to manage the expanded row state during viewport transitions (e.g., desktop to mobile and vice versa).
6
+ * Designed for use with the `CollapsableRows` component, where row expansion is a work in progress for desktop viewports.
7
+ * This hook ensures that all rows are collapsed when transitioning from desktop to mobile (when `CollapsableRows` component is mounted).
8
+ * It also resets the expanded row state when transitioning back to desktop (when the `CollapsableRows` component is unmounted).
9
+ * @param table - Table.
10
+ */
11
+ export function useCollapsableRows<T extends RowData>(table: Table<T>): void {
12
+ const { resetExpanded, toggleAllRowsExpanded } = table;
13
+
14
+ useEffect(() => {
15
+ toggleAllRowsExpanded(false);
16
+ return (): void => {
17
+ resetExpanded();
18
+ };
19
+ }, [resetExpanded, toggleAllRowsExpanded]);
20
+ }
@@ -1,5 +1,5 @@
1
1
  import { TableCell } from "@mui/material";
2
- import { flexRender, Row, RowData, Table } from "@tanstack/react-table";
2
+ import { flexRender, Row, RowData } from "@tanstack/react-table";
3
3
  import { Virtualizer } from "@tanstack/react-virtual";
4
4
  import React, { Fragment } from "react";
5
5
  import {
@@ -9,38 +9,41 @@ import {
9
9
  import { TableRow } from "../TableRow/tableRow.styles";
10
10
 
11
11
  export interface TableRowsProps<T extends RowData> {
12
- tableInstance: Table<T>;
12
+ rows: Row<T>[];
13
13
  virtualizer: Virtualizer<Window, Element>;
14
14
  }
15
15
 
16
16
  export const TableRows = <T extends RowData>({
17
- tableInstance,
17
+ rows,
18
18
  virtualizer,
19
19
  }: TableRowsProps<T>): JSX.Element => {
20
- const { getRowModel } = tableInstance;
21
- const { rows } = getRowModel();
22
20
  const virtualItems = virtualizer.getVirtualItems();
23
21
  return (
24
22
  <Fragment>
25
23
  {virtualItems.map((virtualRow) => {
26
24
  const row = rows[virtualRow.index] as Row<T>;
27
- const { getIsPreview } = row;
25
+ const { getIsGrouped, getIsPreview } = row;
28
26
  return (
29
27
  <TableRow
30
28
  key={row.id}
31
29
  data-index={virtualRow.index}
30
+ isGrouped={getIsGrouped()}
32
31
  isPreview={getIsPreview()}
33
32
  ref={virtualizer.measureElement}
34
33
  >
35
- {row.getVisibleCells().map((cell) => (
36
- <TableCell
37
- key={cell.id}
38
- align={getTableCellAlign(cell.column)}
39
- padding={getTableCellPadding(cell.column.id)}
40
- >
41
- {flexRender(cell.column.columnDef.cell, cell.getContext())}
42
- </TableCell>
43
- ))}
34
+ {row.getVisibleCells().map((cell) => {
35
+ if (cell.getIsAggregated()) return null; // Display of aggregated cells is currently not supported.
36
+ if (cell.getIsPlaceholder()) return null; // Display of placeholder cells is currently not supported.
37
+ return (
38
+ <TableCell
39
+ key={cell.id}
40
+ align={getTableCellAlign(cell.column)}
41
+ padding={getTableCellPadding(cell.column.id)}
42
+ >
43
+ {flexRender(cell.column.columnDef.cell, cell.getContext())}
44
+ </TableCell>
45
+ );
46
+ })}
44
47
  </TableRow>
45
48
  );
46
49
  })}
@@ -0,0 +1,17 @@
1
+ import styled from "@emotion/styled";
2
+ import { MenuItem } from "@mui/material";
3
+
4
+ export const StyledMenuItem = styled(MenuItem)`
5
+ &:hover {
6
+ background-color: transparent;
7
+
8
+ .MuiListItemText-root {
9
+ .MuiListItemText-primary {
10
+ text-decoration: underline;
11
+ text-decoration-skip-ink: none;
12
+ text-underline-color: currentColor;
13
+ text-underline-position: from-font;
14
+ }
15
+ }
16
+ }
17
+ ` as typeof MenuItem;
@@ -0,0 +1,54 @@
1
+ import { ListItemText } from "@mui/material";
2
+ import { RowData } from "@tanstack/react-table";
3
+ import React from "react";
4
+ import { DropdownButton } from "../../../../../common/Button/components/DropdownButton/dropdownButton";
5
+ import { DropdownMenu } from "../../../../../common/DropdownMenu/dropdownMenu";
6
+ import { handleClearGroupingState } from "../../../TableFeatures/ColumnGrouping/utils";
7
+ import { StyledMenuItem } from "./columnGrouping.styles";
8
+ import { MenuItems } from "./components/MenuItems/menuItems";
9
+ import { LIST_ITEM_TEXT_PROPS, MENU_ITEM_PROPS, MENU_PROPS } from "./constants";
10
+ import { ColumnGroupingProps } from "./types";
11
+ import { getButtonLabel, getColumnGrouping } from "./utils";
12
+
13
+ export const ColumnGrouping = <T extends RowData>({
14
+ tableInstance,
15
+ }: ColumnGroupingProps<T>): JSX.Element | null => {
16
+ const {
17
+ getState,
18
+ options: { enableGrouping },
19
+ } = tableInstance;
20
+ const { grouping } = getState();
21
+ const groupingByColumnId = getColumnGrouping(tableInstance);
22
+ if (!enableGrouping) return null;
23
+ if (groupingByColumnId.size === 0) return null;
24
+ return (
25
+ <DropdownMenu
26
+ {...MENU_PROPS}
27
+ button={(props) => (
28
+ <DropdownButton {...props}>
29
+ {getButtonLabel(groupingByColumnId, grouping)}
30
+ </DropdownButton>
31
+ )}
32
+ >
33
+ {({ closeMenu }): JSX.Element[] => [
34
+ <MenuItems
35
+ key="column-grouping"
36
+ closeMenu={closeMenu}
37
+ groupingByColumnId={groupingByColumnId}
38
+ tableInstance={tableInstance}
39
+ />,
40
+ <StyledMenuItem
41
+ {...MENU_ITEM_PROPS}
42
+ key="reset-grouping-state"
43
+ disabled={grouping.length === 0}
44
+ onClick={() => {
45
+ handleClearGroupingState(tableInstance);
46
+ closeMenu();
47
+ }}
48
+ >
49
+ <ListItemText {...LIST_ITEM_TEXT_PROPS}>Clear Grouping</ListItemText>
50
+ </StyledMenuItem>,
51
+ ]}
52
+ </DropdownMenu>
53
+ );
54
+ };
@@ -0,0 +1,28 @@
1
+ import { ListItemText, MenuItem } from "@mui/material";
2
+ import { RowData } from "@tanstack/react-table";
3
+ import React from "react";
4
+ import { handleToggleGrouping } from "../../../../../TableFeatures/ColumnGrouping/utils";
5
+ import { MENU_ITEM_PROPS } from "../../constants";
6
+ import { MenuItemsProps } from "./types";
7
+
8
+ export const MenuItems = <T extends RowData>({
9
+ closeMenu,
10
+ groupingByColumnId,
11
+ tableInstance,
12
+ }: MenuItemsProps<T>): JSX.Element[] => {
13
+ const columnByMenuItem = [...groupingByColumnId.values()];
14
+ return columnByMenuItem.map(([menuItem, column]) => (
15
+ <MenuItem
16
+ {...MENU_ITEM_PROPS}
17
+ key={column.id}
18
+ disabled={!column.getCanGroup()}
19
+ onClick={() => {
20
+ handleToggleGrouping(tableInstance, column);
21
+ closeMenu();
22
+ }}
23
+ selected={column.getIsGrouped()}
24
+ >
25
+ <ListItemText disableTypography>{menuItem}</ListItemText>
26
+ </MenuItem>
27
+ ));
28
+ };
@@ -0,0 +1,8 @@
1
+ import { Column, RowData, Table } from "@tanstack/react-table";
2
+ import { UseMenu } from "../../../../../../../common/Menu/hooks/useMenu";
3
+
4
+ export interface MenuItemsProps<T extends RowData> {
5
+ closeMenu: UseMenu<HTMLButtonElement>["onClose"];
6
+ groupingByColumnId: Map<string, [string, Column<T>]>;
7
+ tableInstance: Table<T>;
8
+ }
@@ -0,0 +1,17 @@
1
+ import { ListItemTextProps, MenuItemProps, MenuProps } from "@mui/material";
2
+
3
+ export const LIST_ITEM_TEXT_PROPS: Partial<ListItemTextProps> = {
4
+ primaryTypographyProps: {
5
+ color: "primary",
6
+ component: "span",
7
+ variant: "inherit",
8
+ },
9
+ };
10
+
11
+ export const MENU_PROPS: Partial<MenuProps> = {
12
+ variant: "menu",
13
+ };
14
+
15
+ export const MENU_ITEM_PROPS: Partial<MenuItemProps> = {
16
+ component: "li",
17
+ };
@@ -0,0 +1,5 @@
1
+ import { RowData, Table } from "@tanstack/react-table";
2
+
3
+ export interface ColumnGroupingProps<T extends RowData> {
4
+ tableInstance: Table<T>;
5
+ }
@@ -0,0 +1,45 @@
1
+ import { Column, GroupingState, RowData, Table } from "@tanstack/react-table";
2
+
3
+ /**
4
+ * Retrieves the button label for the column grouping dropdown.
5
+ * Currently, the grouping state supports grouping by a single column only.
6
+ * @param groupingByColumnId - Map of column groupings by column ID.
7
+ * @param groupingState - Grouping state.
8
+ * @returns button label.
9
+ */
10
+ export function getButtonLabel<T extends RowData>(
11
+ groupingByColumnId: Map<string, [string, Column<T>]>,
12
+ groupingState: GroupingState
13
+ ): string {
14
+ const grouping = groupingByColumnId.get(groupingState[0]);
15
+ if (!grouping) return "Group by";
16
+ return `Group by: ${grouping[0]}`;
17
+ }
18
+
19
+ /**
20
+ * Retrieves a map of column groupings by column ID from the given table instance.
21
+ * Columns that are visible, group-able with a `string` header are included and are keyed by
22
+ * their column ID. The value is a tuple containing the column header and the column instance.
23
+ * @param table - Table.
24
+ * @returns map of column grouping by column id.
25
+ */
26
+ export function getColumnGrouping<T extends RowData>(
27
+ table: Table<T>
28
+ ): Map<string, [string, Column<T>]> {
29
+ const groupingByColumnId = new Map<string, [string, Column<T>]>();
30
+ for (const column of table.getAllColumns()) {
31
+ const {
32
+ columnDef: { header },
33
+ getCanGroup,
34
+ getIsVisible,
35
+ id,
36
+ } = column;
37
+ if (!getCanGroup()) continue;
38
+ if (!getIsVisible()) continue;
39
+ // Currently, headers are configured as strings.
40
+ // Only include columns that have a string header (for now).
41
+ if (typeof header !== "string") continue;
42
+ groupingByColumnId.set(id, [header, column]);
43
+ }
44
+ return groupingByColumnId;
45
+ }
@@ -1,10 +1,7 @@
1
1
  import { MenuProps as MMenuProps } from "@mui/material";
2
2
  import React from "react";
3
- import { DropdownButton as DXDropdownButton } from "../../../../../../../common/Button/components/DropdownButton/dropdownButton";
4
- import {
5
- DropdownMenuButtonProps,
6
- DropdownMenuItemProps,
7
- } from "../../../../../../../common/DropdownMenu/common/entities";
3
+ import { DropdownButton } from "../../../../../../../common/Button/components/DropdownButton/dropdownButton";
4
+ import { DropdownMenuItemProps } from "../../../../../../../common/DropdownMenu/common/entities";
8
5
  import { DropdownMenuProps as DXDropdownMenuProps } from "../../../../../../../common/DropdownMenu/dropdownMenu";
9
6
  import { DropdownMenu as RowSelectionDropdownMenu } from "./dropdownMenu.styles";
10
7
 
@@ -14,16 +11,15 @@ const DEFAULT_MENU_PROPS: Partial<MMenuProps> = {
14
11
  };
15
12
 
16
13
  export interface DropdownMenuProps {
17
- Button?: DXDropdownMenuProps["Button"];
18
- buttonLabel?: string;
14
+ button?: DXDropdownMenuProps["button"];
19
15
  children: ({ closeMenu }: DropdownMenuItemProps) => JSX.Element[];
20
16
  className?: string;
21
17
  }
22
18
 
23
19
  export const DropdownMenu = ({
24
- Button = (props: DropdownMenuButtonProps): JSX.Element =>
25
- renderButton({ children: buttonLabel, ...props }),
26
- buttonLabel = "Edit",
20
+ button = (props): JSX.Element => (
21
+ <DropdownButton {...props}>Edit</DropdownButton>
22
+ ),
27
23
  children,
28
24
  className,
29
25
  ...props /* Spread props to allow for Mui Menu specific prop overrides e.g. "anchorOrigin". */
@@ -32,19 +28,10 @@ export const DropdownMenu = ({
32
28
  <RowSelectionDropdownMenu
33
29
  {...DEFAULT_MENU_PROPS}
34
30
  className={className}
35
- Button={Button}
31
+ button={button}
36
32
  {...props}
37
33
  >
38
34
  {({ closeMenu }): JSX.Element[] => children({ closeMenu })}
39
35
  </RowSelectionDropdownMenu>
40
36
  );
41
37
  };
42
-
43
- /**
44
- * Return the dropdown button.
45
- * @param props - Button props e.g. "onClick".
46
- * @returns button element.
47
- */
48
- function renderButton(props: DropdownMenuButtonProps): JSX.Element {
49
- return <DXDropdownButton {...props} />;
50
- }
@@ -7,6 +7,7 @@ import { getEditColumnOptions, isAnyRowSelected } from "../../common/utils";
7
7
  import { CheckboxMenu } from "../CheckboxMenu/checkboxMenu";
8
8
  import { DownloadEntityResults } from "../DownloadEntityResults/downloadEntityResults";
9
9
  import { PaginationSummary } from "../PaginationSummary/paginationSummary";
10
+ import { ColumnGrouping } from "./components/ColumnGrouping/columnGrouping";
10
11
  import { RowPreview } from "./components/RowPreview/rowPreview";
11
12
  import { RowSelection } from "./components/RowSelection/rowSelection";
12
13
  import { Toolbar, ToolbarActions } from "./tableToolbar.styles";
@@ -25,13 +26,17 @@ export const TableToolbar = <T extends RowData>({
25
26
  const { exploreState } = useExploreState();
26
27
  const { paginationState } = exploreState;
27
28
  const { currentPage, pages, pageSize, rows } = paginationState;
28
- const { getSelectedRowModel, resetColumnVisibility } = tableInstance;
29
+ const {
30
+ getSelectedRowModel,
31
+ options: { enableGrouping },
32
+ resetColumnVisibility,
33
+ } = tableInstance;
29
34
  const { enableDownload, rowPreviewView } = listView || {};
30
35
  const isLastPage = currentPage === pages;
31
36
  const editColumnOptions = getEditColumnOptions(tableInstance);
32
37
  const showToolbar =
33
38
  rowDirection === ROW_DIRECTION.DEFAULT &&
34
- (editColumnOptions || enableDownload);
39
+ (editColumnOptions || enableDownload || enableGrouping);
35
40
 
36
41
  /**
37
42
  * Resets column visibility to default state.
@@ -63,6 +68,7 @@ export const TableToolbar = <T extends RowData>({
63
68
  rows={tableInstance.getFilteredRowModel().rows}
64
69
  />
65
70
  )}
71
+ <ColumnGrouping tableInstance={tableInstance} />
66
72
  <CheckboxMenu
67
73
  label="Edit Columns"
68
74
  onReset={onResetColumnVisibility}
@@ -23,9 +23,9 @@ export const ROW_POSITION: TableFeature = {
23
23
  };
24
24
  },
25
25
  createTable: <T extends RowData>(table: Table<T>): void => {
26
- const originalGetRowModel = table.getRowModel.bind(table);
27
26
  table.getRowModel = (): RowModel<T> => {
28
- return getRowModel(table, originalGetRowModel);
27
+ const rowModel = table.getPaginationRowModel();
28
+ return getRowModel(table, rowModel);
29
29
  };
30
30
  },
31
31
  getInitialState: (initialState?: InitialTableState): Partial<TableState> => {
@@ -11,17 +11,21 @@ import { DEFAULT_PAGINATION } from "../constants";
11
11
  /**
12
12
  * Returns row model, with getter for row position.
13
13
  * @param table - Table.
14
- * @param getRowModel - Table getRowModel function.
14
+ * @param rowModel - Row model.
15
15
  * @returns row model.
16
16
  */
17
17
  export function getRowModel<T extends RowData>(
18
18
  table: Table<T>,
19
- getRowModel: Table<T>[`getRowModel`]
19
+ rowModel: RowModel<T>
20
20
  ): RowModel<T> {
21
- const rowModel = getRowModel();
22
- rowModel.rows.forEach(({ id }, i) => {
21
+ let i = 0;
22
+ rowModel.flatRows.forEach(({ getIsGrouped, id }) => {
23
+ const isGroupedRow = getIsGrouped();
24
+ const index = isGroupedRow ? -1 : i; // Capture the current value of i for this iteration.
23
25
  rowModel.rowsById[id].getRowPosition = (): number =>
24
- calculateRowPosition(table, i);
26
+ calculateRowPosition(table, index);
27
+ if (isGroupedRow) return; // Iterate only for non-grouped rows.
28
+ i++;
25
29
  });
26
30
  return rowModel;
27
31
  }
@@ -51,6 +55,7 @@ function calculateRowPosition<T extends RowData>(
51
55
  table: Table<T>,
52
56
  index: number
53
57
  ): number {
58
+ if (index < 0) return index; // Grouped rows have a position of -1.
54
59
  const { getState } = table;
55
60
  const {
56
61
  pagination: { pageIndex, pageSize },
@@ -0,0 +1,29 @@
1
+ import { Updater } from "@tanstack/react-table";
2
+
3
+ /**
4
+ * Type guard to check if the given value is TanStack's updater function.
5
+ * TanStack updater can either be a function that computes the new value based on the old value,
6
+ * or a direct value. This type guard identifies whether the provided updater is a function.
7
+ * @param updaterOrValue - The value to check.
8
+ * @returns True if the value is a function, false otherwise.
9
+ */
10
+ function isUpdaterFunction<T>(
11
+ updaterOrValue: Updater<T>
12
+ ): updaterOrValue is (old: T) => T {
13
+ return typeof updaterOrValue === "function";
14
+ }
15
+
16
+ /**
17
+ * Utility function to resolve TanStack updater into a new value.
18
+ * If the updater is a function, it is called with the `old` value to compute the new value.
19
+ * If the updater is not a function, it is returned as-is.
20
+ * @param updaterOrValue - The updater, either a function or a direct value.
21
+ * @param old - The (old) value.
22
+ * @returns Resolved value.
23
+ */
24
+ export function resolveUpdater<T>(updaterOrValue: Updater<T>, old: T): T {
25
+ if (isUpdaterFunction(updaterOrValue)) {
26
+ return updaterOrValue(old);
27
+ }
28
+ return updaterOrValue;
29
+ }