@databiosphere/findable-ui 21.3.0 → 22.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 (289) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/.storybook/main.ts +7 -1
  3. package/CHANGELOG.md +25 -0
  4. package/lib/components/DataDictionary/components/Entities/constants.d.ts +2 -0
  5. package/lib/components/DataDictionary/components/Entities/constants.js +6 -0
  6. package/lib/components/DataDictionary/components/Entities/entities.d.ts +2 -0
  7. package/lib/components/DataDictionary/components/Entities/entities.js +7 -0
  8. package/lib/components/DataDictionary/components/Entities/types.d.ts +4 -0
  9. package/lib/components/DataDictionary/components/Entities/types.js +1 -0
  10. package/lib/components/DataDictionary/components/Entity/constants.d.ts +2 -0
  11. package/lib/components/DataDictionary/components/Entity/constants.js +5 -0
  12. package/lib/components/DataDictionary/components/Entity/entity.d.ts +2 -0
  13. package/lib/components/DataDictionary/components/Entity/entity.js +14 -0
  14. package/lib/components/DataDictionary/components/Entity/types.d.ts +4 -0
  15. package/lib/components/DataDictionary/components/Entity/types.js +1 -0
  16. package/lib/components/DataDictionary/components/Table/columns/columnDef.d.ts +6 -0
  17. package/lib/components/DataDictionary/components/Table/columns/columnDef.js +33 -0
  18. package/lib/components/DataDictionary/components/Table/columns/columnIdentifier.d.ts +5 -0
  19. package/lib/components/DataDictionary/components/Table/columns/columnIdentifier.js +5 -0
  20. package/lib/components/DataDictionary/components/Table/columns/types.d.ts +2 -0
  21. package/lib/components/DataDictionary/components/Table/columns/types.js +1 -0
  22. package/lib/components/DataDictionary/components/Table/components/BasicCell/basicCell.d.ts +2 -0
  23. package/lib/components/DataDictionary/components/Table/components/BasicCell/basicCell.js +6 -0
  24. package/lib/components/DataDictionary/components/Table/components/BasicCell/types.d.ts +4 -0
  25. package/lib/components/DataDictionary/components/Table/components/BasicCell/types.js +1 -0
  26. package/lib/components/DataDictionary/components/Table/hook.d.ts +3 -0
  27. package/lib/components/DataDictionary/components/Table/hook.js +11 -0
  28. package/lib/components/DataDictionary/components/Table/options/core/constants.d.ts +3 -0
  29. package/lib/components/DataDictionary/components/Table/options/core/constants.js +7 -0
  30. package/lib/components/DataDictionary/components/Table/options/hook.d.ts +3 -0
  31. package/lib/components/DataDictionary/components/Table/options/hook.js +8 -0
  32. package/lib/components/DataDictionary/components/Table/options/sorting/constants.d.ts +3 -0
  33. package/lib/components/DataDictionary/components/Table/options/sorting/constants.js +3 -0
  34. package/lib/components/DataDictionary/components/Table/table.d.ts +2 -0
  35. package/lib/components/DataDictionary/components/Table/table.js +17 -0
  36. package/lib/components/DataDictionary/components/Table/table.styles.d.ts +3 -0
  37. package/lib/components/DataDictionary/components/Table/table.styles.js +5 -0
  38. package/lib/components/DataDictionary/components/Table/types.d.ts +5 -0
  39. package/lib/components/DataDictionary/components/Table/types.js +1 -0
  40. package/lib/components/DataDictionary/dataDictionary.d.ts +2 -0
  41. package/lib/components/DataDictionary/dataDictionary.js +9 -0
  42. package/lib/components/DataDictionary/dataDictionary.styles.d.ts +1 -0
  43. package/lib/components/DataDictionary/dataDictionary.styles.js +7 -0
  44. package/lib/components/DataDictionary/hooks/UseDataDictionary/hook.d.ts +2 -0
  45. package/lib/components/DataDictionary/hooks/UseDataDictionary/hook.js +5 -0
  46. package/lib/components/DataDictionary/hooks/UseDataDictionary/types.d.ts +4 -0
  47. package/lib/components/DataDictionary/hooks/UseDataDictionary/types.js +1 -0
  48. package/lib/components/Detail/detail.stories.d.ts +36 -5
  49. package/lib/components/Detail/detail.stories.js +27 -18
  50. package/lib/components/Export/components/ExportForm/components/ExportButton/exportButton.js +6 -1
  51. package/lib/components/Export/components/ExportMethod/exportMethod.stories.d.ts +22 -5
  52. package/lib/components/Export/components/ExportMethod/exportMethod.stories.js +9 -9
  53. package/lib/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/components/FileManifestDownload/fileManifestDownload.js +5 -2
  54. package/lib/components/Filter/components/Filter/filter.stories.d.ts +25 -5
  55. package/lib/components/Filter/components/Filter/filter.stories.js +25 -24
  56. package/lib/components/Filter/components/FilterLabel/filterLabel.stories.d.ts +31 -5
  57. package/lib/components/Filter/components/FilterLabel/filterLabel.stories.js +10 -8
  58. package/lib/components/Filter/components/FilterMenu/filterMenu.stories.d.ts +38 -5
  59. package/lib/components/Filter/components/FilterMenu/filterMenu.stories.js +107 -104
  60. package/lib/components/Filter/components/FilterTag/filterTag.stories.d.ts +16 -5
  61. package/lib/components/Filter/components/FilterTag/filterTag.stories.js +8 -7
  62. package/lib/components/Filter/components/FilterTags/filterTags.stories.d.ts +18 -5
  63. package/lib/components/Filter/components/FilterTags/filterTags.stories.js +40 -39
  64. package/lib/components/Index/components/AzulFileDownload/azulFileDownload.js +10 -5
  65. package/lib/components/Index/components/AzulFileDownload/azulFileDownload.stories.d.ts +8 -5
  66. package/lib/components/Index/components/AzulFileDownload/azulFileDownload.stories.js +9 -6
  67. package/lib/components/Index/components/Hero/components/Summaries/summaries.stories.d.ts +13 -5
  68. package/lib/components/Index/components/Hero/components/Summaries/summaries.stories.js +11 -11
  69. package/lib/components/Index/components/Hero/hero.stories.d.ts +23 -5
  70. package/lib/components/Index/components/Hero/hero.stories.js +8 -6
  71. package/lib/components/Index/components/NTagCell/nTagCell.stories.d.ts +16 -5
  72. package/lib/components/Index/components/NTagCell/nTagCell.stories.js +8 -8
  73. package/lib/components/Index/index.stories.js +2 -1
  74. package/lib/components/Layout/components/BackPage/backPageView.stories.d.ts +31 -5
  75. package/lib/components/Layout/components/BackPage/backPageView.stories.js +27 -18
  76. package/lib/components/Layout/components/Footer/footer.stories.d.ts +24 -3
  77. package/lib/components/Layout/components/Footer/footer.stories.js +4 -3
  78. package/lib/components/Layout/components/Header/components/Content/components/Navigation/components/NavigationMenu/navigationMenu.js +1 -1
  79. package/lib/components/Layout/components/Header/components/Content/components/Navigation/components/NavigationMenuItems/navigationMenuItems.js +20 -21
  80. package/lib/components/Layout/components/Header/components/Content/components/Navigation/constants.d.ts +1 -0
  81. package/lib/components/Layout/components/Header/components/Content/components/Navigation/constants.js +1 -0
  82. package/lib/components/Layout/components/Header/components/Content/components/Navigation/navigation.d.ts +2 -1
  83. package/lib/components/Layout/components/Header/components/Content/components/Navigation/navigation.js +16 -17
  84. package/lib/components/Layout/components/Header/header.js +2 -1
  85. package/lib/components/Layout/components/Header/header.stories.js +1 -1
  86. package/lib/components/Layout/components/Sidebar/components/SidebarLabel/sidebarLabel.stories.d.ts +13 -5
  87. package/lib/components/Layout/components/Sidebar/components/SidebarLabel/sidebarLabel.stories.js +6 -6
  88. package/lib/components/Layout/components/Sidebar/sidebar.stories.js +2 -0
  89. package/lib/components/Links/links.stories.d.ts +13 -5
  90. package/lib/components/Links/links.stories.js +14 -14
  91. package/lib/components/Loading/loading.stories.d.ts +34 -5
  92. package/lib/components/Loading/loading.stories.js +8 -6
  93. package/lib/components/Login/components/Button/types.d.ts +1 -1
  94. package/lib/components/Login/components/Buttons/buttons.d.ts +2 -0
  95. package/lib/components/Login/components/Buttons/buttons.js +5 -0
  96. package/lib/components/Login/components/Buttons/types.d.ts +8 -0
  97. package/lib/components/Login/components/Buttons/types.js +1 -0
  98. package/lib/components/Login/components/Section/components/Consent/consent.d.ts +3 -0
  99. package/lib/components/Login/components/Section/components/Consent/consent.js +14 -0
  100. package/lib/components/Login/components/Section/components/Consent/consent.styles.d.ts +7 -0
  101. package/lib/components/Login/components/Section/components/Consent/consent.styles.js +14 -0
  102. package/lib/components/Login/components/Section/components/Consent/types.d.ts +6 -0
  103. package/lib/components/Login/components/Section/components/Consent/types.js +1 -0
  104. package/lib/components/Login/components/Section/components/Warning/warning.d.ts +3 -0
  105. package/lib/components/Login/components/Section/components/Warning/warning.js +9 -0
  106. package/lib/components/Login/hooks/useUserConsent/types.d.ts +10 -0
  107. package/lib/components/Login/hooks/useUserConsent/types.js +1 -0
  108. package/lib/components/Login/hooks/useUserConsent/useUserConsent.d.ts +2 -0
  109. package/lib/components/Login/hooks/useUserConsent/useUserConsent.js +24 -0
  110. package/lib/components/Login/hooks/useUserLogin/types.d.ts +6 -0
  111. package/lib/components/Login/hooks/useUserLogin/types.js +1 -0
  112. package/lib/components/Login/hooks/useUserLogin/useUserLogin.d.ts +2 -0
  113. package/lib/components/Login/hooks/useUserLogin/useUserLogin.js +21 -0
  114. package/lib/components/Project/components/CollaboratingOrganizations/collaboratingOrganizations.stories.d.ts +13 -5
  115. package/lib/components/Project/components/CollaboratingOrganizations/collaboratingOrganizations.stories.js +20 -20
  116. package/lib/components/Project/components/Contacts/contacts.stories.d.ts +13 -5
  117. package/lib/components/Project/components/Contacts/contacts.stories.js +18 -18
  118. package/lib/components/Project/components/Contributors/contributors.stories.d.ts +8 -5
  119. package/lib/components/Project/components/Contributors/contributors.stories.js +27 -27
  120. package/lib/components/Project/components/DataCurators/dataCurators.stories.d.ts +13 -5
  121. package/lib/components/Project/components/DataCurators/dataCurators.stories.js +7 -7
  122. package/lib/components/Project/components/DataReleasePolicy/dataReleasePolicy.stories.d.ts +8 -5
  123. package/lib/components/Project/components/DataReleasePolicy/dataReleasePolicy.stories.js +3 -4
  124. package/lib/components/Project/components/Description/description.stories.d.ts +8 -5
  125. package/lib/components/Project/components/Description/description.stories.js +6 -6
  126. package/lib/components/Project/components/Details/details.stories.d.ts +16 -5
  127. package/lib/components/Project/components/Details/details.stories.js +7 -7
  128. package/lib/components/Project/components/Publications/publications.stories.d.ts +8 -5
  129. package/lib/components/Project/components/Publications/publications.stories.js +17 -17
  130. package/lib/components/Project/components/SupplementaryLinks/supplementaryLinks.stories.d.ts +8 -5
  131. package/lib/components/Project/components/SupplementaryLinks/supplementaryLinks.stories.js +18 -18
  132. package/lib/components/Support/components/SupportRequest/components/SupportRequestForm/common/constants.d.ts +16 -33
  133. package/lib/components/Support/components/SupportRequest/components/SupportRequestForm/common/constants.js +10 -9
  134. package/lib/components/Support/components/SupportRequest/components/SupportRequestForm/supportRequestForm.js +26 -14
  135. package/lib/components/Support/components/ViewSupport/types.d.ts +6 -0
  136. package/lib/components/Support/components/ViewSupport/types.js +1 -0
  137. package/lib/components/Support/components/ViewSupport/viewSupport.d.ts +2 -9
  138. package/lib/components/Support/components/ViewSupport/viewSupport.js +7 -3
  139. package/lib/components/Table/components/Pagination/pagination.stories.d.ts +28 -5
  140. package/lib/components/Table/components/Pagination/pagination.stories.js +11 -7
  141. package/lib/components/common/Accordion/accordion.stories.d.ts +6 -3
  142. package/lib/components/common/Accordion/accordion.stories.js +2 -1
  143. package/lib/components/common/Breadcrumbs/breadcrumbs.stories.d.ts +10 -7
  144. package/lib/components/common/Breadcrumbs/breadcrumbs.stories.js +42 -43
  145. package/lib/components/common/Button/components/CallToActionButton/callToActionButton.stories.d.ts +9 -6
  146. package/lib/components/common/Button/components/CallToActionButton/callToActionButton.stories.js +13 -15
  147. package/lib/components/common/Button/components/HelpIconButton/helpIconButton.stories.d.ts +19 -2
  148. package/lib/components/common/Button/components/HelpIconButton/helpIconButton.stories.js +2 -2
  149. package/lib/components/common/Card/card.stories.d.ts +6 -3
  150. package/lib/components/common/Card/card.stories.js +2 -1
  151. package/lib/components/common/Code/code.stories.d.ts +5 -3
  152. package/lib/components/common/CopyToClipboard/copyToClipboard.stories.d.ts +11 -3
  153. package/lib/components/common/CopyToClipboard/copyToClipboard.stories.js +2 -1
  154. package/lib/components/common/CustomIcon/components/CloseIcon/closeIcon.d.ts +2 -0
  155. package/lib/components/common/CustomIcon/components/CloseIcon/closeIcon.js +6 -0
  156. package/lib/components/common/LoginDialog/constants.d.ts +6 -0
  157. package/lib/components/common/LoginDialog/constants.js +21 -0
  158. package/lib/components/common/LoginDialog/loginDialog.d.ts +2 -0
  159. package/lib/components/common/LoginDialog/loginDialog.js +27 -0
  160. package/lib/components/common/LoginDialog/loginDialog.styles.d.ts +3 -0
  161. package/lib/components/common/LoginDialog/loginDialog.styles.js +50 -0
  162. package/lib/components/common/LoginDialog/types.d.ts +4 -0
  163. package/lib/components/common/LoginDialog/types.js +1 -0
  164. package/lib/components/common/Section/components/SectionTitle/sectionTitle.stories.d.ts +13 -5
  165. package/lib/components/common/Section/components/SectionTitle/sectionTitle.stories.js +6 -6
  166. package/lib/components/common/Socials/socials.stories.d.ts +11 -3
  167. package/lib/components/common/Socials/socials.stories.js +2 -1
  168. package/lib/components/common/StaticImage/staticImage.stories.d.ts +22 -5
  169. package/lib/components/common/StaticImage/staticImage.stories.js +8 -8
  170. package/lib/components/common/StatusIcon/statusIcon.stories.d.ts +19 -5
  171. package/lib/components/common/StatusIcon/statusIcon.stories.js +7 -7
  172. package/lib/components/common/Tag/tag.stories.d.ts +15 -5
  173. package/lib/components/common/Tag/tag.stories.js +7 -5
  174. package/lib/components/common/ToggleButtonGroup/toggleButtonGroup.stories.d.ts +18 -5
  175. package/lib/components/common/ToggleButtonGroup/toggleButtonGroup.stories.js +19 -19
  176. package/lib/config/entities.d.ts +1 -0
  177. package/lib/providers/loginGuard/common/types.d.ts +18 -0
  178. package/lib/providers/loginGuard/common/types.js +1 -0
  179. package/lib/providers/loginGuard/context.d.ts +6 -0
  180. package/lib/providers/loginGuard/context.js +10 -0
  181. package/lib/providers/loginGuard/hook.d.ts +9 -0
  182. package/lib/providers/loginGuard/hook.js +12 -0
  183. package/lib/providers/loginGuard/provider.d.ts +11 -0
  184. package/lib/providers/loginGuard/provider.js +55 -0
  185. package/lib/styles/common/mui/typography.d.ts +1 -0
  186. package/lib/styles/common/mui/typography.js +8 -0
  187. package/lib/views/DataDictionaryView/dataDictionaryView.d.ts +2 -0
  188. package/lib/views/DataDictionaryView/dataDictionaryView.js +5 -0
  189. package/package.json +13 -13
  190. package/src/components/DataDictionary/components/Entities/constants.ts +8 -0
  191. package/src/components/DataDictionary/components/Entities/entities.tsx +15 -0
  192. package/src/components/DataDictionary/components/Entities/types.ts +5 -0
  193. package/src/components/DataDictionary/components/Entity/constants.ts +7 -0
  194. package/src/components/DataDictionary/components/Entity/entity.tsx +28 -0
  195. package/src/components/DataDictionary/components/Entity/types.ts +5 -0
  196. package/src/components/DataDictionary/components/Table/columns/columnDef.ts +47 -0
  197. package/src/components/DataDictionary/components/Table/columns/columnIdentifier.ts +5 -0
  198. package/src/components/DataDictionary/components/Table/columns/types.ts +3 -0
  199. package/src/components/DataDictionary/components/Table/components/BasicCell/basicCell.tsx +8 -0
  200. package/src/components/DataDictionary/components/Table/components/BasicCell/types.ts +5 -0
  201. package/src/components/DataDictionary/components/Table/hook.ts +13 -0
  202. package/src/components/DataDictionary/components/Table/options/core/constants.ts +12 -0
  203. package/src/components/DataDictionary/components/Table/options/hook.ts +14 -0
  204. package/src/components/DataDictionary/components/Table/options/sorting/constants.ts +9 -0
  205. package/src/components/DataDictionary/components/Table/table.styles.ts +6 -0
  206. package/src/components/DataDictionary/components/Table/table.tsx +35 -0
  207. package/src/components/DataDictionary/components/Table/types.ts +6 -0
  208. package/src/components/DataDictionary/dataDictionary.styles.ts +8 -0
  209. package/src/components/DataDictionary/dataDictionary.tsx +16 -0
  210. package/src/components/DataDictionary/hooks/UseDataDictionary/hook.ts +9 -0
  211. package/src/components/DataDictionary/hooks/UseDataDictionary/types.ts +5 -0
  212. package/src/components/Detail/detail.stories.tsx +41 -36
  213. package/src/components/Export/components/ExportForm/components/ExportButton/exportButton.tsx +8 -1
  214. package/src/components/Export/components/ExportMethod/exportMethod.stories.tsx +13 -13
  215. package/src/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/components/FileManifestDownload/fileManifestDownload.tsx +11 -3
  216. package/src/components/Filter/components/Filter/filter.stories.tsx +29 -28
  217. package/src/components/Filter/components/FilterLabel/filterLabel.stories.tsx +14 -12
  218. package/src/components/Filter/components/FilterMenu/filterMenu.stories.tsx +111 -108
  219. package/src/components/Filter/components/FilterTag/filterTag.stories.tsx +12 -11
  220. package/src/components/Filter/components/FilterTags/filterTags.stories.tsx +44 -43
  221. package/src/components/Index/components/AzulFileDownload/azulFileDownload.stories.tsx +13 -10
  222. package/src/components/Index/components/AzulFileDownload/azulFileDownload.tsx +12 -5
  223. package/src/components/Index/components/Hero/components/Summaries/summaries.stories.tsx +15 -15
  224. package/src/components/Index/components/Hero/hero.stories.tsx +12 -8
  225. package/src/components/Index/components/NTagCell/nTagCell.stories.tsx +12 -12
  226. package/src/components/Index/index.stories.tsx +2 -1
  227. package/src/components/Layout/components/BackPage/backPageView.stories.tsx +42 -36
  228. package/src/components/Layout/components/Footer/footer.stories.tsx +6 -4
  229. package/src/components/Layout/components/Header/components/Content/components/Navigation/components/NavigationMenu/navigationMenu.tsx +1 -1
  230. package/src/components/Layout/components/Header/components/Content/components/Navigation/components/NavigationMenuItems/navigationMenuItems.tsx +16 -15
  231. package/src/components/Layout/components/Header/components/Content/components/Navigation/constants.ts +1 -0
  232. package/src/components/Layout/components/Header/components/Content/components/Navigation/navigation.tsx +26 -18
  233. package/src/components/Layout/components/Header/header.stories.tsx +1 -1
  234. package/src/components/Layout/components/Header/header.tsx +6 -1
  235. package/src/components/Layout/components/Sidebar/components/SidebarLabel/sidebarLabel.stories.tsx +10 -10
  236. package/src/components/Layout/components/Sidebar/sidebar.stories.tsx +2 -0
  237. package/src/components/Links/links.stories.tsx +18 -18
  238. package/src/components/Loading/loading.stories.tsx +12 -10
  239. package/src/components/Login/components/Button/types.ts +1 -1
  240. package/src/components/Login/components/Buttons/buttons.tsx +22 -0
  241. package/src/components/Login/components/Buttons/types.ts +9 -0
  242. package/src/components/Login/components/Section/components/Consent/consent.styles.ts +15 -0
  243. package/src/components/Login/components/Section/components/Consent/consent.tsx +30 -0
  244. package/src/components/Login/components/Section/components/Consent/types.ts +10 -0
  245. package/src/components/Login/components/Section/components/Warning/warning.tsx +24 -0
  246. package/src/components/Login/hooks/useUserConsent/types.ts +11 -0
  247. package/src/components/Login/hooks/useUserConsent/useUserConsent.ts +32 -0
  248. package/src/components/Login/hooks/useUserLogin/types.ts +8 -0
  249. package/src/components/Login/hooks/useUserLogin/useUserLogin.ts +29 -0
  250. package/src/components/Project/components/CollaboratingOrganizations/collaboratingOrganizations.stories.tsx +24 -25
  251. package/src/components/Project/components/Contacts/contacts.stories.tsx +22 -22
  252. package/src/components/Project/components/Contributors/contributors.stories.tsx +31 -31
  253. package/src/components/Project/components/DataCurators/dataCurators.stories.tsx +11 -11
  254. package/src/components/Project/components/DataReleasePolicy/dataReleasePolicy.stories.tsx +7 -8
  255. package/src/components/Project/components/Description/description.stories.tsx +11 -11
  256. package/src/components/Project/components/Details/details.stories.tsx +11 -11
  257. package/src/components/Project/components/Publications/publications.stories.tsx +23 -23
  258. package/src/components/Project/components/SupplementaryLinks/supplementaryLinks.stories.tsx +22 -22
  259. package/src/components/Support/components/SupportRequest/components/SupportRequestForm/common/constants.ts +10 -9
  260. package/src/components/Support/components/SupportRequest/components/SupportRequestForm/supportRequestForm.tsx +44 -15
  261. package/src/components/Support/components/ViewSupport/types.ts +9 -0
  262. package/src/components/Support/components/ViewSupport/viewSupport.tsx +6 -10
  263. package/src/components/Table/components/Pagination/pagination.stories.tsx +15 -11
  264. package/src/components/common/Accordion/accordion.stories.tsx +4 -2
  265. package/src/components/common/Breadcrumbs/breadcrumbs.stories.tsx +46 -47
  266. package/src/components/common/Button/components/CallToActionButton/callToActionButton.stories.tsx +17 -20
  267. package/src/components/common/Button/components/HelpIconButton/helpIconButton.stories.tsx +4 -4
  268. package/src/components/common/Card/card.stories.tsx +4 -2
  269. package/src/components/common/Code/code.stories.tsx +1 -1
  270. package/src/components/common/CopyToClipboard/copyToClipboard.stories.tsx +4 -2
  271. package/src/components/common/CustomIcon/components/CloseIcon/closeIcon.tsx +17 -0
  272. package/src/components/common/LoginDialog/constants.ts +33 -0
  273. package/src/components/common/LoginDialog/loginDialog.styles.ts +51 -0
  274. package/src/components/common/LoginDialog/loginDialog.tsx +56 -0
  275. package/src/components/common/LoginDialog/types.ts +4 -0
  276. package/src/components/common/Section/components/SectionTitle/sectionTitle.stories.tsx +10 -10
  277. package/src/components/common/Socials/socials.stories.tsx +4 -2
  278. package/src/components/common/StaticImage/staticImage.stories.tsx +12 -12
  279. package/src/components/common/StatusIcon/statusIcon.stories.tsx +11 -11
  280. package/src/components/common/Tag/tag.stories.tsx +11 -9
  281. package/src/components/common/ToggleButtonGroup/toggleButtonGroup.stories.tsx +23 -23
  282. package/src/config/entities.ts +1 -0
  283. package/src/providers/loginGuard/common/types.ts +21 -0
  284. package/src/providers/loginGuard/context.ts +12 -0
  285. package/src/providers/loginGuard/hook.ts +14 -0
  286. package/src/providers/loginGuard/provider.tsx +76 -0
  287. package/src/styles/common/mui/typography.ts +9 -0
  288. package/src/views/DataDictionaryView/dataDictionaryView.tsx +9 -0
  289. package/tests/provider.test.tsx +191 -0
