@databiosphere/findable-ui 19.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 (363) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +11 -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/GoogleSessionController/types.js +1 -0
  7. package/lib/components/Authentication/components/SessionController/components/NextSessionController/SessionController.d.ts +2 -0
  8. package/lib/components/Authentication/components/SessionController/components/NextSessionController/SessionController.js +17 -0
  9. package/lib/components/Authentication/components/SessionController/components/NextSessionController/constants.d.ts +5 -0
  10. package/lib/components/Authentication/components/SessionController/components/NextSessionController/constants.js +12 -0
  11. package/lib/components/Authentication/components/SessionController/components/NextSessionController/types.d.ts +4 -0
  12. package/lib/components/Authentication/components/SessionController/components/NextSessionController/types.js +1 -0
  13. package/lib/components/Authentication/components/SessionController/components/NextSessionController/utils.d.ts +15 -0
  14. package/lib/components/Authentication/components/SessionController/components/NextSessionController/utils.js +53 -0
  15. package/lib/components/ComponentCreator/ComponentCreator.js +2 -3
  16. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/FormStep/components/AcceptTerraTOS/acceptTerraTOS.js +2 -2
  17. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/NIHAccountExpiryWarning/nihAccountExpiryWarning.js +1 -1
  18. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/terraSetUpForm.js +8 -3
  19. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.d.ts +2 -1
  20. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.js +17 -14
  21. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.d.ts +3 -4
  22. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.js +15 -24
  23. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.d.ts +1 -1
  24. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.js +2 -2
  25. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.d.ts +2 -0
  26. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.js +14 -0
  27. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/Button/button.styles.js +3 -2
  28. package/lib/components/Layout/components/Header/header.js +1 -1
  29. package/lib/components/Login/components/Button/button.d.ts +2 -0
  30. package/lib/components/Login/components/Button/button.js +6 -0
  31. package/lib/components/Login/components/Button/button.styles.d.ts +5 -0
  32. package/lib/components/Login/components/Button/button.styles.js +11 -0
  33. package/lib/components/Login/components/Button/constants.d.ts +2 -0
  34. package/lib/components/Login/components/Button/constants.js +6 -0
  35. package/lib/components/Login/components/Button/types.d.ts +3 -0
  36. package/lib/components/Login/components/Button/types.js +1 -0
  37. package/lib/components/Login/login.d.ts +2 -9
  38. package/lib/components/Login/login.js +9 -10
  39. package/lib/components/Login/types.d.ts +10 -0
  40. package/lib/components/Login/types.js +1 -0
  41. package/lib/components/common/Banner/components/SessionTimeout/sessionTimeout.js +1 -1
  42. package/lib/components/common/CustomIcon/common/entities.d.ts +1 -4
  43. package/lib/components/common/CustomIcon/components/GoogleIcon/googleIcon.d.ts +2 -2
  44. package/lib/components/common/CustomIcon/components/GoogleIcon/googleIcon.js +1 -1
  45. package/lib/config/entities.d.ts +22 -23
  46. package/lib/hooks/authentication/auth/useAuthReducer.d.ts +2 -0
  47. package/lib/hooks/authentication/auth/useAuthReducer.js +8 -0
  48. package/lib/hooks/authentication/authentication/useAuthenticationReducer.d.ts +2 -0
  49. package/lib/hooks/authentication/authentication/useAuthenticationReducer.js +8 -0
  50. package/lib/hooks/authentication/config/useAuthenticationConfig.d.ts +6 -0
  51. package/lib/hooks/authentication/config/useAuthenticationConfig.js +9 -0
  52. package/lib/hooks/authentication/credentials/useCredentialsReducer.d.ts +2 -0
  53. package/lib/hooks/authentication/credentials/useCredentialsReducer.js +7 -0
  54. package/lib/hooks/authentication/profile/types.d.ts +5 -0
  55. package/lib/hooks/authentication/profile/types.js +1 -0
  56. package/lib/hooks/authentication/profile/useProfile.d.ts +6 -0
  57. package/lib/hooks/authentication/profile/useProfile.js +15 -0
  58. package/lib/hooks/authentication/providers/types.d.ts +6 -0
  59. package/lib/hooks/authentication/providers/types.js +1 -0
  60. package/lib/hooks/authentication/providers/useProviders.d.ts +6 -0
  61. package/lib/hooks/authentication/providers/useProviders.js +14 -0
  62. package/lib/hooks/authentication/session/useSessionActive.d.ts +12 -0
  63. package/lib/hooks/authentication/session/useSessionActive.js +36 -0
  64. package/lib/hooks/authentication/session/useSessionCallbackUrl.d.ts +4 -0
  65. package/lib/hooks/authentication/session/useSessionCallbackUrl.js +20 -0
  66. package/lib/hooks/authentication/session/useSessionIdleTimer.d.ts +6 -0
  67. package/lib/hooks/authentication/session/useSessionIdleTimer.js +8 -0
  68. package/lib/hooks/{useSessionTimeout.js → authentication/session/useSessionTimeout.js} +2 -2
  69. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.d.ts +0 -1
  70. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.js +6 -9
  71. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.js +3 -4
  72. package/lib/hooks/authentication/token/types.d.ts +4 -0
  73. package/lib/hooks/authentication/token/types.js +1 -0
  74. package/lib/hooks/authentication/token/useToken.d.ts +2 -0
  75. package/lib/hooks/authentication/token/useToken.js +5 -0
  76. package/lib/hooks/authentication/token/useTokenReducer.d.ts +7 -0
  77. package/lib/hooks/authentication/token/useTokenReducer.js +12 -0
  78. package/lib/hooks/useEntityList.js +2 -2
  79. package/lib/hooks/useFetchEntity.js +4 -3
  80. package/lib/hooks/useFileManifest/useFetchFilesFacets.js +2 -3
  81. package/lib/hooks/useFileManifest/useFetchSummary.js +2 -3
  82. package/lib/hooks/useRequestFileLocation.js +2 -3
  83. package/lib/hooks/useRouteHistory.d.ts +14 -0
  84. package/lib/hooks/useRouteHistory.js +40 -0
  85. package/lib/hooks/useRouteRoot.d.ts +1 -0
  86. package/lib/hooks/useRouteRoot.js +8 -0
  87. package/lib/hooks/useSummary.js +3 -3
  88. package/lib/providers/authentication/auth/actions.d.ts +8 -0
  89. package/lib/providers/authentication/auth/actions.js +12 -0
  90. package/lib/providers/authentication/auth/constants.d.ts +2 -0
  91. package/lib/providers/authentication/auth/constants.js +5 -0
  92. package/lib/providers/authentication/auth/context.d.ts +2 -0
  93. package/lib/providers/authentication/auth/context.js +7 -0
  94. package/lib/providers/authentication/auth/dispatch.d.ts +23 -0
  95. package/lib/providers/authentication/auth/dispatch.js +43 -0
  96. package/lib/providers/authentication/auth/hook.d.ts +6 -0
  97. package/lib/providers/authentication/auth/hook.js +9 -0
  98. package/lib/providers/authentication/auth/reducer.d.ts +8 -0
  99. package/lib/providers/authentication/auth/reducer.js +24 -0
  100. package/lib/providers/authentication/auth/types.d.ts +48 -0
  101. package/lib/providers/authentication/auth/types.js +11 -0
  102. package/lib/providers/authentication/authentication/actions.d.ts +8 -0
  103. package/lib/providers/authentication/authentication/actions.js +12 -0
  104. package/lib/providers/authentication/authentication/constants.d.ts +2 -0
  105. package/lib/providers/authentication/authentication/constants.js +5 -0
  106. package/lib/providers/authentication/authentication/context.d.ts +2 -0
  107. package/lib/providers/authentication/authentication/context.js +6 -0
  108. package/lib/providers/authentication/authentication/dispatch.d.ts +22 -0
  109. package/lib/providers/authentication/authentication/dispatch.js +42 -0
  110. package/lib/providers/authentication/authentication/hook.d.ts +6 -0
  111. package/lib/providers/authentication/authentication/hook.js +9 -0
  112. package/lib/providers/authentication/authentication/reducer.d.ts +9 -0
  113. package/lib/providers/authentication/authentication/reducer.js +25 -0
  114. package/lib/providers/authentication/authentication/types.d.ts +47 -0
  115. package/lib/providers/authentication/authentication/types.js +11 -0
  116. package/lib/providers/authentication/authentication/utils.d.ts +12 -0
  117. package/lib/providers/authentication/authentication/utils.js +18 -0
  118. package/lib/providers/authentication/common/types.d.ts +1 -0
  119. package/lib/providers/authentication/common/types.js +1 -0
  120. package/lib/providers/authentication/common/utils.d.ts +6 -0
  121. package/lib/providers/authentication/common/utils.js +11 -0
  122. package/lib/providers/authentication/credentials/actions.d.ts +8 -0
  123. package/lib/providers/authentication/credentials/actions.js +12 -0
  124. package/lib/providers/authentication/credentials/constants.d.ts +2 -0
  125. package/lib/providers/authentication/credentials/constants.js +3 -0
  126. package/lib/providers/authentication/credentials/context.d.ts +2 -0
  127. package/lib/providers/authentication/credentials/context.js +6 -0
  128. package/lib/providers/authentication/credentials/dispatch.d.ts +12 -0
  129. package/lib/providers/authentication/credentials/dispatch.js +22 -0
  130. package/lib/providers/authentication/credentials/hook.d.ts +6 -0
  131. package/lib/providers/authentication/credentials/hook.js +9 -0
  132. package/lib/providers/authentication/credentials/reducer.d.ts +8 -0
  133. package/lib/providers/authentication/credentials/reducer.js +22 -0
  134. package/lib/providers/authentication/credentials/types.d.ts +24 -0
  135. package/lib/providers/authentication/credentials/types.js +5 -0
  136. package/lib/providers/authentication/terra/context.d.ts +2 -0
  137. package/lib/providers/authentication/terra/context.js +7 -0
  138. package/lib/providers/authentication/terra/hook.d.ts +6 -0
  139. package/lib/providers/authentication/terra/hook.js +9 -0
  140. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.d.ts +2 -0
  141. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.js +7 -0
  142. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.d.ts +3 -7
  143. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.js +1 -5
  144. package/lib/providers/authentication/terra/hooks/useFetchProfiles.d.ts +13 -0
  145. package/lib/providers/authentication/terra/hooks/useFetchProfiles.js +31 -0
  146. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.js +11 -6
  147. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.js +11 -6
  148. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.js +11 -6
  149. package/lib/providers/authentication/terra/hooks/utils.d.ts +16 -0
  150. package/lib/providers/authentication/terra/hooks/utils.js +19 -0
  151. package/lib/providers/authentication/terra/provider.d.ts +2 -0
  152. package/lib/providers/authentication/terra/provider.js +42 -0
  153. package/lib/providers/authentication/terra/types.d.ts +20 -0
  154. package/lib/providers/authentication/terra/types.js +6 -0
  155. package/lib/providers/authentication/terra/utils.d.ts +19 -0
  156. package/lib/providers/authentication/terra/utils.js +36 -0
  157. package/lib/providers/authentication/token/constants.d.ts +2 -0
  158. package/lib/providers/authentication/token/constants.js +4 -0
  159. package/lib/providers/authentication/token/dispatch.d.ts +12 -0
  160. package/lib/providers/authentication/token/dispatch.js +22 -0
  161. package/lib/providers/authentication/token/reducer.d.ts +8 -0
  162. package/lib/providers/authentication/token/reducer.js +22 -0
  163. package/lib/providers/authentication/token/types.d.ts +28 -0
  164. package/lib/providers/authentication/token/types.js +5 -0
  165. package/lib/providers/exploreState.js +3 -5
  166. package/lib/providers/googleSignInAuthentication/common/types.d.ts +17 -0
  167. package/lib/providers/googleSignInAuthentication/common/types.js +1 -0
  168. package/lib/providers/googleSignInAuthentication/constants.d.ts +4 -0
  169. package/lib/providers/googleSignInAuthentication/constants.js +12 -0
  170. package/lib/providers/googleSignInAuthentication/hooks/useGoogleSignInService.d.ts +3 -0
  171. package/lib/providers/googleSignInAuthentication/hooks/useGoogleSignInService.js +36 -0
  172. package/lib/providers/googleSignInAuthentication/profile/types.d.ts +14 -0
  173. package/lib/providers/googleSignInAuthentication/profile/types.js +1 -0
  174. package/lib/providers/googleSignInAuthentication/profile/utils.d.ts +8 -0
  175. package/lib/providers/googleSignInAuthentication/profile/utils.js +25 -0
  176. package/lib/providers/googleSignInAuthentication/provider.d.ts +2 -0
  177. package/lib/providers/googleSignInAuthentication/provider.js +40 -0
  178. package/lib/providers/googleSignInAuthentication/service/constants.d.ts +4 -0
  179. package/lib/providers/googleSignInAuthentication/service/constants.js +9 -0
  180. package/lib/providers/googleSignInAuthentication/service/service.d.ts +6 -0
  181. package/lib/providers/googleSignInAuthentication/service/service.js +43 -0
  182. package/lib/providers/googleSignInAuthentication/types.d.ts +6 -0
  183. package/lib/providers/googleSignInAuthentication/types.js +1 -0
  184. package/lib/providers/nextAuthAuthentication/hooks/useNextAuthService.d.ts +2 -0
  185. package/lib/providers/nextAuthAuthentication/hooks/useNextAuthService.js +14 -0
  186. package/lib/providers/nextAuthAuthentication/provider.d.ts +2 -0
  187. package/lib/providers/nextAuthAuthentication/provider.js +30 -0
  188. package/lib/providers/nextAuthAuthentication/service/service.d.ts +6 -0
  189. package/lib/providers/nextAuthAuthentication/service/service.js +12 -0
  190. package/lib/providers/nextAuthAuthentication/types.d.ts +8 -0
  191. package/lib/providers/nextAuthAuthentication/types.js +1 -0
  192. package/lib/routes/constants.d.ts +3 -0
  193. package/lib/routes/constants.js +3 -0
  194. package/lib/styles/common/mui/button.d.ts +3 -0
  195. package/lib/styles/common/mui/button.js +17 -0
  196. package/lib/styles/common/mui/paper.d.ts +2 -0
  197. package/lib/styles/common/mui/paper.js +9 -0
  198. package/lib/styles/common/mui/popover.d.ts +3 -0
  199. package/lib/styles/common/mui/popover.js +10 -0
  200. package/lib/theme/common/entities.d.ts +6 -0
  201. package/lib/theme/common/entities.js +1 -0
  202. package/lib/views/LoginView/loginView.d.ts +5 -1
  203. package/lib/views/LoginView/loginView.js +6 -4
  204. package/package.json +3 -2
  205. package/src/components/Authentication/components/SessionController/components/GoogleSessionController/SessionController.tsx +38 -0
  206. package/src/components/Authentication/components/SessionController/components/GoogleSessionController/types.ts +7 -0
  207. package/src/components/Authentication/components/SessionController/components/NextSessionController/SessionController.tsx +23 -0
  208. package/src/components/Authentication/components/SessionController/components/NextSessionController/constants.ts +21 -0
  209. package/src/components/Authentication/components/SessionController/components/NextSessionController/types.ts +5 -0
  210. package/src/components/Authentication/components/SessionController/components/NextSessionController/utils.ts +74 -0
  211. package/src/components/ComponentCreator/ComponentCreator.tsx +4 -3
  212. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/FormStep/components/AcceptTerraTOS/acceptTerraTOS.tsx +4 -4
  213. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/NIHAccountExpiryWarning/nihAccountExpiryWarning.tsx +1 -1
  214. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/terraSetUpForm.tsx +9 -6
  215. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.tsx +27 -25
  216. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.ts +2 -2
  217. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.tsx +18 -42
  218. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.ts +19 -0
  219. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/Button/button.styles.ts +3 -2
  220. package/src/components/Layout/components/Header/header.tsx +1 -1
  221. package/src/components/Login/components/Button/button.styles.ts +12 -0
  222. package/src/components/Login/components/Button/button.tsx +8 -0
  223. package/src/components/Login/components/Button/constants.ts +8 -0
  224. package/src/components/Login/components/Button/types.ts +4 -0
  225. package/src/components/Login/login.tsx +28 -28
  226. package/src/components/Login/types.ts +11 -0
  227. package/src/components/common/Banner/components/SessionTimeout/sessionTimeout.tsx +1 -1
  228. package/src/components/common/CustomIcon/common/entities.ts +1 -4
  229. package/src/components/common/CustomIcon/components/GoogleIcon/googleIcon.tsx +3 -4
  230. package/src/config/entities.ts +20 -25
  231. package/src/hooks/authentication/auth/useAuthReducer.ts +16 -0
  232. package/src/hooks/authentication/authentication/useAuthenticationReducer.ts +16 -0
  233. package/src/hooks/authentication/config/useAuthenticationConfig.ts +13 -0
  234. package/src/hooks/authentication/credentials/useCredentialsReducer.ts +13 -0
  235. package/src/hooks/authentication/profile/types.ts +9 -0
  236. package/src/hooks/authentication/profile/useProfile.ts +21 -0
  237. package/src/hooks/authentication/providers/types.ts +7 -0
  238. package/src/hooks/authentication/providers/useProviders.ts +23 -0
  239. package/src/hooks/authentication/session/useSessionActive.ts +51 -0
  240. package/src/hooks/authentication/session/useSessionCallbackUrl.ts +25 -0
  241. package/src/hooks/authentication/session/useSessionIdleTimer.ts +10 -0
  242. package/src/hooks/{useSessionTimeout.ts → authentication/session/useSessionTimeout.ts} +2 -2
  243. package/src/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.ts +8 -13
  244. package/src/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.ts +3 -4
  245. package/src/hooks/authentication/token/types.ts +5 -0
  246. package/src/hooks/authentication/token/useToken.ts +9 -0
  247. package/src/hooks/authentication/token/useTokenReducer.ts +19 -0
  248. package/src/hooks/useEntityList.ts +2 -2
  249. package/src/hooks/useFetchEntity.tsx +3 -3
  250. package/src/hooks/useFileManifest/useFetchFilesFacets.ts +2 -3
  251. package/src/hooks/useFileManifest/useFetchSummary.ts +2 -3
  252. package/src/hooks/useRequestFileLocation.ts +2 -3
  253. package/src/hooks/useRouteHistory.ts +65 -0
  254. package/src/hooks/useRouteRoot.ts +11 -0
  255. package/src/hooks/useSummary.ts +3 -3
  256. package/src/providers/authentication/auth/actions.ts +17 -0
  257. package/src/providers/authentication/auth/constants.ts +6 -0
  258. package/src/providers/authentication/auth/context.ts +9 -0
  259. package/src/providers/authentication/auth/dispatch.ts +58 -0
  260. package/src/providers/authentication/auth/hook.ts +11 -0
  261. package/src/providers/authentication/auth/reducer.ts +25 -0
  262. package/src/providers/authentication/auth/types.ts +63 -0
  263. package/src/providers/authentication/authentication/actions.ts +17 -0
  264. package/src/providers/authentication/authentication/constants.ts +6 -0
  265. package/src/providers/authentication/authentication/context.ts +8 -0
  266. package/src/providers/authentication/authentication/dispatch.ts +55 -0
  267. package/src/providers/authentication/authentication/hook.ts +11 -0
  268. package/src/providers/authentication/authentication/reducer.ts +34 -0
  269. package/src/providers/authentication/authentication/types.ts +64 -0
  270. package/src/providers/authentication/authentication/utils.ts +25 -0
  271. package/src/providers/authentication/common/types.ts +1 -0
  272. package/src/providers/authentication/common/utils.ts +11 -0
  273. package/src/providers/authentication/credentials/actions.ts +17 -0
  274. package/src/providers/authentication/credentials/constants.ts +5 -0
  275. package/src/providers/authentication/credentials/context.ts +8 -0
  276. package/src/providers/authentication/credentials/dispatch.ts +31 -0
  277. package/src/providers/authentication/credentials/hook.ts +11 -0
  278. package/src/providers/authentication/credentials/reducer.ts +30 -0
  279. package/src/providers/authentication/credentials/types.ts +33 -0
  280. package/src/providers/authentication/terra/context.ts +16 -0
  281. package/src/providers/authentication/terra/hook.ts +11 -0
  282. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.ts +9 -0
  283. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.ts +1 -7
  284. package/src/providers/authentication/terra/hooks/useFetchProfiles.ts +61 -0
  285. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.ts +18 -7
  286. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.ts +18 -7
  287. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.ts +18 -7
  288. package/src/providers/authentication/terra/hooks/utils.ts +29 -0
  289. package/src/providers/authentication/terra/provider.tsx +60 -0
  290. package/src/providers/authentication/terra/types.ts +23 -0
  291. package/src/providers/authentication/terra/utils.ts +49 -0
  292. package/src/providers/authentication/token/constants.ts +6 -0
  293. package/src/providers/authentication/token/dispatch.ts +29 -0
  294. package/src/providers/authentication/token/reducer.ts +26 -0
  295. package/src/providers/authentication/token/types.ts +36 -0
  296. package/src/providers/exploreState.tsx +3 -4
  297. package/src/providers/googleSignInAuthentication/common/types.ts +28 -0
  298. package/src/providers/googleSignInAuthentication/constants.ts +17 -0
  299. package/src/providers/googleSignInAuthentication/hooks/useGoogleSignInService.ts +53 -0
  300. package/src/providers/googleSignInAuthentication/profile/types.ts +15 -0
  301. package/src/providers/googleSignInAuthentication/profile/utils.ts +29 -0
  302. package/src/providers/googleSignInAuthentication/provider.tsx +53 -0
  303. package/src/providers/googleSignInAuthentication/service/constants.ts +16 -0
  304. package/src/providers/googleSignInAuthentication/service/service.ts +68 -0
  305. package/src/providers/googleSignInAuthentication/types.ts +7 -0
  306. package/src/providers/nextAuthAuthentication/hooks/useNextAuthService.ts +26 -0
  307. package/src/providers/nextAuthAuthentication/provider.tsx +42 -0
  308. package/src/providers/nextAuthAuthentication/service/service.ts +14 -0
  309. package/src/providers/nextAuthAuthentication/types.ts +9 -0
  310. package/src/routes/constants.ts +3 -0
  311. package/src/styles/common/mui/button.ts +20 -0
  312. package/src/styles/common/mui/paper.ts +11 -0
  313. package/src/styles/common/mui/popover.ts +19 -0
  314. package/src/theme/common/entities.ts +7 -0
  315. package/src/views/LoginView/loginView.tsx +15 -9
  316. package/tests/getProfileStatus.test.ts +290 -0
  317. package/tests/terraProfileProvider.test.tsx +121 -0
  318. package/tests/transformRoute.test.ts +21 -0
  319. package/tests/useRouteHistory.test.ts +97 -0
  320. package/tests/useSessionActive.test.ts +107 -0
  321. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.d.ts +0 -5
  322. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.js +0 -29
  323. package/lib/components/Login/login.stories.d.ts +0 -6
  324. package/lib/components/Login/login.stories.js +0 -31
  325. package/lib/components/common/Button/components/LoginButton/loginButton.d.ts +0 -3
  326. package/lib/components/common/Button/components/LoginButton/loginButton.js +0 -6
  327. package/lib/components/common/Button/components/LoginButton/loginButton.styles.d.ts +0 -7
  328. package/lib/components/common/Button/components/LoginButton/loginButton.styles.js +0 -11
  329. package/lib/hooks/useAuthentication/useAuthentication.d.ts +0 -6
  330. package/lib/hooks/useAuthentication/useAuthentication.js +0 -9
  331. package/lib/hooks/useAuthentication/useAuthenticationComplete.d.ts +0 -6
  332. package/lib/hooks/useAuthentication/useAuthenticationComplete.js +0 -55
  333. package/lib/hooks/useAuthentication/useAuthenticationStatus.d.ts +0 -20
  334. package/lib/hooks/useAuthentication/useAuthenticationStatus.js +0 -32
  335. package/lib/hooks/useAuthentication/useFetchGoogleProfile.d.ts +0 -21
  336. package/lib/hooks/useAuthentication/useFetchGoogleProfile.js +0 -41
  337. package/lib/hooks/useAuthentication/useTokenClient.d.ts +0 -11
  338. package/lib/hooks/useAuthentication/useTokenClient.js +0 -29
  339. package/lib/hooks/useAuthenticationConfig.d.ts +0 -6
  340. package/lib/hooks/useAuthenticationConfig.js +0 -14
  341. package/lib/providers/authentication.d.ts +0 -51
  342. package/lib/providers/authentication.js +0 -110
  343. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.tsx +0 -35
  344. package/src/components/Login/login.stories.tsx +0 -43
  345. package/src/components/common/Button/components/LoginButton/loginButton.styles.ts +0 -13
  346. package/src/components/common/Button/components/LoginButton/loginButton.tsx +0 -16
  347. package/src/hooks/useAuthentication/useAuthentication.tsx +0 -10
  348. package/src/hooks/useAuthentication/useAuthenticationComplete.ts +0 -66
  349. package/src/hooks/useAuthentication/useAuthenticationStatus.ts +0 -49
  350. package/src/hooks/useAuthentication/useFetchGoogleProfile.ts +0 -68
  351. package/src/hooks/useAuthentication/useTokenClient.ts +0 -54
  352. package/src/hooks/useAuthenticationConfig.ts +0 -18
  353. package/src/providers/authentication.tsx +0 -181
  354. package/tests/authentication.test.ts +0 -142
  355. package/tests/useAuthenticationStatus.test.ts +0 -155
  356. /package/lib/hooks/{useSessionTimeout.d.ts → authentication/session/useSessionTimeout.d.ts} +0 -0
  357. /package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.d.ts +0 -0
  358. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.d.ts +0 -0
  359. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.js +0 -0
  360. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.d.ts +0 -0
  361. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.d.ts +0 -0
  362. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.d.ts +0 -0
  363. /package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.ts +0 -0
