@openneuro/app 4.20.5 → 4.20.6-alpha.2

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 (358) hide show
  1. package/__mocks__/fileMock.js +1 -1
  2. package/package.json +5 -5
  3. package/pluralize-esm.js +204 -211
  4. package/src/@types/custom.d.ts +3 -3
  5. package/src/@types/react.d.ts +3 -4
  6. package/src/client.jsx +17 -16
  7. package/src/scripts/__mocks__/config.ts +6 -6
  8. package/src/scripts/__utils__/mock-app-shell.tsx +9 -8
  9. package/src/scripts/apm.js +6 -6
  10. package/src/scripts/app.tsx +7 -7
  11. package/src/scripts/authentication/__tests__/profile.spec.js +10 -10
  12. package/src/scripts/authentication/admin-user.jsx +2 -2
  13. package/src/scripts/authentication/logged-in.jsx +2 -2
  14. package/src/scripts/authentication/logged-out.jsx +2 -2
  15. package/src/scripts/authentication/loginCheck.js +2 -2
  16. package/src/scripts/authentication/loginUrls.ts +1 -1
  17. package/src/scripts/authentication/profile.ts +7 -7
  18. package/src/scripts/authentication/regular-user.tsx +3 -3
  19. package/src/scripts/authentication/signOut.ts +2 -2
  20. package/src/scripts/authentication/withProfile.jsx +6 -6
  21. package/src/scripts/common/block-navigation.jsx +3 -4
  22. package/src/scripts/common/containers/__tests__/header.spec.tsx +16 -16
  23. package/src/scripts/common/containers/footer.tsx +3 -3
  24. package/src/scripts/common/containers/header.tsx +30 -30
  25. package/src/scripts/common/forms/__tests__/warn-button.spec.jsx +6 -6
  26. package/src/scripts/common/forms/warn-button.jsx +21 -17
  27. package/src/scripts/common/partials/block-navigation.jsx +3 -4
  28. package/src/scripts/common/partials/freshdesk-widget.jsx +17 -20
  29. package/src/scripts/common/partials/toast-content.jsx +2 -2
  30. package/src/scripts/components/__tests__/data-table.spec.tsx +7 -7
  31. package/src/scripts/components/data-table.tsx +23 -22
  32. package/src/scripts/config.ts +2 -2
  33. package/src/scripts/datalad/dataset/comments-fragments.js +1 -1
  34. package/src/scripts/datalad/dataset/dataset-context.js +1 -1
  35. package/src/scripts/datalad/dataset/dataset-query-context.js +1 -1
  36. package/src/scripts/datalad/dataset/dataset-query-fragments.js +1 -1
  37. package/src/scripts/datalad/mutations/cache-clear.jsx +7 -6
  38. package/src/scripts/datalad/mutations/cache-id.js +2 -2
  39. package/src/scripts/datalad/mutations/delete-comment.jsx +13 -11
  40. package/src/scripts/datalad/mutations/delete.jsx +10 -9
  41. package/src/scripts/datalad/mutations/follow.jsx +12 -11
  42. package/src/scripts/datalad/mutations/publish.jsx +13 -12
  43. package/src/scripts/datalad/mutations/remove-permissions.jsx +8 -8
  44. package/src/scripts/datalad/mutations/revalidate.jsx +7 -6
  45. package/src/scripts/datalad/mutations/snapshot.tsx +7 -7
  46. package/src/scripts/datalad/mutations/star.jsx +12 -11
  47. package/src/scripts/datalad/mutations/submit-metadata.jsx +14 -12
  48. package/src/scripts/datalad/mutations/update-permissions.jsx +14 -13
  49. package/src/scripts/datalad/mutations/update-ref.jsx +7 -6
  50. package/src/scripts/datalad/routes/dataset-redirect.tsx +49 -49
  51. package/src/scripts/datalad/subscriptions/__tests__/files-subscription.spec.jsx +32 -32
  52. package/src/scripts/datalad/subscriptions/files-subscription.jsx +16 -16
  53. package/src/scripts/datalad/subscriptions/useDatasetDeletedSubscription.jsx +4 -4
  54. package/src/scripts/datalad/subscriptions/useDraftSubscription.js +4 -4
  55. package/src/scripts/datalad/subscriptions/usePermissionsSubscription.js +4 -4
  56. package/src/scripts/datalad/subscriptions/useSnapshotsUpdatedSubscriptions.js +3 -3
  57. package/src/scripts/dataset/__tests__/__snapshots__/snapshot-container.spec.tsx.snap +2 -2
  58. package/src/scripts/dataset/__tests__/snapshot-container.spec.tsx +12 -12
  59. package/src/scripts/dataset/comments/__tests__/comment.spec.jsx +21 -21
  60. package/src/scripts/dataset/comments/__tests__/comments.spec.jsx +10 -10
  61. package/src/scripts/dataset/comments/block-style-controls.jsx +15 -15
  62. package/src/scripts/dataset/comments/comment-editor.jsx +31 -31
  63. package/src/scripts/dataset/comments/comment.jsx +50 -50
  64. package/src/scripts/dataset/comments/comments.jsx +24 -22
  65. package/src/scripts/dataset/comments/inline-style-controls.jsx +9 -9
  66. package/src/scripts/dataset/comments/style-button.jsx +8 -9
  67. package/src/scripts/dataset/common/follow-toggles.tsx +3 -3
  68. package/src/scripts/dataset/dataset-query-context.js +1 -1
  69. package/src/scripts/dataset/dataset-query.jsx +34 -31
  70. package/src/scripts/dataset/dataset-routes.jsx +5 -5
  71. package/src/scripts/dataset/download/__tests__/download-command-line.spec.jsx +13 -13
  72. package/src/scripts/dataset/download/__tests__/download-link.spec.jsx +10 -10
  73. package/src/scripts/dataset/download/__tests__/download-native.spec.js +7 -7
  74. package/src/scripts/dataset/download/__tests__/shell-example.spec.jsx +5 -5
  75. package/src/scripts/dataset/download/download-command-line.jsx +9 -7
  76. package/src/scripts/dataset/download/download-datalad.jsx +22 -20
  77. package/src/scripts/dataset/download/download-derivative-datalad.tsx +2 -2
  78. package/src/scripts/dataset/download/download-derivative-s3.tsx +2 -2
  79. package/src/scripts/dataset/download/download-link.jsx +6 -6
  80. package/src/scripts/dataset/download/download-native.js +20 -19
  81. package/src/scripts/dataset/download/download-query.js +2 -3
  82. package/src/scripts/dataset/download/download-s3.jsx +8 -8
  83. package/src/scripts/dataset/download/download-script.tsx +23 -20
  84. package/src/scripts/dataset/download/native-file-toast.jsx +13 -11
  85. package/src/scripts/dataset/download/shell-example.jsx +1 -1
  86. package/src/scripts/dataset/download/track-download.js +5 -5
  87. package/src/scripts/dataset/draft-container.tsx +104 -102
  88. package/src/scripts/dataset/draft-snapshot-routes.tsx +3 -3
  89. package/src/scripts/dataset/files/__tests__/file-tree-unloaded-directory.spec.jsx +23 -23
  90. package/src/scripts/dataset/files/__tests__/file-tree.spec.jsx +57 -58
  91. package/src/scripts/dataset/files/__tests__/file-viewer-type.spec.jsx +6 -6
  92. package/src/scripts/dataset/files/__tests__/file.spec.jsx +15 -15
  93. package/src/scripts/dataset/files/file-display.jsx +11 -11
  94. package/src/scripts/dataset/files/file-tree-unloaded-directory.jsx +10 -10
  95. package/src/scripts/dataset/files/file-tree.tsx +27 -27
  96. package/src/scripts/dataset/files/file-view.jsx +4 -4
  97. package/src/scripts/dataset/files/file-viewer-type.jsx +21 -21
  98. package/src/scripts/dataset/files/file.tsx +85 -80
  99. package/src/scripts/dataset/files/files.tsx +41 -40
  100. package/src/scripts/dataset/files/index.tsx +2 -2
  101. package/src/scripts/dataset/files/viewers/__tests__/__snapshots__/file-viewer-json.spec.jsx.snap +0 -24
  102. package/src/scripts/dataset/files/viewers/__tests__/file-viewer-json.spec.jsx +9 -9
  103. package/src/scripts/dataset/files/viewers/__tests__/parse-tabular.spec.js +8 -8
  104. package/src/scripts/dataset/files/viewers/file-viewer-csv.jsx +5 -5
  105. package/src/scripts/dataset/files/viewers/file-viewer-html.jsx +3 -3
  106. package/src/scripts/dataset/files/viewers/file-viewer-json.jsx +4 -4
  107. package/src/scripts/dataset/files/viewers/file-viewer-nifti.tsx +4 -4
  108. package/src/scripts/dataset/files/viewers/file-viewer-table.tsx +3 -3
  109. package/src/scripts/dataset/files/viewers/file-viewer-text.jsx +3 -3
  110. package/src/scripts/dataset/files/viewers/file-viewer-tsv.jsx +5 -5
  111. package/src/scripts/dataset/files/viewers/parse-tabular.js +4 -4
  112. package/src/scripts/dataset/fragments/__tests__/cancel-button.spec.tsx +5 -5
  113. package/src/scripts/dataset/fragments/__tests__/dataset-alert-draft.spec.tsx +9 -9
  114. package/src/scripts/dataset/fragments/__tests__/dataset-citation.spec.jsx +10 -10
  115. package/src/scripts/dataset/fragments/__tests__/doi-link.spec.tsx +29 -29
  116. package/src/scripts/dataset/fragments/__tests__/edit-button.spec.tsx +5 -5
  117. package/src/scripts/dataset/fragments/__tests__/edit-list.spec.jsx +13 -13
  118. package/src/scripts/dataset/fragments/__tests__/save-button.spec.tsx +5 -5
  119. package/src/scripts/dataset/fragments/__tests__/select-input.spec.tsx +26 -26
  120. package/src/scripts/dataset/fragments/cancel-button.tsx +2 -2
  121. package/src/scripts/dataset/fragments/comments-fragments.js +1 -1
  122. package/src/scripts/dataset/fragments/copyable-tooltip.jsx +14 -13
  123. package/src/scripts/dataset/fragments/dataset-alert-draft.tsx +17 -13
  124. package/src/scripts/dataset/fragments/dataset-alert-version.tsx +5 -4
  125. package/src/scripts/dataset/fragments/dataset-citation.jsx +23 -21
  126. package/src/scripts/dataset/fragments/dataset-history.jsx +12 -12
  127. package/src/scripts/dataset/fragments/dataset-reviewers.ts +1 -1
  128. package/src/scripts/dataset/fragments/doi-link.tsx +6 -6
  129. package/src/scripts/dataset/fragments/edit-button.tsx +2 -2
  130. package/src/scripts/dataset/fragments/edit-description-field.jsx +23 -21
  131. package/src/scripts/dataset/fragments/edit-description-list.jsx +8 -8
  132. package/src/scripts/dataset/fragments/edit-list.jsx +8 -8
  133. package/src/scripts/dataset/fragments/number-input.tsx +36 -35
  134. package/src/scripts/dataset/fragments/save-button.tsx +2 -2
  135. package/src/scripts/dataset/fragments/select-input.tsx +87 -86
  136. package/src/scripts/dataset/fragments/text-array-input.tsx +38 -37
  137. package/src/scripts/dataset/fragments/text-input.tsx +79 -78
  138. package/src/scripts/dataset/mutations/__tests__/cache-id.spec.js +5 -5
  139. package/src/scripts/dataset/mutations/__tests__/delete-file.spec.jsx +85 -83
  140. package/src/scripts/dataset/mutations/__tests__/delete.spec.jsx +8 -8
  141. package/src/scripts/dataset/mutations/__tests__/deprecate-snapshot.spec.tsx +17 -17
  142. package/src/scripts/dataset/mutations/__tests__/deprecate-version.spec.tsx +19 -19
  143. package/src/scripts/dataset/mutations/__tests__/description.spec.jsx +51 -51
  144. package/src/scripts/dataset/mutations/__tests__/remove-permissions.spec.tsx +9 -9
  145. package/src/scripts/dataset/mutations/__tests__/update-permissions.spec.jsx +7 -7
  146. package/src/scripts/dataset/mutations/admin-exports.jsx +13 -12
  147. package/src/scripts/dataset/mutations/cache-clear.jsx +6 -6
  148. package/src/scripts/dataset/mutations/cache-id.js +2 -2
  149. package/src/scripts/dataset/mutations/comment.jsx +25 -23
  150. package/src/scripts/dataset/mutations/create-anonymous-reviewer.tsx +36 -30
  151. package/src/scripts/dataset/mutations/dataset-relations.tsx +28 -29
  152. package/src/scripts/dataset/mutations/delete-anonymous-reviewer.tsx +7 -8
  153. package/src/scripts/dataset/mutations/delete-comment.jsx +14 -12
  154. package/src/scripts/dataset/mutations/delete-dataset-form.jsx +20 -22
  155. package/src/scripts/dataset/mutations/delete-file.jsx +8 -8
  156. package/src/scripts/dataset/mutations/delete.jsx +10 -9
  157. package/src/scripts/dataset/mutations/deprecate-version.tsx +5 -6
  158. package/src/scripts/dataset/mutations/description.jsx +21 -20
  159. package/src/scripts/dataset/mutations/flag-annex-object.jsx +10 -9
  160. package/src/scripts/dataset/mutations/follow.tsx +15 -14
  161. package/src/scripts/dataset/mutations/import-dataset.tsx +5 -5
  162. package/src/scripts/dataset/mutations/metadata-form.jsx +94 -97
  163. package/src/scripts/dataset/mutations/publish.jsx +13 -13
  164. package/src/scripts/dataset/mutations/readme.jsx +12 -11
  165. package/src/scripts/dataset/mutations/remove-annex-object.jsx +10 -9
  166. package/src/scripts/dataset/mutations/remove-permissions.tsx +5 -6
  167. package/src/scripts/dataset/mutations/revalidate.jsx +7 -7
  168. package/src/scripts/dataset/mutations/snapshot.tsx +8 -8
  169. package/src/scripts/dataset/mutations/star.tsx +14 -13
  170. package/src/scripts/dataset/mutations/submit-metadata.jsx +12 -11
  171. package/src/scripts/dataset/mutations/undo-deprecate-version.tsx +5 -6
  172. package/src/scripts/dataset/mutations/update-file.jsx +6 -6
  173. package/src/scripts/dataset/mutations/update-permissions.tsx +9 -9
  174. package/src/scripts/dataset/mutations/update-ref.jsx +7 -7
  175. package/src/scripts/dataset/routes/__tests__/deprecate-snapshot-page.spec.tsx +5 -5
  176. package/src/scripts/dataset/routes/add-metadata.jsx +19 -20
  177. package/src/scripts/dataset/routes/admin-datalad.jsx +7 -7
  178. package/src/scripts/dataset/routes/dataset-default.tsx +12 -10
  179. package/src/scripts/dataset/routes/delete-page.tsx +12 -12
  180. package/src/scripts/dataset/routes/deprecate-snapshot-page.tsx +8 -8
  181. package/src/scripts/dataset/routes/derivatives.tsx +10 -10
  182. package/src/scripts/dataset/routes/download-dataset.tsx +20 -20
  183. package/src/scripts/dataset/routes/manage-anonymous-reviewers.tsx +37 -35
  184. package/src/scripts/dataset/routes/manage-permissions.jsx +22 -22
  185. package/src/scripts/dataset/routes/publish.jsx +32 -30
  186. package/src/scripts/dataset/routes/snapshot-default.tsx +7 -7
  187. package/src/scripts/dataset/routes/snapshot.tsx +44 -43
  188. package/src/scripts/dataset/routes/styles/dataset-page-border.tsx +3 -3
  189. package/src/scripts/dataset/routes/styles/dataset-page-tab-container.tsx +3 -3
  190. package/src/scripts/dataset/routes/styles/header-row.tsx +3 -3
  191. package/src/scripts/dataset/routes/tab-routes-draft.tsx +12 -12
  192. package/src/scripts/dataset/routes/tab-routes-snapshot.tsx +8 -8
  193. package/src/scripts/dataset/snapshot-container.tsx +78 -86
  194. package/src/scripts/errors/403page.tsx +11 -11
  195. package/src/scripts/errors/404page.tsx +12 -12
  196. package/src/scripts/errors/errorBoundary.jsx +13 -12
  197. package/src/scripts/errors/errorRoute.jsx +6 -6
  198. package/src/scripts/errors/freshdesk-widget.jsx +17 -20
  199. package/src/scripts/errors/freshdeskInterface.jsx +9 -9
  200. package/src/scripts/errors/orcid/email.jsx +3 -3
  201. package/src/scripts/errors/orcid/family.jsx +4 -4
  202. package/src/scripts/errors/orcid/general.jsx +1 -1
  203. package/src/scripts/errors/orcid/given.jsx +4 -4
  204. package/src/scripts/fixtures/dataset-query.ts +119 -119
  205. package/src/scripts/fixtures/mock-app-wrapper.tsx +4 -4
  206. package/src/scripts/index.tsx +9 -9
  207. package/src/scripts/pages/admin/admin.jsx +5 -5
  208. package/src/scripts/pages/admin/flagged-files.jsx +33 -31
  209. package/src/scripts/pages/admin/user-fragment.ts +1 -1
  210. package/src/scripts/pages/admin/user-tools.tsx +13 -11
  211. package/src/scripts/pages/admin/users.jsx +38 -39
  212. package/src/scripts/pages/api.jsx +20 -19
  213. package/src/scripts/pages/citation-page.tsx +4 -4
  214. package/src/scripts/pages/faq/faq.tsx +2 -2
  215. package/src/scripts/pages/front-page/aggregate-queries/aggregate-counts-container.tsx +6 -5
  216. package/src/scripts/pages/front-page/aggregate-queries/use-participant-count.ts +2 -2
  217. package/src/scripts/pages/front-page/aggregate-queries/use-publicDatasets-count.ts +2 -2
  218. package/src/scripts/pages/front-page/front-page-content.ts +42 -42
  219. package/src/scripts/pages/front-page/front-page.tsx +18 -14
  220. package/src/scripts/pages/front-page-comp.tsx +3 -3
  221. package/src/scripts/pages/import-dataset.tsx +10 -10
  222. package/src/scripts/pages/metadata/dataset-metadata.tsx +15 -14
  223. package/src/scripts/pages/pet-redirect.tsx +2 -2
  224. package/src/scripts/queries/dataset.ts +3 -3
  225. package/src/scripts/resources/__tests__/kibana.spec.js +9 -9
  226. package/src/scripts/resources/kibana.js +3 -3
  227. package/src/scripts/resources/strings.js +2 -2
  228. package/src/scripts/routes.tsx +14 -14
  229. package/src/scripts/search/__helpers__/search-render.tsx +3 -3
  230. package/src/scripts/search/__tests__/search-container.spec.tsx +22 -22
  231. package/src/scripts/search/__tests__/search-params-ctx.spec.tsx +20 -20
  232. package/src/scripts/search/es-query-builders.ts +21 -5
  233. package/src/scripts/search/filters-block-container.tsx +14 -16
  234. package/src/scripts/search/initial-search-params.tsx +45 -45
  235. package/src/scripts/search/inputs/__tests__/sort-by-select.spec.tsx +23 -23
  236. package/src/scripts/search/inputs/admin-allDatasets-toggle.tsx +12 -12
  237. package/src/scripts/search/inputs/age-range-input.tsx +9 -8
  238. package/src/scripts/search/inputs/author-input.tsx +14 -11
  239. package/src/scripts/search/inputs/date-radios.tsx +8 -7
  240. package/src/scripts/search/inputs/diagnosis-select.tsx +6 -6
  241. package/src/scripts/search/inputs/index.ts +33 -33
  242. package/src/scripts/search/inputs/keyword-input.tsx +13 -13
  243. package/src/scripts/search/inputs/modality-select.tsx +33 -30
  244. package/src/scripts/search/inputs/pet/bodyParts_input.tsx +18 -16
  245. package/src/scripts/search/inputs/pet/scannerManufacturersModelNames_input.tsx +18 -16
  246. package/src/scripts/search/inputs/pet/scannerManufacturers_input.tsx +18 -16
  247. package/src/scripts/search/inputs/pet/tracerNames_input.tsx +16 -15
  248. package/src/scripts/search/inputs/pet/tracerRadionuclides_input.tsx +18 -16
  249. package/src/scripts/search/inputs/section-select.tsx +6 -6
  250. package/src/scripts/search/inputs/sex-radios.tsx +6 -6
  251. package/src/scripts/search/inputs/show-datasets-radios.tsx +31 -29
  252. package/src/scripts/search/inputs/sort-by-select.tsx +10 -11
  253. package/src/scripts/search/inputs/species-select.tsx +6 -6
  254. package/src/scripts/search/inputs/study-domain-input.tsx +18 -16
  255. package/src/scripts/search/inputs/subject-count-range-input.tsx +8 -7
  256. package/src/scripts/search/inputs/task-input.tsx +18 -16
  257. package/src/scripts/search/search-container.tsx +83 -85
  258. package/src/scripts/search/search-params-ctx.tsx +40 -38
  259. package/src/scripts/search/search-routes.tsx +4 -4
  260. package/src/scripts/search/use-search-results.tsx +125 -99
  261. package/src/scripts/styles/media.tsx +3 -3
  262. package/src/scripts/styles/support-modal.jsx +2 -2
  263. package/src/scripts/sw.ts +12 -11
  264. package/src/scripts/test-utils.js +4 -4
  265. package/src/scripts/uploader/add-path-to-files.js +7 -7
  266. package/src/scripts/uploader/file-select.tsx +3 -3
  267. package/src/scripts/uploader/file-upload.js +13 -12
  268. package/src/scripts/uploader/input.jsx +8 -7
  269. package/src/scripts/uploader/upload-button.jsx +3 -3
  270. package/src/scripts/uploader/upload-disclaimer-input.tsx +66 -66
  271. package/src/scripts/uploader/upload-disclaimer.jsx +6 -5
  272. package/src/scripts/uploader/upload-file-status.jsx +4 -4
  273. package/src/scripts/uploader/upload-issues.jsx +32 -29
  274. package/src/scripts/uploader/upload-metadata.jsx +18 -17
  275. package/src/scripts/uploader/upload-mutation.js +17 -20
  276. package/src/scripts/uploader/upload-progress-button.jsx +5 -4
  277. package/src/scripts/uploader/upload-progress.jsx +3 -3
  278. package/src/scripts/uploader/upload-rename.jsx +6 -5
  279. package/src/scripts/uploader/upload-resume.jsx +26 -24
  280. package/src/scripts/uploader/upload-select.jsx +10 -9
  281. package/src/scripts/uploader/upload-status.jsx +5 -5
  282. package/src/scripts/uploader/upload-step.jsx +9 -9
  283. package/src/scripts/uploader/uploader-context.js +1 -1
  284. package/src/scripts/uploader/uploader-location.js +1 -1
  285. package/src/scripts/uploader/uploader-modal.jsx +8 -7
  286. package/src/scripts/uploader/uploader-setup-routes.jsx +10 -10
  287. package/src/scripts/uploader/uploader-status-routes.jsx +6 -6
  288. package/src/scripts/uploader/uploader-view.jsx +4 -4
  289. package/src/scripts/uploader/uploader.jsx +50 -48
  290. package/src/scripts/users/username.tsx +3 -3
  291. package/src/scripts/utils/__tests__/csv.spec.ts +16 -16
  292. package/src/scripts/utils/__tests__/date.spec.js +4 -4
  293. package/src/scripts/utils/__tests__/json-ld.spec.js +12 -12
  294. package/src/scripts/utils/__tests__/newid.spec.js +9 -9
  295. package/src/scripts/utils/__tests__/userNotify.spec.js +10 -10
  296. package/src/scripts/utils/analytics.tsx +3 -3
  297. package/src/scripts/utils/cookies.js +1 -1
  298. package/src/scripts/utils/csv.ts +13 -15
  299. package/src/scripts/utils/datalad.js +1 -1
  300. package/src/scripts/utils/dataset-url.js +2 -2
  301. package/src/scripts/utils/date.js +2 -2
  302. package/src/scripts/utils/global-polyfill.ts +2 -2
  303. package/src/scripts/utils/gtag.js +6 -6
  304. package/src/scripts/utils/json-ld.js +13 -13
  305. package/src/scripts/utils/newid.js +1 -1
  306. package/src/scripts/utils/user-login-modal-ctx.tsx +4 -4
  307. package/src/scripts/utils/userNotify.js +2 -2
  308. package/src/scripts/validation/validation-panel.jsx +3 -3
  309. package/src/scripts/validation/validation-results.issues.issue.jsx +9 -9
  310. package/src/scripts/validation/validation-results.issues.jsx +19 -17
  311. package/src/scripts/validation/validation-results.jsx +10 -10
  312. package/src/scripts/validation/validation-status.jsx +19 -17
  313. package/src/scripts/validation/validation.jsx +5 -5
  314. package/src/scripts/workers/schema.ts +2 -2
  315. package/src/scripts/workers/schema.worker.ts +4 -4
  316. package/src/scripts/workers/validate.ts +2 -2
  317. package/src/scripts/workers/validate.worker.ts +7 -5
  318. package/vite.config.js +17 -17
  319. package/src/dist/assets/activity-icon.9ab0c828.png +0 -0
  320. package/src/dist/assets/bids.da8810b3.jpg +0 -0
  321. package/src/dist/assets/brand_mark.28e7645d.png +0 -0
  322. package/src/dist/assets/close-button.21e700a6.png +0 -0
  323. package/src/dist/assets/cube-get.39ed5636.png +0 -0
  324. package/src/dist/assets/cube-share.9b558c29.png +0 -0
  325. package/src/dist/assets/cube-use.ccf2ddc5.png +0 -0
  326. package/src/dist/assets/datalad.a35b15b8.jpg +0 -0
  327. package/src/dist/assets/eeg.1dc1dc54.jpg +0 -0
  328. package/src/dist/assets/email-header.1cb8bf76.png +0 -0
  329. package/src/dist/assets/ieeg.f91deb0a.jpg +0 -0
  330. package/src/dist/assets/index.3db805fb.js +0 -23127
  331. package/src/dist/assets/index.3db805fb.js.map +0 -1
  332. package/src/dist/assets/index.5eb79d2c.css +0 -1
  333. package/src/dist/assets/ljaf.567e9566.png +0 -0
  334. package/src/dist/assets/logo_app.8c986cf9.png +0 -0
  335. package/src/dist/assets/logo_cube.5224b745.png +0 -0
  336. package/src/dist/assets/logo_data.3e1d5743.png +0 -0
  337. package/src/dist/assets/logo_users.a84a265a.png +0 -0
  338. package/src/dist/assets/meg.1e1928f8.jpg +0 -0
  339. package/src/dist/assets/mri.b01e4f42.jpg +0 -0
  340. package/src/dist/assets/nih-bi-logo.80d76e1d.png +0 -0
  341. package/src/dist/assets/nih-stanford.2a7c496e.jpg +0 -0
  342. package/src/dist/assets/nih.78a64d38.png +0 -0
  343. package/src/dist/assets/nimh.0ec775d8.png +0 -0
  344. package/src/dist/assets/nru-logo.f3097dc5.png +0 -0
  345. package/src/dist/assets/nsf.eee1d3f7.png +0 -0
  346. package/src/dist/assets/nsf.f87e96e7.png +0 -0
  347. package/src/dist/assets/on-dark-horz.e1f213d0.svg +0 -1
  348. package/src/dist/assets/on-dark.12f4e2ce.svg +0 -1
  349. package/src/dist/assets/on-light-horz.23ff22c3.svg +0 -1
  350. package/src/dist/assets/on-light.50592f7f.svg +0 -1
  351. package/src/dist/assets/pet-scan.21d98a3d.jpg +0 -0
  352. package/src/dist/assets/revicons.4ca02b8a.ttf +0 -0
  353. package/src/dist/assets/revicons.9e4d4c68.eot +0 -0
  354. package/src/dist/assets/revicons.f7b9c306.woff +0 -0
  355. package/src/dist/assets/sqm-logo.9cd0cca5.png +0 -0
  356. package/src/dist/assets/squishymedia.fa3c5919.png +0 -0
  357. package/src/dist/assets/stanford.5f245936.png +0 -0
  358. package/src/dist/index.html +0 -25