@@ -0,0 +1,10 @@
1
+ import { createContext } from "react";
2
+ /**
3
+ * LoginGuardContext provides a way to trigger a login process. Default value is to
4
+ * call the callback immediately, if specified.
5
+ */
6
+ export const LoginGuardContext = createContext({
7
+ requireLogin: (callback) => {
8
+ callback?.();
9
+ },
10
+ });
@@ -0,0 +1,9 @@
1
+ import { LoginGuardContextProps } from "./common/types";
2
+ /**
3
+ * Custom hook to access the LoginGuard context. This hook returns an object
4
+ * containing the "requireLogin" function, which allows triggering the application's
5
+ * login process.
6
+ *
7
+ * @returns The current LoginGuard context value.
8
+ */
9
+ export declare function useLoginGuard(): LoginGuardContextProps;
@@ -0,0 +1,12 @@
1
+ import { useContext } from "react";
2
+ import { LoginGuardContext } from "./context";
3
+ /**
4
+ * Custom hook to access the LoginGuard context. This hook returns an object
5
+ * containing the "requireLogin" function, which allows triggering the application's
6
+ * login process.
7
+ *
8
+ * @returns The current LoginGuard context value.
9
+ */
10
+ export function useLoginGuard() {
11
+ return useContext(LoginGuardContext);
12
+ }
@@ -0,0 +1,11 @@
1
+ import { LoginGuardProviderProps } from "./common/types";
2
+ /**
3
+ * LoginGuardProvider is responsible for intercepting actions that require user authentication.
4
+ * It provides a "requireLogin" function via context. When a protected action is triggered while the
5
+ * user is unauthenticated, the LoginDialog is displayed. Upon successful authentication, the saved
6
+ * callback is invoked.
7
+ *
8
+ * @param {LoginGuardProviderProps} props - The provider props that include children.
9
+ * @returns The provider component.
10
+ */
11
+ export declare function LoginGuardProvider({ children, }: LoginGuardProviderProps): JSX.Element;
@@ -0,0 +1,55 @@
1
+ import React, { useCallback, useEffect, useRef, useState } from "react";
2
+ import { LoginDialog } from "../../components/common/LoginDialog/loginDialog";
3
+ import { useAuthenticationConfig } from "../../hooks/authentication/config/useAuthenticationConfig";
4
+ import { useConfig } from "../../hooks/useConfig";
5
+ import { useAuth } from "../authentication/auth/hook";
6
+ import { LoginGuardContext } from "./context";
7
+ /**
8
+ * LoginGuardProvider is responsible for intercepting actions that require user authentication.
9
+ * It provides a "requireLogin" function via context. When a protected action is triggered while the
10
+ * user is unauthenticated, the LoginDialog is displayed. Upon successful authentication, the saved
11
+ * callback is invoked.
12
+ *
13
+ * @param {LoginGuardProviderProps} props - The provider props that include children.
14
+ * @returns The provider component.
15
+ */
16
+ export function LoginGuardProvider({ children, }) {
17
+ // Dialog open state.
18
+ const [open, setOpen] = useState(false);
19
+ // Use ref to store the callback without triggering re-render.
20
+ const callbackRef = useRef(undefined);
21
+ // Determine if authentication is enabled.
22
+ const authConfig = useAuthenticationConfig();
23
+ // Determine if authentication is required for downloads and exports.
24
+ const { config: { exportsRequireAuth }, } = useConfig();
25
+ // Get the user's authenticated state.
26
+ const { authState: { isAuthenticated }, } = useAuth();
27
+ // If the user authenticates, close dialog then fire and clear callback.
28
+ useEffect(() => {
29
+ if (isAuthenticated) {
30
+ setOpen(false);
31
+ callbackRef.current?.();
32
+ // Clear callback after firing.
33
+ callbackRef.current = undefined;
34
+ }
35
+ }, [isAuthenticated]);
36
+ // Handler to close the dialog.
37
+ const onClose = useCallback(() => {
38
+ setOpen(false);
39
+ // Clear any stored callback.
40
+ callbackRef.current = undefined;
41
+ }, []);
42
+ // Block actions that require authentication, or fire callback if already authenticated.
43
+ const requireLogin = useCallback((cb) => {
44
+ if (authConfig && exportsRequireAuth && !isAuthenticated) {
45
+ callbackRef.current = cb;
46
+ setOpen(true);
47
+ }
48
+ else {
49
+ cb?.();
50
+ }
51
+ }, [authConfig, exportsRequireAuth, isAuthenticated]);
52
+ return (React.createElement(LoginGuardContext.Provider, { value: { requireLogin } },
53
+ children,
54
+ React.createElement(LoginDialog, { open: open, onClose: onClose })));
55
+ }
@@ -1,2 +1,3 @@
1
1
  import { TypographyOwnProps } from "@mui/material";