@@ -15,7 +15,9 @@ import { HeroTitle } from "../components/common/Title/title";
15
15
  import { FooterProps } from "../components/Layout/components/Footer/footer";
16
16
  import { HeaderProps } from "../components/Layout/components/Header/header";
17
17
  import { ExploreMode } from "../hooks/useExploreMode";
18
- import { AuthContextProps } from "../providers/authentication";
18
+ import { AuthState } from "../providers/authentication/auth/types";
19
+ import { UserProfile } from "../providers/authentication/authentication/types";
20
+ import { ProviderId } from "../providers/authentication/common/types";
19
21
  import { ExploreState } from "../providers/exploreState";
20
22
  import { FileManifestState } from "../providers/fileManifestState";
21
23
  import { SystemStatus, SystemStatusResponse } from "../providers/systemStatus";
@@ -33,14 +35,19 @@ export interface AnalyticsConfig {
33
35
  * Interface to define the authentication configuration for a given site.
34
36
  */
35
37
  export interface AuthenticationConfig {
36
- googleGISAuthConfig?: GoogleGISAuthConfig;
38
+ providers?: OAuthProvider[];
39
+ services?: AuthService[];
37
40
  termsOfService?: ReactNode;
38
- terraAuthConfig?: TerraAuthConfig;
39
41
  text?: ReactNode;
40
42
  title: string;
41
43
  warning?: ReactNode;
42
44
  }
43
45
 
46
+ export interface AuthService {
47
+ endpoint: Record<string, string>;
48
+ id: string;
49
+ }
50
+
44
51
  /**
45
52
  * Interface to define the set of components that will be used for the back page.
46
53
  */
@@ -216,15 +223,6 @@ export type GetIdFunction<T> = (detail: T) => string;
216
223
  */
217
224
  export type GetTitleFunction<T> = (detail?: T) => string | undefined;
218
225
 
219
- /**
220
- * Google GIS authentication configuration.
221
- */
222
- export interface GoogleGISAuthConfig {
223
- clientId: string;
224
- googleProfileEndpoint: string;
225
- scope: string;
226
- }
227
-
228
226
  /**
229
227
  * Grid track configuration.
230
228
  */
@@ -278,12 +276,15 @@ export interface ListViewConfig {
278
276
  subTitleHero?: ComponentsConfig;
279
277
  }
280
278
 
281
- /**
282
- * Interface to define the authentication login notice component.
283
- */
284
- export interface LoginNotice {
285
- conditionsUrl: string;
286
- privacyUrl: string;
279
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Use of `any` is intentional to allow for flexibility in the model.
280
+ export interface OAuthProvider<P = any> {
281
+ authorization: { params: { scope: string } };
282
+ clientId: string;
283
+ icon: ReactNode;
284
+ id: ProviderId;
285
+ name: string;
286
+ profile: (profile: P) => UserProfile;
287
+ userinfo: string;
287
288
  }
288
289
 
289
290
  /**
@@ -425,12 +426,6 @@ export interface TabConfig {
425
426
  tabName?: string; // Used by the entity view to generate a title for the <Head> component; when label is not typed string.
426
427
  }
427
428
 
428
- export interface TerraAuthConfig {
429
- termsOfServiceEndpoint: string;
430
- terraNIHProfileEndpoint?: string;
431
- terraProfileEndpoint: string;
432
- }
433
-
434
429
  /**
435
430
  * Theme options function.
436
431
  * Defines theme options, and provides a reference to the specified theme.
@@ -441,7 +436,7 @@ export type ThemeOptionsFn = (theme: Theme) => ThemeOptions;
441
436
  * View context.
442
437
  */
443
438
  export interface ViewContext<T extends RowData, TData = unknown> {
444
- authState: Pick<AuthContextProps, "authenticationStatus" | "isAuthenticated">;
439
+ authState: Pick<AuthState, "isAuthenticated">;
445
440
  cellContext?: CellContext<T, TData>;
446
441
  entityConfig: EntityConfig;
447
442
  exploreState: ExploreState;
@@ -0,0 +1,16 @@
1
+ import { useReducer } from "react";
2
+ import { DEFAULT_AUTH_STATE } from "../../../providers/authentication/auth/constants";
3
+ import { authReducer } from "../../../providers/authentication/auth/reducer";
4
+ import { AuthContextProps } from "../../../providers/authentication/auth/types";
5
+ import { initializer } from "../../../providers/authentication/common/utils";
6
+
7
+ export const useAuthReducer = (
8
+ initialState = DEFAULT_AUTH_STATE
9
+ ): Omit<AuthContextProps, "service"> => {
10
+ const [authState, authDispatch] = useReducer(
11
+ authReducer,
12
+ initialState,
13
+ initializer
14
+ );
15
+ return { authDispatch, authState };
16
+ };
@@ -0,0 +1,16 @@
1
+ import { useReducer } from "react";
2
+ import { DEFAULT_AUTHENTICATION_STATE } from "../../../providers/authentication/authentication/constants";
3
+ import { authenticationReducer } from "../../../providers/authentication/authentication/reducer";
4
+ import { AuthenticationContextProps } from "../../../providers/authentication/authentication/types";
5
+ import { initializer } from "../../../providers/authentication/common/utils";
6
+
7
+ export const useAuthenticationReducer = (
8
+ initialState = DEFAULT_AUTHENTICATION_STATE
9
+ ): AuthenticationContextProps => {
10
+ const [authenticationState, authenticationDispatch] = useReducer(
11
+ authenticationReducer,
12
+ initialState,
13
+ initializer
14
+ );
15
+ return { authenticationDispatch, authenticationState };
16
+ };
@@ -0,0 +1,13 @@
1
+ import { AuthenticationConfig } from "../../../config/entities";
2
+ import { useConfig } from "../../useConfig";
3
+
4
+ /**
5
+ * Returns the authentication configuration.
6
+ * @returns authentication configuration.
7
+ */
8
+ export const useAuthenticationConfig = (): AuthenticationConfig | undefined => {
9
+ const {
10
+ config: { authentication },
11
+ } = useConfig();
12
+ return authentication;
13
+ };
@@ -0,0 +1,13 @@
1
+ import { useReducer } from "react";
2
+ import { DEFAULT_CREDENTIALS_STATE } from "../../../providers/authentication/credentials/constants";
3
+ import { credentialsReducer } from "../../../providers/authentication/credentials/reducer";
4
+ import { CredentialsContextProps } from "../../../providers/authentication/credentials/types";
5
+
6
+ export const useCredentialsReducer = (): CredentialsContextProps => {
7
+ const [credentialsState, credentialsDispatch] = useReducer(
8
+ credentialsReducer,
9
+ undefined,
10
+ () => DEFAULT_CREDENTIALS_STATE
11
+ );
12
+ return { credentialsDispatch, credentialsState };
13
+ };
@@ -0,0 +1,9 @@
1
+ import {
2
+ Profile,
3
+ UserProfile,
4
+ } from "../../../providers/authentication/authentication/types";
5
+
6
+ export interface UseProfile {
7
+ isLoading: boolean;
8
+ profile: Profile<UserProfile>;
9
+ }
@@ -0,0 +1,21 @@
1
+ import { useAuth } from "../../../providers/authentication/auth/hook";
2
+ import { AUTH_STATUS } from "../../../providers/authentication/auth/types";
3
+ import { useAuthentication } from "../../../providers/authentication/authentication/hook";
4
+ import { UseProfile } from "./types";
5
+
6
+ /**
7
+ * Profile hook - returns user profile.
8
+ * @returns user profile.
9
+ */
10
+ export const useProfile = (): UseProfile => {
11
+ const {
12
+ authState: { status },
13
+ } = useAuth();
14
+ const {
15
+ authenticationState: { profile },
16
+ } = useAuthentication();
17
+ return {
18
+ isLoading: status === AUTH_STATUS.PENDING,
19
+ profile: profile,
20
+ };
21
+ };
@@ -0,0 +1,7 @@
1
+ import { OAuthProvider } from "../../../config/entities";
2
+ import { ProviderId } from "../../../providers/authentication/common/types";
3
+
4
+ export interface UseProviders {
5
+ findProvider: (providerId: ProviderId) => OAuthProvider | undefined;
6
+ providers: OAuthProvider[] | undefined;
7
+ }
@@ -0,0 +1,23 @@
1
+ import { useCallback } from "react";
2
+ import { ProviderId } from "../../../providers/authentication/common/types";
3
+ import { useConfig } from "../../useConfig";
4
+ import { UseProviders } from "./types";
5
+
6
+ /**
7
+ * Hook to facilitate the retrieval of authentication providers.
8
+ * @returns authentication providers and a function to find a provider by id.
9
+ */
10
+
11
+ export const useProviders = (): UseProviders => {
12
+ const { config } = useConfig();
13
+ const providers = config.authentication?.providers;
14
+
15
+ const findProvider = useCallback(
16
+ (providerId: ProviderId) => {
17
+ return providers?.find(({ id }) => id === providerId);
18
+ },
19
+ [providers]
20
+ );
21
+
22
+ return { findProvider, providers };
23
+ };
@@ -0,0 +1,51 @@
1
+ import Router from "next/router";
2
+ import { useEffect } from "react";
3
+ import { escapeRegExp } from "../../../common/utils";
4
+ import {
5
+ AUTH_STATUS,
6
+ AuthState,
7
+ } from "../../../providers/authentication/auth/types";
8
+ import {
9
+ AUTHENTICATION_STATUS,
10
+ AuthenticationState,
11
+ } from "../../../providers/authentication/authentication/types";
12
+ import { ROUTE } from "../../../routes/constants";
13
+ import { useRouteHistory } from "../../useRouteHistory";
14
+ import { INACTIVITY_PARAM } from "./useSessionTimeout";
15
+
16
+ export const useSessionActive = (
17
+ authState: AuthState,
18
+ authenticationState: AuthenticationState
19
+ ): void => {
20
+ const { status: authStatus } = authState;
21
+ const { status: authenticationStatus } = authenticationState;
22
+ const { callbackUrl } = useRouteHistory(2);
23
+ const isReady =
24
+ authenticationStatus === AUTHENTICATION_STATUS.SETTLED &&
25
+ authStatus === AUTH_STATUS.SETTLED;
26
+
27
+ useEffect(() => {
28
+ if (!isReady) return;
29
+ Router.push(callbackUrl(transformRoute));
30
+ }, [callbackUrl, isReady]);
31
+ };
32
+
33
+ /**
34
+ * Finds the most recent route in the history that is not the login route and removes the inactivity timeout query parameter.
35
+ * The inactivity timeout query parameter is appended to a URL to indicate that a session has expired. This function iterates
36
+ * through the history of routes in reverse order, skipping any routes that lead to the login page, and returns the first route
37
+ * that isn't the login route with the inactivity timeout parameter removed.
38
+ * @param routes - An array of routes representing the navigation history, in order of navigation.
39
+ * @returns The most recent valid route without the inactivity timeout parameter, or `undefined` if no such route is found.
40
+ */
41
+ export function transformRoute(routes: string[]): string | undefined {
42
+ for (const route of routes) {
43
+ if (route === ROUTE.LOGIN) {
44
+ continue;
45
+ }
46
+ return route?.replace(
47
+ new RegExp(`\\?${escapeRegExp(INACTIVITY_PARAM)}(?:$|[=&].*)`),
48
+ ""
49
+ );
50
+ }
51
+ }
@@ -0,0 +1,25 @@
1
+ import { useMemo } from "react";
2
+ import { useRouteRoot } from "../../useRouteRoot";
3
+ import { INACTIVITY_PARAM } from "./useSessionTimeout";
4
+
5
+ export interface UseSessionCallbackUrl {
6
+ callbackUrl: string | undefined;
7
+ }
8
+
9
+ export const useSessionCallbackUrl = (): UseSessionCallbackUrl => {
10
+ const route = useRouteRoot();
11
+ const callbackUrl = useMemo(() => getUrl(route), [route]);
12
+ return { callbackUrl };
13
+ };
14
+
15
+ /**
16
+ * Returns the URL with the inactivity query parameter set to true.
17
+ * @param url - URL.
18
+ * @returns URL.
19
+ */
20
+ function getUrl(url: string): string | undefined {
21
+ if (typeof window === "undefined") return;
22
+ const urlObj = new URL(url, window.location.origin);
23
+ urlObj.searchParams.set(INACTIVITY_PARAM, "true");
24
+ return urlObj.href;
25
+ }
@@ -0,0 +1,10 @@
1
+ import { useIdleTimer } from "react-idle-timer";
2
+ import { IIdleTimerProps } from "react-idle-timer/dist/types/IIdleTimerProps";
3
+
4
+ /**
5
+ * Sets a session timeout that triggers when the user has been idle for the specified duration.
6
+ * @param idleTimerProps - The parameters for the session timeout.
7
+ */
8
+ export const useSessionIdleTimer = (idleTimerProps: IIdleTimerProps): void => {
9
+ useIdleTimer(idleTimerProps);
10
+ };
@@ -1,7 +1,7 @@
1
1
  import Router from "next/router";
2
2
  import { useCallback, useEffect, useState } from "react";
3
- import { useConfig } from "./useConfig";
4
- import { useLocation } from "./useLocation";
3
+ import { useConfig } from "../../useConfig";
4
+ import { useLocation } from "../../useLocation";
5
5
 
6
6
  export const INACTIVITY_PARAM = "inactivityTimeout";
7
7
 
@@ -1,10 +1,9 @@
1
- import { AuthContextProps } from "../../providers/authentication";
1
+ import { useTerraProfile } from "../../../providers/authentication/terra/hook";
2
2
  import {
3
- AUTHENTICATION_STATUS,
4
3
  LoginResponse,
5
4
  LoginStatus,
6
- } from "./common/entities";
7
- import { useAuthentication } from "./useAuthentication";
5
+ } from "../../../providers/authentication/terra/hooks/common/entities";
6
+ import { TerraProfileContextProps } from "../../../providers/authentication/terra/types";
8
7
 
9
8
  export interface OnboardingStatus {
10
9
  active: boolean;
@@ -19,7 +18,6 @@ export enum ONBOARDING_STEP {
19
18
 
20
19
  interface UseAuthenticationForm {
21
20
  isComplete: boolean;
22
- isReady: boolean;
23
21
  onboardingStatusByStep: Map<ONBOARDING_STEP, OnboardingStatus>;
24
22
  }
25
23
 
@@ -28,16 +26,13 @@ interface UseAuthenticationForm {
28
26
  * @returns onboarding steps and corresponding status.
29
27
  */
30
28
  export const useAuthenticationForm = (): UseAuthenticationForm => {
31
- const authentication = useAuthentication();
32
- const isReady =
33
- authentication.authenticationStatus === AUTHENTICATION_STATUS.COMPLETED;
29
+ const terraProfile = useTerraProfile();
34
30
  const loginStatuses =
35
- concatLoginStatuses(authentication).filter(filterLoginStatus);
31
+ concatLoginStatuses(terraProfile).filter(filterLoginStatus);
36
32
  const onboardingStatusByStep = getOnboardingStatusByStep(loginStatuses);
37
33
  const isComplete = isAuthenticationComplete(onboardingStatusByStep);
38
34
  return {
39
35
  isComplete,
40
- isReady,
41
36
  onboardingStatusByStep,
42
37
  };
43
38
  };
@@ -60,17 +55,17 @@ function isAuthenticationComplete(
60
55
 
61
56
  /**
62
57
  * Returns all login statuses, ordered by onboarding step.
63
- * @param authentication - Authentication.
58
+ * @param terraProfile - Terra profile.
64
59
  * @returns login statuses.
65
60
  */
66
61
  function concatLoginStatuses(
67
- authentication: AuthContextProps
62
+ terraProfile: TerraProfileContextProps
68
63
  ): LoginStatus<LoginResponse>[] {
69
64
  const {
70
65
  terraNIHProfileLoginStatus,
71
66
  terraProfileLoginStatus,
72
67
  terraTOSLoginStatus,
73
- } = authentication;
68
+ } = terraProfile;
74
69
  return [
75
70
  terraProfileLoginStatus,
76
71
  terraTOSLoginStatus,
@@ -1,5 +1,5 @@
1
- import { REQUEST_STATUS } from "./common/entities";
2
- import { useAuthentication } from "./useAuthentication";
1
+ import { useTerraProfile } from "../../../providers/authentication/terra/hook";
2
+ import { REQUEST_STATUS } from "../../../providers/authentication/terra/hooks/common/entities";
3
3
 
4
4
  const WARNING_WINDOW_SECONDS = 60 * 60 * 24 * 5; // 5 days.
5
5
 
@@ -15,8 +15,7 @@ interface UseAuthenticationNIHExpiry {
15
15
  * @returns NIH expiry status.
16
16
  */
17
17
  export const useAuthenticationNIHExpiry = (): UseAuthenticationNIHExpiry => {
18
- const authentication = useAuthentication();
19
- const { terraNIHProfileLoginStatus } = authentication;
18
+ const { terraNIHProfileLoginStatus } = useTerraProfile();
20
19
  const { requestStatus, response } = terraNIHProfileLoginStatus;
21
20
  const { linkExpireTime } = response || {};
22
21
  const isReady = requestStatus === REQUEST_STATUS.COMPLETED;
@@ -0,0 +1,5 @@
1
+ import { Credentials } from "../../../providers/authentication/credentials/types";
2
+
3
+ export interface UseToken {
4
+ token: Credentials;
5
+ }
@@ -0,0 +1,9 @@
1
+ import { useCredentials } from "../../../providers/authentication/credentials/hook";
2
+ import { UseToken } from "./types";
3
+
4
+ export const useToken = (): UseToken => {
5
+ const {
6
+ credentialsState: { credentials: token },
7
+ } = useCredentials();
8
+ return { token };
9
+ };
@@ -0,0 +1,19 @@
1
+ import { useReducer } from "react";
2
+ import { DEFAULT_TOKEN_STATE } from "../../../providers/authentication/token/constants";
3
+ import { tokenReducer } from "../../../providers/authentication/token/reducer";
4
+ import { TokenContextProps } from "../../../providers/authentication/token/types";
5
+
6
+ /**
7
+ * Token reducer: Manages the internal state of the token within the OAuth provider.
8
+ * This reducer handles the token locally until certain conditions are met.
9
+ * For releasing the token to the rest of the app, use the credentials reducer.
10
+ */
11
+
12
+ export const useTokenReducer = (): TokenContextProps => {
13
+ const [tokenState, tokenDispatch] = useReducer(
14
+ tokenReducer,
15
+ undefined,
16
+ () => DEFAULT_TOKEN_STATE
17
+ );
18
+ return { tokenDispatch, tokenState };
19
+ };
@@ -13,8 +13,8 @@ import { EntityMapper } from "../config/entities";
13
13
  import { getEntityConfig } from "../config/utils";
14
14
  import { ExploreActionKind } from "../providers/exploreState";
15
15
  import { DEFAULT_PAGINATION_STATE } from "../providers/exploreState/initializer/constants";
16
+ import { useToken } from "./authentication/token/useToken";
16
17
  import { useAsync } from "./useAsync";
17
- import { useAuthentication } from "./useAuthentication/useAuthentication";
18
18
  import { useConfig } from "./useConfig";
19
19
  import { useEntityService } from "./useEntityService";
20
20
  import { EXPLORE_MODE, ExploreMode, useExploreMode } from "./useExploreMode";
@@ -31,7 +31,7 @@ export const useEntityList = (
31
31
  staticResponse: AzulEntitiesStaticResponse
32
32
  ): void => {
33
33
  const { data: staticData, entityListType } = staticResponse;
34
- const { token } = useAuthentication();
34
+ const { token } = useToken();
35
35
  const { config } = useConfig();
36
36
  const { apiPath } = getEntityConfig(config.entities, entityListType);
37
37
  const exploreMode = useExploreMode();
@@ -2,8 +2,8 @@ import { useRouter } from "next/router";
2
2
  import { useEffect, useMemo } from "react";
3
3
  import { PARAMS_INDEX_UUID } from "../common/constants";
4
4
  import { EntityDetailViewProps } from "../views/EntityDetailView/entityDetailView";
5
+ import { useToken } from "./authentication/token/useToken";
5
6
  import { useAsync } from "./useAsync";
6
- import { useAuthentication } from "./useAuthentication/useAuthentication";
7
7
  import { useEntityService } from "./useEntityService";
8
8
  import { EXPLORE_MODE, useExploreMode } from "./useExploreMode";
9
9
  import { useExploreState } from "./useExploreState";
@@ -23,7 +23,7 @@ export const useFetchEntity = <T,>(
23
23
  detailViewProps?: EntityDetailViewProps
24
24
  ): UseEntityDetailResponse<T> => {
25
25
  const { data: staticData, entityListType } = detailViewProps || {};
26
- const { token } = useAuthentication();
26
+ const { token } = useToken();
27
27
  const exploreMode = useExploreMode();
28
28
  const { exploreState } = useExploreState();
29
29
  const { catalogState } = exploreState;
@@ -37,7 +37,7 @@ export const useFetchEntity = <T,>(
37
37
  () =>
38
38
  isFetchRequired(
39
39
  exploreMode !== EXPLORE_MODE.CS_FETCH_CS_FILTERING,
40
- Boolean(token),
40
+ Boolean(token), // TODO(cc), note a fetch is required if the token is true, but is unable to re-fetch on logout when token is undefined! Page is required to reload!
41
41
  Boolean(catalogState),
42
42
  Boolean(entityResponse)
43
43
  ),
@@ -6,8 +6,8 @@ import {
6
6
  import { Filters } from "../../common/entities";
7
7
  import { fetchEntitiesFromURL } from "../../entity/common/service";
8
8
  import { fetchQueryParams, SearchParams } from "../../utils/fetchQueryParams";
9
+ import { useToken } from "../authentication/token/useToken";
9
10
  import { useAsync } from "../useAsync";
10
- import { useAuthentication } from "../useAuthentication/useAuthentication";
11
11
  import { useFetchRequestURL } from "../useFetchRequestURL";
12
12
  import { FetchFilesFacets } from "./common/entities";
13
13
  import { bindEntitySearchResultsResponse } from "./common/utils";
@@ -26,8 +26,7 @@ export const useFetchFilesFacets = (
26
26
  searchParams: SearchParams | undefined,
27
27
  isEnabled: boolean
28
28
  ): FetchFilesFacets => {
29
- // Grab token from authentication.
30
- const { token } = useAuthentication();
29
+ const { token } = useToken();
31
30
  // Build request params.
32
31
  const requestParams = fetchQueryParams(filters, catalog, searchParams);
33
32
  // Build request URL.
@@ -6,8 +6,8 @@ import {
6
6
  import { Filters } from "../../common/entities";
7
7
  import { fetchSummaryFromURL } from "../../entity/api/service";
8
8
  import { fetchQueryParams } from "../../utils/fetchQueryParams";
9
+ import { useToken } from "../authentication/token/useToken";
9
10
  import { useAsync } from "../useAsync";
10
- import { useAuthentication } from "../useAuthentication/useAuthentication";
11
11
  import { useFetchRequestURL } from "../useFetchRequestURL";
12
12
  import { FetchFileSummary } from "./common/entities";
13
13
 
@@ -23,8 +23,7 @@ export const useFetchSummary = (
23
23
  catalog: string,
24
24
  isEnabled: boolean
25
25
  ): FetchFileSummary => {
26
- // Grab token from authentication.
27
- const { token } = useAuthentication();
26
+ const { token } = useToken();
28
27
  // Build request params.
29
28
  const requestParams = fetchQueryParams(filters, catalog, undefined);
30
29
  // Build request URL.
@@ -4,9 +4,9 @@ import {
4
4
  FILE_LOCATION_SUCCESSFULLY,
5
5
  } from "../apis/azul/common/constants";
6
6
  import { FileLocationResponse } from "../apis/azul/common/entities";
7
+ import { useToken } from "./authentication/token/useToken";
7
8
  import { METHOD } from "./types";
8
9
  import { useAsync } from "./useAsync";
9
- import { useAuthentication } from "./useAuthentication/useAuthentication";
10
10
 
11
11
  export interface FileLocation {
12
12
  commandLine?: { [key: string]: string };
@@ -123,8 +123,7 @@ export const useRequestFileLocation = (
123
123
  url?: string,
124
124
  method?: Method
125
125
  ): UseRequestFileLocationResult => {
126
- // Grab token from authentication.
127
- const { token } = useAuthentication();
126
+ const { token } = useToken();
128
127
  const {
129
128
  data,
130
129
  isIdle,
@@ -0,0 +1,65 @@
1
+ import Router, { useRouter } from "next/router";
2
+ import { useCallback, useEffect, useRef } from "react";
3
+ import { useRouteRoot } from "./useRouteRoot";
4
+
5
+ const ROUTE_CHANGE_EVENT = "routeChangeComplete";
6
+ const MAX_HISTORY_LENGTH = 4;
7
+
8
+ export type TransformRouteFn = (routes: string[]) => string | undefined;
9
+
10
+ export interface UseRouteHistory {
11
+ callbackUrl: (transformFn?: TransformRouteFn) => string;
12
+ }
13
+
14
+ export function useRouteHistory(
15
+ maxHistory = MAX_HISTORY_LENGTH
16
+ ): UseRouteHistory {
17
+ const { asPath } = useRouter();
18
+ const rootPath = useRouteRoot();
19
+ const historyRef = useRef<string[]>([asPath]);
20
+
21
+ const onRouteChange = useCallback(
22
+ (route: string): void => {
23
+ if (route === historyRef.current[0]) return;
24
+ historyRef.current.unshift(route);
25
+ if (historyRef.current.length > maxHistory) {
26
+ historyRef.current.pop();
27
+ }
28
+ },
29
+ [maxHistory]
30
+ );
31
+
32
+ useEffect(() => {
33
+ Router.events.on(ROUTE_CHANGE_EVENT, onRouteChange);
34
+ return (): void => {
35
+ Router.events.off(ROUTE_CHANGE_EVENT, onRouteChange);
36
+ };
37
+ }, [onRouteChange]);
38
+
39
+ const callbackUrl = useCallback(
40
+ (transformFn?: TransformRouteFn): string =>
41
+ getCallbackUrl(historyRef.current, rootPath, transformFn),
42
+ [rootPath]
43
+ );
44
+
45
+ return { callbackUrl };
46
+ }
47
+
48
+ /**
49
+ * Generates a callback URL based on the provided history and root path.
50
+ * Returns the callback URL determined by the transform function or the second item in history and if neither condition is met, returns the root path.
51
+ * @param history - Navigation history.
52
+ * @param rootPath - The default root path to return if no other conditions are met.
53
+ * @param [transformFn] - An optional function that transforms the history array to a specific route.
54
+ * @returns {string} - The callback UR.
55
+ */
56
+ export function getCallbackUrl(
57
+ history: string[],
58
+ rootPath: string,
59
+ transformFn?: TransformRouteFn
60
+ ): string {
61
+ if (transformFn) {
62
+ return transformFn(history) || rootPath;
63
+ }
64
+ return history[1] || rootPath;
65
+ }
@@ -0,0 +1,11 @@
1
+ import { useRouter } from "next/router";
2
+ import { useMemo } from "react";
3
+ import { useConfig } from "./useConfig";
4
+
5
+ export function useRouteRoot(): string {
6
+ const {
7
+ config: { redirectRootToPath: path },
8
+ } = useConfig();
9
+ const { basePath } = useRouter();
10
+ return useMemo(() => `${basePath}${path}`, [basePath, path]);
11
+ }
@@ -1,7 +1,7 @@
1
1
  import { useEffect } from "react";
2
2
  import { AzulSummaryResponse } from "../apis/azul/common/entities";
3
+ import { useToken } from "./authentication/token/useToken";
3
4
  import { useAsync } from "./useAsync";
4
- import { useAuthentication } from "./useAuthentication/useAuthentication";
5
5
  import { useConfig } from "./useConfig";
6
6
  import { useEntityService } from "./useEntityService";
7
7
  import { useExploreState } from "./useExploreState";
@@ -16,7 +16,7 @@ interface UseSummaryResponse {
16
16
  * @returns an object with the loaded data and a flag indicating is the data is loading
17
17
  */
18
18
  export const useSummary = (): UseSummaryResponse => {
19
- const { token } = useAuthentication();
19
+ const { token } = useToken();
20
20
  const { config } = useConfig();
21
21
  const { exploreState } = useExploreState();
22
22
  const { filterState } = exploreState;
@@ -39,7 +39,7 @@ export const useSummary = (): UseSummaryResponse => {
39
39
  return { isLoading: false }; //TODO: return a summary placeholder
40
40
  }
41
41
 
42
- // Return the fetch status and summary data once fetch is complete..
42
+ // Return the fetch status and summary data once fetch is complete.
43
43
  return {
44
44
  isLoading: apiIsLoading,
45
45
  response,