@@ -1,17 +1,18 @@
1
- import React, { useContext } from 'react'
2
- import { gql, useQuery } from '@apollo/client'
3
- import { SearchParamsCtx } from './search-params-ctx'
4
- import initialSearchParams from './initial-search-params'
1
+ import React, { useContext } from "react"
2
+ import { gql, useQuery } from "@apollo/client"
3
+ import { SearchParamsCtx } from "./search-params-ctx"
4
+ import initialSearchParams from "./initial-search-params"
5
5
  import {
6
6
  BoolQuery,
7
- simpleQueryString,
7
+ joinWithOR,
8
8
  matchQuery,
9
- rangeQuery,
9
+ multiMatchQuery,
10
10
  rangeListLengthQuery,
11
+ rangeQuery,
12
+ simpleQueryString,
11
13
  sqsJoinWithAND,
12
- joinWithOR,
13
- } from './es-query-builders'
14
- import { species_list } from '@openneuro/components/content'
14
+ } from "./es-query-builders"
15
+ import { species_list } from "@openneuro/components/content"
15
16
 
16
17
  const searchQuery = gql`
17
18
  query advancedSearchDatasets(
@@ -122,7 +123,7 @@ const searchQuery = gql`
122
123
  }
123
124
  `
124
125
 
125
- const isActiveRange = range =>
126
+ const isActiveRange = (range) =>
126
127
  JSON.stringify(range) !== JSON.stringify([null, null])
127
128
 
128
129
  export const useSearchResults = () => {
@@ -152,192 +153,217 @@ export const useSearchResults = () => {
152
153
  } = searchParams
153
154
 
154
155
  const boolQuery = new BoolQuery()
155
- if (keywords.length)
156
+ if (keywords.length) {
156
157
  boolQuery.addClause(
157
- 'must',
158
+ "must",
158
159
  simpleQueryString(sqsJoinWithAND(keywords), [
159
- 'id^6',
160
- 'latestSnapshot.readme',
161
- 'latestSnapshot.description.Name^6',
162
- 'latestSnapshot.description.Authors^3',
160
+ "id^6",
161
+ "latestSnapshot.readme",
162
+ "latestSnapshot.description.Name^6",
163
+ "latestSnapshot.description.Authors^3",
163
164
  ]),
164
165
  )
166
+ }
165
167
  if (modality_selected) {
166
168
  const secondaryModalities = {
167
169
  Diffusion: {
168
- secondary: 'MRI_Diffusion',
169
- primary: 'MRI',
170
+ secondary: "MRI_Diffusion",
171
+ primary: "MRI",
170
172
  },
171
173
  Structural: {
172
- secondary: 'MRI_Structural',
173
- primary: 'MRI',
174
+ secondary: "MRI_Structural",
175
+ primary: "MRI",
174
176
  },
175
177
  Functional: {
176
- secondary: 'MRI_Functional',
177
- primary: 'MRI',
178
+ secondary: "MRI_Functional",
179
+ primary: "MRI",
178
180
  },
179
181
  Perfusion: {
180
- secondary: 'MRI_Perfusion',
181
- primary: 'MRI',
182
+ secondary: "MRI_Perfusion",
183
+ primary: "MRI",
182
184
  },
183
185
  Static: {
184
- secondary: 'PET_Static',
185
- primary: 'PET',
186
+ secondary: "PET_Static",
187
+ primary: "PET",
186
188
  },
187
189
  Dynamic: {
188
- secondary: 'PET_Dynamic',
189
- primary: 'PET',
190
+ secondary: "PET_Dynamic",
191
+ primary: "PET",
190
192
  },
191
193
  }
192
194
  if (Object.keys(secondaryModalities).includes(modality_selected)) {
193
195
  boolQuery.addClause(
194
- 'filter',
196
+ "filter",
195
197
  matchQuery(
196
- 'latestSnapshot.summary.secondaryModalities',
198
+ "latestSnapshot.summary.secondaryModalities",
197
199
  secondaryModalities[modality_selected].secondary,
198
200
  ),
199
201
  )
200
202
  } else {
201
203
  boolQuery.addClause(
202
- 'filter',
203
- matchQuery('latestSnapshot.summary.modalities', modality_selected),
204
+ "filter",
205
+ matchQuery("latestSnapshot.summary.modalities", modality_selected),
204
206
  )
205
207
  }
206
208
  }
207
- if (isActiveRange(ageRange))
209
+ if (isActiveRange(ageRange)) {
208
210
  boolQuery.addClause(
209
- 'filter',
210
- rangeQuery('latestSnapshot.summary.subjectMetadata.age', ...ageRange),
211
+ "filter",
212
+ rangeQuery("latestSnapshot.summary.subjectMetadata.age", ...ageRange),
211
213
  )
212
- if (isActiveRange(subjectCountRange))
214
+ }
215
+ if (isActiveRange(subjectCountRange)) {
213
216
  boolQuery.addClause(
214
- 'filter',
217
+ "filter",
215
218
  rangeListLengthQuery(
216
- 'latestSnapshot.summary.subjects',
219
+ "latestSnapshot.summary.subjects",
217
220
  subjectCountRange[0] || 0,
218
221
  subjectCountRange[1] || 1000000,
219
222
  ),
220
223
  )
221
- if (diagnosis_selected)
224
+ }
225
+ if (diagnosis_selected) {
222
226
  boolQuery.addClause(
223
- 'filter',
224
- matchQuery('metadata.dxStatus', diagnosis_selected),
227
+ "filter",
228
+ matchQuery("metadata.dxStatus", diagnosis_selected),
225
229
  )
226
- if (tasks.length)
230
+ }
231
+ if (tasks.length) {
227
232
  boolQuery.addClause(
228
- 'must',
233
+ "must",
229
234
  simpleQueryString(sqsJoinWithAND(tasks), [
230
- 'latestSnapshot.summary.tasks',
235
+ "latestSnapshot.summary.tasks",
231
236
  ]),
232
237
  )
233
- if (authors.length)
238
+ }
239
+ if (authors.length) {
234
240
  boolQuery.addClause(
235
- 'must',
241
+ "must",
236
242
  matchQuery(
237
- 'latestSnapshot.description.Authors',
243
+ "latestSnapshot.description.Authors",
238
244
  joinWithOR(authors),
239
- '3',
245
+ "3",
240
246
  ),
241
247
  )
242
- if (sex_selected !== 'All')
248
+ }
249
+ if (sex_selected !== "All") {
250
+ // Possible values for this field are specified here:
251
+ // https://bids-specification.readthedocs.io/en/stable/glossary.html#objects.columns.sex
252
+ let queryStrings = []
253
+ if (sex_selected == "Male") {
254
+ queryStrings = ["male", "m", "M", "MALE", "Male"]
255
+ } else if (sex_selected == "Female") {
256
+ queryStrings = ["female", "f", "F", "FEMALE", "Female"]
257
+ }
243
258
  boolQuery.addClause(
244
- 'filter',
245
- matchQuery('latestSnapshot.summary.subjectMetadata.sex', sex_selected),
259
+ "filter",
260
+ multiMatchQuery(
261
+ "latestSnapshot.summary.subjectMetadata.sex",
262
+ queryStrings,
263
+ ),
246
264
  )
247
- if (date_selected !== 'All Time') {
265
+ }
266
+ if (date_selected !== "All Time") {
248
267
  let d: number
249
- if (date_selected === 'Last 30 days') {
268
+ if (date_selected === "Last 30 days") {
250
269
  d = 30
251
- } else if (date_selected === 'Last 180 days') {
270
+ } else if (date_selected === "Last 180 days") {
252
271
  d = 180
253
272
  } else {
254
273
  d = 365
255
274
  }
256
- boolQuery.addClause('filter', rangeQuery('created', `now-${d}d/d`, 'now/d'))
275
+ boolQuery.addClause("filter", rangeQuery("created", `now-${d}d/d`, "now/d"))
257
276
  }
258
277
  if (species_selected) {
259
- if (species_selected === 'Other') {
278
+ if (species_selected === "Other") {
260
279
  // if species is 'Other', search for every species that isn't an available option
261
280
  const species = initialSearchParams.species_available
262
- .filter(s => s !== 'Other')
263
- .join(' ')
281
+ .filter((s) => s !== "Other")
282
+ .join(" ")
264
283
  boolQuery.addClause(
265
- 'must_not',
266
- matchQuery('metadata.species', species, 'AUTO', 'OR'),
284
+ "must_not",
285
+ matchQuery("metadata.species", species, "AUTO", "OR"),
267
286
  )
268
- } else if (species_selected === 'Human') {
287
+ } else if (species_selected === "Human") {
269
288
  // if species is 'Human', search for Human or null values (BIDS assumes human by default)
270
- boolQuery.query.bool['should'] = [
271
- matchQuery('metadata.species', 'Human', 'AUTO'),
272
- { term: { _content: '' } },
289
+ boolQuery.query.bool["should"] = [
290
+ matchQuery("metadata.species", "Human", "AUTO"),
291
+ { term: { _content: "" } },
273
292
  ]
274
293
  } else {
275
294
  boolQuery.addClause(
276
- 'filter',
277
- matchQuery('metadata.species', species_selected, 'AUTO'),
295
+ "filter",
296
+ matchQuery("metadata.species", species_selected, "AUTO"),
278
297
  )
279
298
  }
280
299
  }
281
- if (section_selected)
300
+ if (section_selected) {
282
301
  boolQuery.addClause(
283
- 'filter',
284
- matchQuery('metadata.studyLongitudinal', section_selected, 'AUTO'),
302
+ "filter",
303
+ matchQuery("metadata.studyLongitudinal", section_selected, "AUTO"),
285
304
  )
286
- if (studyDomains.length)
305
+ }
306
+ if (studyDomains.length) {
287
307
  boolQuery.addClause(
288
- 'must',
289
- matchQuery('metadata.studyDomain', joinWithOR(studyDomains)),
308
+ "must",
309
+ matchQuery("metadata.studyDomain", joinWithOR(studyDomains)),
290
310
  )
291
- if (modality_selected === 'PET' || modality_selected === null) {
292
- if (bodyParts.length)
311
+ }
312
+ if (modality_selected === "PET" || modality_selected === null) {
313
+ if (bodyParts.length) {
293
314
  boolQuery.addClause(
294
- 'must',
315
+ "must",
295
316
  simpleQueryString(sqsJoinWithAND(bodyParts), [
296
- 'latestSnapshot.summary.pet.BodyPart',
317
+ "latestSnapshot.summary.pet.BodyPart",
297
318
  ]),
298
319
  )
299
- if (scannerManufacturers.length)
320
+ }
321
+ if (scannerManufacturers.length) {
300
322
  boolQuery.addClause(
301
- 'must',
323
+ "must",
302
324
  simpleQueryString(sqsJoinWithAND(scannerManufacturers), [
303
- 'latestSnapshot.summary.pet.ScannerManufacturer',
325
+ "latestSnapshot.summary.pet.ScannerManufacturer",
304
326
  ]),
305
327
  )
306
- if (scannerManufacturersModelNames.length)
328
+ }
329
+ if (scannerManufacturersModelNames.length) {
307
330
  boolQuery.addClause(
308
- 'must',
331
+ "must",
309
332
  simpleQueryString(sqsJoinWithAND(scannerManufacturersModelNames), [
310
- 'latestSnapshot.summary.pet.ScannerManufacturersModelName',
333
+ "latestSnapshot.summary.pet.ScannerManufacturersModelName",
311
334
  ]),
312
335
  )
313
- if (tracerNames.length)
336
+ }
337
+ if (tracerNames.length) {
314
338
  boolQuery.addClause(
315
- 'must',
339
+ "must",
316
340
  simpleQueryString(sqsJoinWithAND(tracerNames), [
317
- 'latestSnapshot.summary.pet.TracerName',
341
+ "latestSnapshot.summary.pet.TracerName",
318
342
  ]),
319
343
  )
320
- if (tracerRadionuclides.length)
344
+ }
345
+ if (tracerRadionuclides.length) {
321
346
  boolQuery.addClause(
322
- 'must',
347
+ "must",
323
348
  simpleQueryString(sqsJoinWithAND(tracerRadionuclides), [
324
- 'latestSnapshot.summary.pet.TracerRadionuclide',
349
+ "latestSnapshot.summary.pet.TracerRadionuclide",
325
350
  ]),
326
351
  )
352
+ }
327
353
  }
328
354
 
329
355
  let sortBy
330
- if (sortBy_selected.label === 'Relevance') {
356
+ if (sortBy_selected.label === "Relevance") {
331
357
  // If filters are set, sort by relevance (default sort),
332
358
  // otherwise, sort from newest to oldest
333
- sortBy = boolQuery.isEmpty() ? { created: 'desc' } : null
334
- } else if (sortBy_selected.label === 'Newest') {
335
- sortBy = { created: 'desc' }
336
- } else if (sortBy_selected.label === 'Oldest') {
337
- sortBy = { created: 'asc' }
338
- } else if (sortBy_selected.label === 'Activity') {
359
+ sortBy = boolQuery.isEmpty() ? { created: "desc" } : null
360
+ } else if (sortBy_selected.label === "Newest") {
361
+ sortBy = { created: "desc" }
362
+ } else if (sortBy_selected.label === "Oldest") {
363
+ sortBy = { created: "asc" }
364
+ } else if (sortBy_selected.label === "Activity") {
339
365
  // TODO: figure out
340
- sortBy = { 'analytics.downloads': 'desc' }
366
+ sortBy = { "analytics.downloads": "desc" }
341
367
  }
342
368
  return useQuery(searchQuery, {
343
369
  variables: {
@@ -347,10 +373,10 @@ export const useSearchResults = () => {
347
373
  datasetType: datasetType_selected,
348
374
  datasetStatus: datasetStatus_selected,
349
375
  },
350
- errorPolicy: 'ignore',
376
+ errorPolicy: "ignore",
351
377
  // fetchPolicy is workaround for stuck loading bug (https://github.com/apollographql/react-apollo/issues/3270#issuecomment-579614837)
352
378
  // TODO: find better solution
353
- fetchPolicy: 'cache-and-network',
354
- nextFetchPolicy: 'cache-first',
379
+ fetchPolicy: "cache-and-network",
380
+ nextFetchPolicy: "cache-first",
355
381
  })
356
382
  }
@@ -1,6 +1,6 @@
1
- import React from 'react'
2
- import { createMedia } from '@artsy/fresnel'
3
- import '@artsy/fresnel/dist/Media'
1
+ import React from "react"
2
+ import { createMedia } from "@artsy/fresnel"
3
+ import "@artsy/fresnel/dist/Media"
4
4
 
5
5
  const AppMedia = createMedia({
6
6
  breakpoints: {
@@ -1,4 +1,4 @@
1
- import styled from '@emotion/styled'
1
+ import styled from "@emotion/styled"
2
2
 
3
3
  //styled components for custom support modal
4
4
  const Overlay = styled.div`