2
+ export declare const COLOR: Record<string, TypographyOwnProps["color"]>;
2
3
  export declare const VARIANT: Record<string, TypographyOwnProps["variant"]>;
@@ -1,3 +1,11 @@
1
+ export const COLOR = {
2
+ INHERIT: "inherit",
3
+ INK_LIGHT: "ink.light",
4
+ INK_MAIN: "ink.main",
5
+ };
1
6
  export const VARIANT = {
2
7
  INHERIT: "inherit",
8
+ TEXT_BODY_400: "text-body-400",
9
+ TEXT_BODY_400_2_LINES: "text-body-400-2lines",
10
+ TEXT_HEADING_SMALL: "text-heading-small",
3
11
  };
@@ -0,0 +1,2 @@
1
+ import { BaseComponentProps } from "../../components/types";
2
+ export declare const DataDictionaryView: ({ className, }: BaseComponentProps) => JSX.Element;
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ import { DataDictionary } from "../../components/DataDictionary/dataDictionary";
3
+ export const DataDictionaryView = ({ className, }) => {
4
+ return React.createElement(DataDictionary, { className: className });
5
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@databiosphere/findable-ui",
3
- "version": "21.3.0",
3
+ "version": "22.0.0",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
@@ -26,15 +26,15 @@
26
26
  "@commitlint/config-conventional": "^17.4.2",
27
27
  "@mui/types": "^7.2.18",
28
28
  "@next/eslint-plugin-next": "^14.1.0",
29
- "@storybook/addon-actions": "^7.6.17",
30
- "@storybook/addon-essentials": "^7.6.17",
31
- "@storybook/addon-interactions": "^7.6.17",
32
- "@storybook/addon-links": "^7.6.17",
33
- "@storybook/addon-mdx-gfm": "^7.6.17",
34
- "@storybook/nextjs": "^7.6.17",
35
- "@storybook/react": "^7.6.17",
36
- "@storybook/testing-library": "^0.2.2",
37
- "@storybook/types": "^7.6.17",
29
+ "@storybook/addon-actions": "^8.6.4",
30
+ "@storybook/addon-essentials": "^8.6.4",
31
+ "@storybook/addon-interactions": "^8.6.4",
32
+ "@storybook/addon-links": "^8.6.4",
33
+ "@storybook/addon-mdx-gfm": "^8.6.4",
34
+ "@storybook/nextjs": "^8.6.4",
35
+ "@storybook/react": "^8.6.4",
36
+ "@storybook/test": "^8.6.4",
37
+ "@storybook/types": "^8.6.4",
38
38
  "@testing-library/react": "^16.0.1",
39
39
  "@types/jest": "^29.4.0",
40
40
  "@types/react": "^18.3.5",
@@ -60,7 +60,7 @@
60
60
  "jest-fetch-mock": "^3.0.3",
61
61
  "prettier": "^2.8.3",
62
62
  "prettier-plugin-organize-imports": "^3.2.2",
63
- "storybook": "^7.6.17",
63
+ "storybook": "^8.6.4",
64
64
  "ts-jest": "^29.2.5",
65
65
  "typescript": "^5.5.4"
66
66
  },
@@ -72,7 +72,7 @@
72
72
  "@tanstack/react-table": "^8.19.2",
73
73
  "@tanstack/react-virtual": "^3.0.0-beta.59",
74
74
  "copy-to-clipboard": "3.3.1",
75
- "isomorphic-dompurify": "0.24.0",
75
+ "isomorphic-dompurify": "^2.22.0",
76
76
  "ky": "^1.7.2",
77
77
  "next": "^14.1.0",
78
78
  "next-auth": "^4.24.7",
@@ -83,7 +83,7 @@
83
83
  "react-idle-timer": "^5.7.2",
84
84
  "react-window": "1.8.9",
85
85
  "uuid": "8.3.2",
86
- "validate.js": "^0.13.1"
86
+ "yup": "^1.6.1"
87
87
  },
88
88
  "engines": {
89
89
  "node": "20.10.0"
@@ -0,0 +1,8 @@
1
+ import { Grid2Props } from "@mui/material";
2
+
3
+ export const GRID2_PROPS: Grid2Props = {
4
+ container: true,
5
+ direction: "column",
6
+ flexWrap: "nowrap",
7
+ rowGap: 8,
8
+ };
@@ -0,0 +1,15 @@
1
+ import { Grid2 } from "@mui/material";
2
+ import React from "react";
3
+ import { Entity } from "../Entity/entity";
4
+ import { GRID2_PROPS } from "./constants";
5
+ import { ClassesProps } from "./types";
6
+
7
+ export const Entities = ({ classes }: ClassesProps): JSX.Element => {
8
+ return (
9
+ <Grid2 {...GRID2_PROPS}>
10
+ {classes.map((classData) => (
11
+ <Entity key={classData.key} class={classData} />
12
+ ))}
13
+ </Grid2>
14
+ );
15
+ };
@@ -0,0 +1,5 @@
1
+ import { Class } from "../../../../common/entities";
2
+
3
+ export interface ClassesProps {
4
+ classes: Class[];
5
+ }
@@ -0,0 +1,7 @@
1
+ import { Grid2Props } from "@mui/material";
2
+
3
+ export const GRID2_PROPS: Grid2Props = {
4
+ container: true,
5
+ direction: "column",
6
+ flexWrap: "nowrap",
7
+ };
@@ -0,0 +1,28 @@
1
+ import { Grid2, Typography } from "@mui/material";
2
+ import React from "react";
3
+ import { COLOR, VARIANT } from "../../../../styles/common/mui/typography";
4
+ import { useTable } from "../Table/hook";
5
+ import { Table } from "../Table/table";
6
+ import { GRID2_PROPS } from "./constants";
7
+ import { EntityProps } from "./types";
8
+
9
+ export const Entity = ({ class: classData }: EntityProps): JSX.Element => {
10
+ const table = useTable(classData.attributes);
11
+ return (
12
+ <Grid2 {...GRID2_PROPS} rowGap={4}>
13
+ <Grid2 {...GRID2_PROPS} rowGap={1}>
14
+ <Typography component="h3" variant={VARIANT.TEXT_HEADING_SMALL}>
15
+ {classData.label}
16
+ </Typography>
17
+ <Typography
18
+ color={COLOR.INK_LIGHT}
19
+ component="div"
20
+ variant={VARIANT.TEXT_BODY_400_2_LINES}
21
+ >
22
+ {classData.description}
23
+ </Typography>
24
+ </Grid2>
25
+ <Table table={table} />
26
+ </Grid2>
27
+ );
28
+ };
@@ -0,0 +1,5 @@
1
+ import { Class } from "../../../../common/entities";
2
+
3
+ export interface EntityProps {
4
+ class: Class;
5
+ }
@@ -0,0 +1,47 @@
1
+ import { CellContext, ColumnDef } from "@tanstack/react-table";
2
+ import { Attribute } from "../../../../../common/entities";
3
+ import { BasicCell } from "../components/BasicCell/basicCell";
4
+ import { COLUMN_IDENTIFIER } from "./columnIdentifier";
5
+ import { AttributeValue } from "./types";
6
+
7
+ const COLUMN_DEF_DESCRIPTION: ColumnDef<Attribute, AttributeValue> = {
8
+ accessorFn: (row) => row.description,
9
+ cell: (props: CellContext<Attribute, AttributeValue>) =>
10
+ BasicCell({ ...props }),
11
+ header: "Description",
12
+ id: COLUMN_IDENTIFIER.DESCRIPTION,
13
+ meta: { width: { max: "2fr", min: "480px" } },
14
+ };
15
+
16
+ const COLUMN_DEF_KEY: ColumnDef<Attribute, AttributeValue> = {
17
+ accessorFn: (row) => row.key,
18
+ cell: (props: CellContext<Attribute, AttributeValue>) =>
19
+ BasicCell({ ...props }),
20
+ header: "Key",
21
+ id: COLUMN_IDENTIFIER.KEY,
22
+ meta: { width: { max: "1fr", min: "180px" } },
23
+ };
24
+
25
+ const COLUMN_DEF_LABEL: ColumnDef<Attribute, AttributeValue> = {
26
+ accessorFn: (row) => row.label,
27
+ cell: (props: CellContext<Attribute, AttributeValue>) =>
28
+ BasicCell({ ...props }),
29
+ header: "Label",
30
+ id: COLUMN_IDENTIFIER.LABEL,
31
+ meta: { width: { max: "1fr", min: "200px" } },
32
+ };
33
+
34
+ export const COLUMN_DEF: Record<
35
+ keyof typeof COLUMN_IDENTIFIER,
36
+ ColumnDef<Attribute, AttributeValue>
37
+ > = {
38
+ DESCRIPTION: COLUMN_DEF_DESCRIPTION,
39
+ KEY: COLUMN_DEF_KEY,
40
+ LABEL: COLUMN_DEF_LABEL,
41
+ };
42
+
43
+ export const COLUMN_DEFS: ColumnDef<Attribute, AttributeValue>[] = [
44
+ COLUMN_DEF.LABEL,
45
+ COLUMN_DEF.KEY,
46
+ COLUMN_DEF.DESCRIPTION,
47
+ ];
@@ -0,0 +1,5 @@
1
+ export const COLUMN_IDENTIFIER = {
2
+ DESCRIPTION: "description",
3
+ KEY: "key",
4
+ LABEL: "label",
5
+ } as const;
@@ -0,0 +1,3 @@
1
+ import { Attribute } from "../../../../../common/entities";
2
+
3
+ export type AttributeValue = Attribute[keyof Attribute];
@@ -0,0 +1,8 @@
1
+ import { Typography } from "@mui/material";
2
+ import React from "react";
3
+ import { VARIANT } from "../../../../../../styles/common/mui/typography";
4
+ import { BasicCellProps } from "./types";
5
+
6
+ export const BasicCell = ({ getValue }: BasicCellProps): JSX.Element => {
7
+ return <Typography variant={VARIANT.INHERIT}>{getValue()}</Typography>;
8
+ };
@@ -0,0 +1,5 @@
1
+ import { CellContext } from "@tanstack/react-table";
2
+ import { Attribute } from "../../../../../../common/entities";
3
+ import { AttributeValue } from "../../columns/types";
4
+
5
+ export type BasicCellProps = CellContext<Attribute, AttributeValue>;
@@ -0,0 +1,13 @@
1
+ import { Table, useReactTable } from "@tanstack/react-table";
2
+ import { Attribute } from "../../../../common/entities";
3
+ import { COLUMN_DEFS } from "./columns/columnDef";
4
+ import { useTableOptions } from "./options/hook";
5
+
6
+ export const useTable = (data: Attribute[]): Table<Attribute> => {
7
+ const tableOptions = useTableOptions();
8
+ return useReactTable<Attribute>({
9
+ ...tableOptions,
10
+ columns: COLUMN_DEFS,
11
+ data,
12
+ });
13
+ };
@@ -0,0 +1,12 @@
1
+ import { CoreOptions, getCoreRowModel } from "@tanstack/react-table";
2
+ import { Attribute } from "../../../../../../common/entities";
3
+ import { ROW_POSITION } from "../../../../../Table/features/RowPosition/constants";
4
+ import { ROW_PREVIEW } from "../../../../../Table/features/RowPreview/constants";
5
+
6
+ export const CORE_OPTIONS: Pick<
7
+ CoreOptions<Attribute>,
8
+ "_features" | "getCoreRowModel"
9
+ > = {
10
+ _features: [ROW_POSITION, ROW_PREVIEW],
11
+ getCoreRowModel: getCoreRowModel(),
12
+ };
@@ -0,0 +1,14 @@
1
+ import { TableOptions } from "@tanstack/react-table";
2
+ import { Attribute } from "../../../../../common/entities";
3
+ import { CORE_OPTIONS } from "./core/constants";
4
+ import { SORTING_OPTIONS } from "./sorting/constants";
5
+
6
+ export const useTableOptions = (): Omit<
7
+ TableOptions<Attribute>,
8
+ "columns" | "data"
9
+ > => {
10
+ return {
11
+ ...CORE_OPTIONS,
12
+ ...SORTING_OPTIONS,
13
+ };
14
+ };
@@ -0,0 +1,9 @@
1
+ import { SortingOptions } from "@tanstack/react-table";
2
+ import { Attribute } from "../../../../../../common/entities";
3
+
4
+ export const SORTING_OPTIONS: Pick<
5
+ SortingOptions<Attribute>,
6
+ "enableSorting"
7
+ > = {
8
+ enableSorting: false,
9
+ };
@@ -0,0 +1,6 @@
1
+ import styled from "@emotion/styled";
2
+ import { RoundedPaper } from "../../../common/Paper/paper.styles";
3
+
4
+ export const StyledRoundedPaper = styled(RoundedPaper)`
5
+ box-shadow: none;
6
+ `;
@@ -0,0 +1,35 @@
1
+ import { TableContainer } from "@mui/material";
2
+ import React from "react";
3
+ import { TableBody } from "../../../Detail/components/Table/components/TableBody/tableBody";
4
+ import { ROW_DIRECTION } from "../../../Table/common/entities";
5
+ import { TableHead } from "../../../Table/components/TableHead/tableHead";
6
+ import { GridTable } from "../../../Table/table.styles";
7
+ import { getColumnTrackSizing } from "../../../TableCreator/options/columnTrackSizing/utils";
8
+ import { GridPaper } from "../../../common/Paper/paper.styles";
9
+ import { StyledRoundedPaper } from "./table.styles";
10
+ import { TableProps } from "./types";
11
+
12
+ export const Table = ({ table }: TableProps): JSX.Element => {
13
+ return (
14
+ <StyledRoundedPaper variant="table">
15
+ <GridPaper>
16
+ <TableContainer>
17
+ <GridTable
18
+ gridTemplateColumns={getColumnTrackSizing(
19
+ table.getVisibleFlatColumns()
20
+ )}
21
+ >
22
+ <TableHead
23
+ rowDirection={ROW_DIRECTION.DEFAULT}
24
+ tableInstance={table}
25
+ />
26
+ <TableBody
27
+ rowDirection={ROW_DIRECTION.DEFAULT}
28
+ tableInstance={table}
29
+ />
30
+ </GridTable>
31
+ </TableContainer>
32
+ </GridPaper>
33
+ </StyledRoundedPaper>
34
+ );
35
+ };
@@ -0,0 +1,6 @@
1
+ import { Table } from "@tanstack/react-table";
2
+ import { Attribute } from "../../../../common/entities";
3
+
4
+ export interface TableProps {
5
+ table: Table<Attribute>;
6
+ }
@@ -0,0 +1,8 @@
1
+ import { styled } from "@mui/material";
2
+
3
+ export const View = styled("div")`
4
+ flex: 1;
5
+ margin: 0 auto;
6
+ max-width: calc(100vw - 48px);
7
+ padding: 24px 0;
8
+ `;
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import { BaseComponentProps } from "../types";
3
+ import { Entities } from "./components/Entities/entities";
4
+ import { View } from "./dataDictionary.styles";
5
+ import { useDataDictionary } from "./hooks/UseDataDictionary/hook";
6
+
7
+ export const DataDictionary = ({
8
+ className,
9
+ }: BaseComponentProps): JSX.Element => {
10
+ const { classes } = useDataDictionary();
11
+ return (
12
+ <View className={className}>
13
+ <Entities classes={classes} />
14
+ </View>
15
+ );
16
+ };
@@ -0,0 +1,9 @@
1
+ import { useConfig } from "../../../../hooks/useConfig";
2
+ import { UseDataDictionary } from "./types";
3
+
4
+ export const useDataDictionary = (): UseDataDictionary => {
5
+ const {
6
+ config: { dataDictionary: { classes = [] } = {} },
7
+ } = useConfig();
8
+ return { classes };
9
+ };
@@ -0,0 +1,5 @@
1
+ import { Class } from "../../../../common/entities";
2
+
3
+ export interface UseDataDictionary {
4
+ classes: Class[];
5
+ }
@@ -1,17 +1,25 @@
1
- import { ComponentMeta, ComponentStory } from "@storybook/react";
1
+ import { Meta, StoryObj } from "@storybook/react";
2
2
  import React from "react";
3
+ import { CollaboratingOrganizations } from "../Project/components/CollaboratingOrganizations/collaboratingOrganizations";
3
4
  import { CollaboratingOrganizationsStory } from "../Project/components/CollaboratingOrganizations/collaboratingOrganizations.stories";
5
+ import { Contacts } from "../Project/components/Contacts/contacts";
4
6
  import { ContactsStory } from "../Project/components/Contacts/contacts.stories";
7
+ import { Contributors } from "../Project/components/Contributors/contributors";
5
8
  import { ContributorsStory } from "../Project/components/Contributors/contributors.stories";
9
+ import { DataCurators } from "../Project/components/DataCurators/dataCurators";
6
10
  import { DataCuratorsStory } from "../Project/components/DataCurators/dataCurators.stories";
7
- import { DataReleasePolicyStory } from "../Project/components/DataReleasePolicy/dataReleasePolicy.stories";
11
+ import { DataReleasePolicy } from "../Project/components/DataReleasePolicy/dataReleasePolicy";
12
+ import { Description } from "../Project/components/Description/description";
8
13
  import { DescriptionStory } from "../Project/components/Description/description.stories";
14
+ import { Details } from "../Project/components/Details/details";
9
15
  import { DetailsStory } from "../Project/components/Details/details.stories";
16
+ import { Publications } from "../Project/components/Publications/publications";
10
17
  import { PublicationsStory } from "../Project/components/Publications/publications.stories";
18
+ import { SupplementaryLinks } from "../Project/components/SupplementaryLinks/supplementaryLinks";
11
19
  import { SupplementaryLinksStory } from "../Project/components/SupplementaryLinks/supplementaryLinks.stories";
12
20
  import { Detail } from "./detail";
13
21
 
14
- export default {
22
+ const meta = {
15
23
  argTypes: {
16
24
  Tabs: { table: { disable: true } },
17
25
  isDetailOverview: { control: "boolean" },
@@ -24,39 +32,36 @@ export default {
24
32
  layout: "fullscreen",
25
33
  },
26
34
  title: "Views/EntityDetailView",
27
- } as ComponentMeta<typeof Detail>;
35
+ } satisfies Meta<typeof Detail>;
28
36
 
29
- const DetailTemplate: ComponentStory<typeof Detail> = (args) => (
30
- <Detail {...args} />
31
- );
37
+ export default meta;
32
38
 
33
- export const DetailStory = DetailTemplate.bind({});
34
- DetailStory.args = {
35
- isDetailOverview: true,
36
- mainColumn: (
37
- <>
38
- <DescriptionStory
39
- projectDescription={DescriptionStory.args?.projectDescription || "None"}
40
- />
41
- <ContactsStory {...ContactsStory.args} />
42
- <PublicationsStory {...PublicationsStory.args} />
43
- <ContributorsStory {...ContributorsStory.args} />
44
- <CollaboratingOrganizationsStory
45
- {...CollaboratingOrganizationsStory.args}
46
- />
47
- <DataCuratorsStory {...DataCuratorsStory.args} />
48
- {/*<CitationStory {...CitationStory.args} />*/}
49
- <SupplementaryLinksStory {...SupplementaryLinksStory.args} />
50
- <DataReleasePolicyStory />
51
- </>
52
- ),
53
- sideColumn: (
54
- <>
55
- <DetailsStory
56
- keyValuePairs={DetailsStory.args?.keyValuePairs}
57
- title={DetailsStory.args?.title ?? ""}
58
- />
59
- </>
60
- ),
61
- top: <></>,
39
+ type Story = StoryObj<typeof meta>;
40
+
41
+ export const DetailStory: Story = {
42
+ args: {
43
+ isDetailOverview: true,
44
+ mainColumn: (
45
+ <>
46
+ <Description
47
+ projectDescription={
48
+ DescriptionStory.args.projectDescription || "None"
49
+ }
50
+ />
51
+ <Contacts {...ContactsStory.args} />
52
+ <Publications {...PublicationsStory.args} />
53
+ <Contributors {...ContributorsStory.args} />
54
+ <CollaboratingOrganizations {...CollaboratingOrganizationsStory.args} />
55
+ <DataCurators {...DataCuratorsStory.args} />
56
+ <SupplementaryLinks {...SupplementaryLinksStory.args} />
57
+ <DataReleasePolicy />
58
+ </>
59
+ ),
60
+ sideColumn: (
61
+ <>
62
+ <Details {...DetailsStory.args} />
63
+ </>
64
+ ),
65
+ top: <></>,
66
+ },
62
67
  };
@@ -2,6 +2,7 @@ import { Tooltip } from "@mui/material";
2
2
  import React, { ElementType, ReactNode } from "react";
3
3
  import { useDownloadStatus } from "../../../../../../hooks/useDownloadStatus";
4
4
  import { useFileManifestState } from "../../../../../../hooks/useFileManifestState";
5
+ import { useLoginGuard } from "../../../../../../providers/loginGuard/hook";
5
6
  import { ButtonPrimary } from "../../../../../common/Button/components/ButtonPrimary/buttonPrimary";
6
7
 
7
8
  export interface ExportButtonProps {
@@ -19,6 +20,10 @@ export const ExportButton = ({
19
20
  const {
20
21
  fileManifestState: { isLoading },
21
22
  } = useFileManifestState();
23
+
24
+ // Prompt user for login before export, if required.
25
+ const { requireLogin } = useLoginGuard();
26
+
22
27
  return (
23
28
  <Tooltip arrow title={isLoading ? null : downloadStatus.message}>
24
29
  <span>
@@ -26,7 +31,9 @@ export const ExportButton = ({
26
31
  disabled={
27
32
  isLoading || downloadStatus.disabled || downloadStatus.isLoading
28
33
  }
29
- onClick={onClick}
34
+ onClick={() => {
35
+ requireLogin(onClick);
36
+ }}
30
37
  >
31
38
  <span>{children}</span>
32
39
  </Button>