@@ -40,4 +40,4 @@ const ExitButton = styled.a`
40
40
  z-index: 100;
41
41
  `
42
42
 
43
- export { Overlay, ModalContainer, ExitButton }
43
+ export { ExitButton, ModalContainer, Overlay }
package/src/scripts/sw.ts CHANGED
@@ -6,36 +6,37 @@
6
6
  export default null
7
7
  declare const self: ServiceWorkerGlobalScope
8
8
  const globalAny: any = global // Workaround for serviceWorkerOption type missing
9
- const CACHE_NAME = 'openneuro'
9
+ const CACHE_NAME = "openneuro"
10
10
  const CACHE_PATHS = globalAny.serviceWorkerOption.assets
11
11
 
12
- self.addEventListener('install', event => {
12
+ self.addEventListener("install", (event) => {
13
13
  void self.skipWaiting()
14
14
  event.waitUntil(
15
- caches.open(CACHE_NAME).then(cache => {
15
+ caches.open(CACHE_NAME).then((cache) => {
16
16
  return cache.addAll(CACHE_PATHS)
17
17
  }),
18
18
  )
19
19
  })
20
20
 
21
- self.addEventListener('activate', event => {
21
+ self.addEventListener("activate", (event) => {
22
22
  event.waitUntil(self.clients.claim())
23
23
  })
24
24
 
25
- self.addEventListener('fetch', event => {
25
+ self.addEventListener("fetch", (event) => {
26
26
  // Let the browser do its default thing
27
27
  // for non-GET requests.
28
- if (event.request.method === 'GET') {
28
+ if (event.request.method === "GET") {
29
29
  // Skip serving from cache for cross origin 'only-if-cached' requests
30
30
  if (
31
- event.request.cache === 'only-if-cached' &&
32
- event.request.mode !== 'same-origin'
33
- )
31
+ event.request.cache === "only-if-cached" &&
32
+ event.request.mode !== "same-origin"
33
+ ) {
34
34
  return
35
+ }
35
36
  // Respond from cache, then the network
36
37
  event.respondWith(
37
- caches.open(CACHE_NAME).then(cache => {
38
- return cache.match(event.request).then(response => {
38
+ caches.open(CACHE_NAME).then((cache) => {
39
+ return cache.match(event.request).then((response) => {
39
40
  return response || fetch(event.request)
40
41
  })
41
42
  }),
@@ -1,12 +1,12 @@
1
- import cookies from './utils/cookies.js'
1
+ import cookies from "./utils/cookies.js"
2
2
 
3
3
  /**
4
4
  * Sets a login cookie during a test run
5
5
  */
6
6
  export const testLogin = () => {
7
7
  cookies.set(
8
- 'accessToken',
9
- 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwiZW1haWwiOiJleGFtcGxlQGV4YW1wbGUuY29tIiwicHJvdmlkZXIiOiJqZXN0IiwibmFtZSI6IlRlc3RlciIsImFkbWluIjp0cnVlLCJqdGkiOiIwNjc2M2JjMi02ZTkwLTRjNTMtOWNkNi01ODE2MGM0ZGM1YzMiLCJpYXQiOjE1NTQyMzc0NDAsImV4cCI6MTU1NDI0MTA0MH0._zfwOPqNZUT8DAUB_rIcIbcaKu7nzDs0OZjqaXfhymM',
8
+ "accessToken",
9
+ "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwiZW1haWwiOiJleGFtcGxlQGV4YW1wbGUuY29tIiwicHJvdmlkZXIiOiJqZXN0IiwibmFtZSI6IlRlc3RlciIsImFkbWluIjp0cnVlLCJqdGkiOiIwNjc2M2JjMi02ZTkwLTRjNTMtOWNkNi01ODE2MGM0ZGM1YzMiLCJpYXQiOjE1NTQyMzc0NDAsImV4cCI6MTU1NDI0MTA0MH0._zfwOPqNZUT8DAUB_rIcIbcaKu7nzDs0OZjqaXfhymM",
10
10
  )
11
11
  }
12
12
 
@@ -14,5 +14,5 @@ export const testLogin = () => {
14
14
  * Clear a login cookie during a test run
15
15
  */
16
16
  export const testLogout = () => {
17
- cookies.set('accessToken', null)
17
+ cookies.set("accessToken", null)
18
18
  }
@@ -7,13 +7,13 @@
7
7
  */
8
8
  export const addPathToFiles = (fileList, path) => {
9
9
  return path
10
- ? Array.prototype.map.call(fileList, file => {
11
- // Override webkitRelativePath with a new property
12
- Object.defineProperty(file, 'webkitRelativePath', {
13
- value: `/${path}/${file.webkitRelativePath}`,
14
- writable: false,
15
- })
16
- return file
10
+ ? Array.prototype.map.call(fileList, (file) => {
11
+ // Override webkitRelativePath with a new property
12
+ Object.defineProperty(file, "webkitRelativePath", {
13
+ value: `/${path}/${file.webkitRelativePath}`,
14
+ writable: false,
17
15
  })
16
+ return file
17
+ })
18
18
  : fileList
19
19
  }
@@ -1,7 +1,7 @@
1
1
  // dependencies -------------------------------------------------------
2
2
 
3
- import React from 'react'
4
- import PropTypes from 'prop-types'
3
+ import React from "react"
4
+ import PropTypes from "prop-types"
5
5
 
6
6
  type UploadProps = {
7
7
  resume?: boolean
@@ -21,7 +21,7 @@ class Upload extends React.Component<UploadProps> {
21
21
  </span>
22
22
  )
23
23
  const icon = this.props.resume ? resumeIcon : null
24
- const text = this.props.resume ? 'Resume' : 'Select folder'
24
+ const text = this.props.resume ? "Resume" : "Select folder"
25
25
 
26
26
  return (
27
27
  <div className="fileupload-btn">
@@ -1,5 +1,5 @@
1
- import { config } from '../config'
2
- import { uploads } from '@openneuro/client'
1
+ import { config } from "../config"
2
+ import { uploads } from "@openneuro/client"
3
3
 
4
4
  /**
5
5
  * Trim the webkitRelativePath value to only include the dataset relative path
@@ -10,20 +10,20 @@ export const getRelativePath = (
10
10
  options = { stripRelativePath: true },
11
11
  ) => {
12
12
  const path = file.webkitRelativePath
13
- const pathTokens = path.split('/')
13
+ const pathTokens = path.split("/")
14
14
  if (pathTokens.length === 1) {
15
15
  return path
16
16
  }
17
- if (pathTokens[0] === '') {
17
+ if (pathTokens[0] === "") {
18
18
  pathTokens.shift()
19
19
  }
20
- if (pathTokens[pathTokens.length - 1] === '') {
20
+ if (pathTokens[pathTokens.length - 1] === "") {
21
21
  pathTokens[pathTokens.length - 1] = file.name
22
22
  }
23
23
  if (options.stripRelativePath) {
24
- return pathTokens.slice(1).join('/')
24
+ return pathTokens.slice(1).join("/")
25
25
  } else {
26
- return pathTokens.join('/')
26
+ return pathTokens.join("/")
27
27
  }
28
28
  }
29
29
 
@@ -35,7 +35,7 @@ export const getRelativePath = (
35
35
  * @param {File} file
36
36
  * @param {object} options
37
37
  * @param {boolean} options.stripRelativePath
38
- **/
38
+ */
39
39
  export const encodeFilePath = (file, options = { stripRelativePath: false }) =>
40
40
  file.webkitRelativePath
41
41
  ? uploads.encodeFilePath(getRelativePath(file, options))
@@ -65,19 +65,20 @@ export async function uploadFiles({
65
65
  }) {
66
66
  // Maps FileAPI objects to Request with the correct URL and body
67
67
  let totalSize = 0
68
- const requests = filesToUpload.map(f => {
68
+ const requests = filesToUpload.map((f) => {
69
69
  totalSize += f.size
70
70
  const encodedFilePath = encodeFilePath(f, {
71
71
  stripRelativePath,
72
72
  })
73
- const fileUrl = `${config.url}/uploads/${endpoint}/${datasetId}/${uploadId}/${encodedFilePath}`
73
+ const fileUrl =
74
+ `${config.url}/uploads/${endpoint}/${datasetId}/${uploadId}/${encodedFilePath}`
74
75
  return new Request(fileUrl, {
75
- method: 'POST',
76
+ method: "POST",
76
77
  body: f,
77
78
  headers: {
78
79
  Authorization: `Bearer ${token}`,
79
80
  },
80
- credentials: 'omit',
81
+ credentials: "omit",
81
82
  signal: abortController.signal,
82
83
  })
83
84
  })
@@ -1,7 +1,7 @@
1
1
  // dependencies -------------------------------------------------------
2
2
 
3
- import React, { Component } from 'react'
4
- import PropTypes from 'prop-types'
3
+ import React, { Component } from "react"
4
+ import PropTypes from "prop-types"
5
5
 
6
6
  // component setup ----------------------------------------------------
7
7
 
@@ -11,13 +11,13 @@ class Input extends React.Component {
11
11
  constructor(props) {
12
12
  super(props)
13
13
  this.state = {
14
- value: props.initialValue ? props.initialValue : '',
14
+ value: props.initialValue ? props.initialValue : "",
15
15
  }
16
16
  }
17
17
 
18
18
  static getDerivedStateFromProps(nextProps) {
19
19
  // Will reset value when prop changes
20
- if ('value' in nextProps) {
20
+ if ("value" in nextProps) {
21
21
  return { value: nextProps.value }
22
22
  } else {
23
23
  return null
@@ -33,8 +33,9 @@ class Input extends React.Component {
33
33
  return (
34
34
  <div
35
35
  className={`form-group float-label-input ${
36
- this.props.containerClass || ''
37
- }`}>
36
+ this.props.containerClass || ""
37
+ }`}
38
+ >
38
39
  {value && value.length > 0 ? <label>{placeholder}</label> : null}
39
40
  {this._input(type, name, placeholder, value)}
40
41
  </div>
@@ -44,7 +45,7 @@ class Input extends React.Component {
44
45
  // custom methods -----------------------------------------------------
45
46
 
46
47
  _input(type, name, placeholder, value) {
47
- if (type === 'textarea') {
48
+ if (type === "textarea") {
48
49
  return (
49
50
  <textarea
50
51
  name={name}
@@ -1,6 +1,6 @@
1
- import React from 'react'
2
- import PropTypes from 'prop-types'
3
- import styled from '@emotion/styled'
1
+ import React from "react"
2
+ import PropTypes from "prop-types"
3
+ import styled from "@emotion/styled"
4
4
 
5
5
  const UploadAnchor = styled.a`
6
6
  @media (max-width: 450px) {