@openneuro/app 4.4.10 → 4.5.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 (39) hide show
  1. package/package.json +4 -4
  2. package/src/scripts/app.tsx +1 -1
  3. package/src/scripts/index.tsx +1 -1
  4. package/src/scripts/{refactor_2021 → pages}/admin/admin.jsx +1 -1
  5. package/src/scripts/{refactor_2021 → pages}/admin/flagged-files.jsx +0 -0
  6. package/src/scripts/{refactor_2021 → pages}/admin/user-fragment.ts +0 -0
  7. package/src/scripts/{refactor_2021 → pages}/admin/user-tools.tsx +1 -1
  8. package/src/scripts/{refactor_2021 → pages}/admin/users.jsx +0 -0
  9. package/src/scripts/pages/citation-page.tsx +1 -1
  10. package/src/scripts/{front-page → pages/front-page}/front-page-content.ts +10 -10
  11. package/src/scripts/{refactor_2021/containers/front-page-container.tsx → pages/front-page/front-page.tsx} +53 -32
  12. package/src/scripts/pages/front-page-comp.tsx +57 -0
  13. package/src/scripts/{pet/redirect.tsx → pages/pet-redirect.tsx} +0 -0
  14. package/src/scripts/refactor_2021/dataset/draft-container.tsx +303 -318
  15. package/src/scripts/refactor_2021/dataset/fragments/__tests__/doi-link.spec.tsx +38 -8
  16. package/src/scripts/refactor_2021/dataset/fragments/doi-link.tsx +9 -6
  17. package/src/scripts/refactor_2021/dataset/mutations/dataset-relations.tsx +2 -3
  18. package/src/scripts/refactor_2021/dataset/snapshot-container.tsx +98 -112
  19. package/src/scripts/{refactor_2021/routes.tsx → routes.tsx} +10 -10
  20. package/src/scripts/front-page/assets/get_data_browse.png +0 -0
  21. package/src/scripts/front-page/assets/get_data_download.png +0 -0
  22. package/src/scripts/front-page/assets/ljaf.png +0 -0
  23. package/src/scripts/front-page/assets/logo_app.png +0 -0
  24. package/src/scripts/front-page/assets/logo_cube.png +0 -0
  25. package/src/scripts/front-page/assets/logo_data.png +0 -0
  26. package/src/scripts/front-page/assets/logo_users.png +0 -0
  27. package/src/scripts/front-page/assets/nih.png +0 -0
  28. package/src/scripts/front-page/assets/nsf.png +0 -0
  29. package/src/scripts/front-page/assets/share_data_collaborate.png +0 -0
  30. package/src/scripts/front-page/assets/share_data_publish.png +0 -0
  31. package/src/scripts/front-page/assets/share_data_validate.png +0 -0
  32. package/src/scripts/front-page/assets/squishymedia.png +0 -0
  33. package/src/scripts/front-page/assets/stanford.png +0 -0
  34. package/src/scripts/front-page/assets/tab-get_data.png +0 -0
  35. package/src/scripts/front-page/assets/tab-share_data.png +0 -0
  36. package/src/scripts/front-page/assets/tab-use_data.png +0 -0
  37. package/src/scripts/front-page/assets/use_data_analyze.png +0 -0
  38. package/src/scripts/front-page/assets/use_data_snapshot.png +0 -0
  39. package/src/scripts/mobile/collapsible-wrapper.tsx +0 -93
@@ -24,7 +24,6 @@ import {
24
24
  CloneDropdown,
25
25
  DatasetHeader,
26
26
  DatasetHeaderMeta,
27
- DatasetPage,
28
27
  DatasetGitAccess,
29
28
  VersionList,
30
29
  DatasetTools,
@@ -70,7 +69,6 @@ const DraftContainer: React.FC<DraftContainerProps> = ({ dataset }) => {
70
69
  const dateUpdatedDifference = formatDistanceToNow(
71
70
  parseISO(dataset.draft.modified),
72
71
  )
73
- const isSnapshot = activeDataset !== 'draft'
74
72
 
75
73
  const [cookies] = useCookies()
76
74
  const profile = getUnexpiredProfile(cookies)
@@ -83,6 +81,7 @@ const DraftContainer: React.FC<DraftContainerProps> = ({ dataset }) => {
83
81
  dataset.snapshots[dataset.snapshots.length - 1].hexsha
84
82
  const isDatasetAdmin =
85
83
  hasDatasetAdminPermissions(dataset.permissions, profile?.sub) || isAdmin
84
+ const modality: string = summary?.modalities[0] || ''
86
85
 
87
86
  return (
88
87
  <>
@@ -94,342 +93,328 @@ const DraftContainer: React.FC<DraftContainerProps> = ({ dataset }) => {
94
93
  }`}
95
94
  />
96
95
  )}
97
- <DatasetPage
98
- modality={summary?.modalities[0] || ''}
99
- renderHeader={() => (
100
- <>
101
- <DatasetHeader
102
- pageHeading={description.Name}
103
- modality={summary?.modalities[0] || null}
104
- renderEditor={() => (
105
- <EditDescriptionField
96
+ <div
97
+ className={`dataset dataset-draft dataset-page dataset-page-${modality?.toLowerCase()}`}>
98
+ <DatasetHeader
99
+ pageHeading={description.Name}
100
+ modality={modality}
101
+ renderEditor={() => (
102
+ <EditDescriptionField
103
+ datasetId={datasetId}
104
+ field="Name"
105
+ rows={2}
106
+ description={description.Name}
107
+ editMode={hasEdit}>
108
+ {description.Name}
109
+ </EditDescriptionField>
110
+ )}
111
+ />
112
+ <DatasetAlertDraft
113
+ isPrivate={!dataset.public}
114
+ datasetId={dataset.id}
115
+ hasDraftChanges={hasDraftChanges}
116
+ hasSnapshot={dataset.snapshots.length !== 0}
117
+ />
118
+ <div className="container">
119
+ <div className="grid grid-between dataset-header-meta">
120
+ <div className="col col-8 col-lg">
121
+ {summary && (
122
+ <DatasetHeaderMeta
123
+ size={summary.size}
124
+ totalFiles={summary.totalFiles}
106
125
  datasetId={datasetId}
107
- field="Name"
108
- rows={2}
109
- description={description.Name}
110
- editMode={hasEdit}>
111
- {description.Name}
112
- </EditDescriptionField>
126
+ />
113
127
  )}
114
- />
115
- </>
116
- )}
117
- renderAlert={() => (
118
- <>
119
- {hasEdit && (
120
- <DatasetAlertDraft
121
- isPrivate={!dataset.public}
128
+ </div>
129
+ <div className="col follow-bookmark">
130
+ <FollowDataset
131
+ profile={profile}
122
132
  datasetId={dataset.id}
123
- hasDraftChanges={hasDraftChanges}
124
- hasSnapshot={dataset.snapshots.length !== 0}
133
+ following={dataset.following}
134
+ followers={dataset.followers.length}
125
135
  />
126
- )}
127
- </>
128
- )}
129
- renderHeaderMeta={() => (
130
- <>
131
- {summary && (
132
- <DatasetHeaderMeta
133
- size={summary.size}
134
- totalFiles={summary.totalFiles}
135
- datasetId={datasetId}
136
+ <StarDataset
137
+ profile={profile}
138
+ datasetId={dataset.id}
139
+ starred={dataset.starred}
140
+ stars={dataset.stars.length}
136
141
  />
137
- )}
138
- </>
139
- )}
140
- renderFollowBookmark={() => (
141
- <>
142
- <FollowDataset
143
- profile={profile}
144
- datasetId={dataset.id}
145
- following={dataset.following}
146
- followers={dataset.followers.length}
147
- />
148
- <StarDataset
149
- profile={profile}
150
- datasetId={dataset.id}
151
- starred={dataset.starred}
152
- stars={dataset.stars.length}
153
- />
154
- </>
155
- )}
156
- renderBrainLifeButton={() => (
157
- <BrainLifeButton
158
- datasetId={datasetId}
159
- onBrainlife={dataset.onBrainlife}
160
- />
161
- )}
162
- renderValidationBlock={() => (
163
- <ValidationBlock>
164
- <Validation datasetId={dataset.id} issues={dataset.draft.issues} />
165
- </ValidationBlock>
166
- )}
167
- renderCloneDropdown={() => (
168
- <CloneDropdown
169
- gitAccess={
170
- <DatasetGitAccess
171
- hasEdit={hasEdit}
172
- configGithub={config.github}
173
- configUrl={config.url}
174
- worker={dataset.worker}
175
- datasetId={datasetId}
176
- gitHash={dataset.draft.head}
142
+ </div>
143
+ </div>
144
+ </div>
145
+ <div className="container">
146
+ <div className="grid grid-between">
147
+ <div className="col col-lg col-8">
148
+ <div className="dataset-validation">
149
+ <ValidationBlock>
150
+ <Validation
151
+ datasetId={dataset.id}
152
+ issues={dataset.draft.issues}
153
+ />
154
+ </ValidationBlock>
155
+ <BrainLifeButton
156
+ datasetId={datasetId}
157
+ onBrainlife={dataset.onBrainlife}
158
+ />
159
+ <CloneDropdown
160
+ gitAccess={
161
+ <DatasetGitAccess
162
+ hasEdit={hasEdit}
163
+ configGithub={config.github}
164
+ configUrl={config.url}
165
+ worker={dataset.worker}
166
+ datasetId={datasetId}
167
+ gitHash={dataset.draft.head}
168
+ />
169
+ }
170
+ />
171
+ </div>
172
+ <div className="dataset-tool-buttons">
173
+ <DatasetTools
174
+ hasEdit={hasEdit}
175
+ isPublic={dataset.public}
176
+ datasetId={datasetId}
177
+ isAdmin={isAdmin}
178
+ hasSnapshot={dataset.snapshots.length !== 0}
179
+ isDatasetAdmin={isDatasetAdmin}
180
+ />
181
+ </div>
182
+ <ReadMore
183
+ fileTree={true}
184
+ id="collapse-tree"
185
+ expandLabel="Expand File Tree"
186
+ collapseLabel="Collapse File Tree">
187
+ <Files
188
+ datasetId={datasetId}
189
+ snapshotTag={null}
190
+ datasetName={dataset.draft.description.Name}
191
+ files={dataset.draft.files}
192
+ editMode={hasEdit}
193
+ datasetPermissions={dataset.permissions}
194
+ />
195
+ </ReadMore>
196
+ <MetaDataBlock
197
+ heading="README"
198
+ className="dataset-readme markdown-body"
199
+ item={dataset.draft.readme}
200
+ renderEditor={() => (
201
+ <EditDescriptionField
202
+ datasetId={datasetId}
203
+ field="readme"
204
+ rows={12}
205
+ description={dataset.draft.readme}
206
+ editMode={hasEdit}>
207
+ <ReadMore
208
+ id="readme"
209
+ expandLabel="Read More"
210
+ collapseLabel="Collapse">
211
+ <Markdown>{dataset.draft.readme || 'N/A'}</Markdown>
212
+ </ReadMore>
213
+ </EditDescriptionField>
214
+ )}
177
215
  />
178
- }
179
- />
180
- )}
181
- renderToolButtons={() => (
182
- <DatasetTools
183
- hasEdit={hasEdit}
184
- isPublic={dataset.public}
185
- datasetId={datasetId}
186
- isAdmin={isAdmin}
187
- hasSnapshot={dataset.snapshots.length !== 0}
188
- isDatasetAdmin={isDatasetAdmin}
189
- />
190
- )}
191
- renderFiles={() => (
192
- <ReadMore
193
- fileTree={true}
194
- id="collapse-tree"
195
- expandLabel="Expand File Tree"
196
- collapseLabel="Collapse File Tree">
197
- <Files
198
- datasetId={datasetId}
199
- snapshotTag={null}
200
- datasetName={dataset.draft.description.Name}
201
- files={dataset.draft.files}
202
- editMode={hasEdit}
203
- datasetPermissions={dataset.permissions}
204
- />
205
- </ReadMore>
206
- )}
207
- renderReadMe={() => (
208
- <MetaDataBlock
209
- heading="README"
210
- className="dataset-readme markdown-body"
211
- item={dataset.draft.readme}
212
- renderEditor={() => (
213
- <EditDescriptionField
216
+ <Comments
217
+ datasetId={dataset.id}
218
+ uploader={dataset.uploader}
219
+ comments={dataset.comments}
220
+ />
221
+ </div>
222
+ <div className="col sidebar">
223
+ {' '}
224
+ <EditDescriptionList
225
+ className="dmb-inline-list"
214
226
  datasetId={datasetId}
215
- field="readme"
216
- rows={12}
217
- description={dataset.draft.readme}
227
+ field="Authors"
228
+ heading="Authors"
229
+ description={description.Authors}
218
230
  editMode={hasEdit}>
219
- <ReadMore
220
- id="readme"
221
- expandLabel="Read More"
222
- collapseLabel="Collapse">
223
- <Markdown>{dataset.draft.readme || 'N/A'}</Markdown>
224
- </ReadMore>
225
- </EditDescriptionField>
226
- )}
227
- />
228
- )}
229
- renderSidebar={() => (
230
- <>
231
- <EditDescriptionList
232
- className="dmb-inline-list"
233
- datasetId={datasetId}
234
- field="Authors"
235
- heading="Authors"
236
- description={description.Authors}
237
- editMode={hasEdit}>
238
- {description?.Authors?.length ? description.Authors : ['N/A']}
239
- </EditDescriptionList>
240
-
241
- {summary && (
242
- <ModalitiesMetaDataBlock
243
- items={summary.modalities}
244
- className="dmb-modalities"
245
- />
246
- )}
247
-
248
- <MetaDataBlock
249
- heading={dataset.snapshots.length ? 'Versions' : 'Version'}
250
- item={
251
- <div className="version-block">
252
- <VersionList
253
- datasetId={datasetId}
254
- hasEdit={hasEdit}
255
- items={dataset.snapshots}
256
- className="version-dropdown"
257
- activeDataset={activeDataset}
258
- dateModified={dateModified}
259
- selected={selectedVersion}
260
- setSelected={setSelectedVersion}
261
- />
262
- </div>
263
- }
264
- />
265
- {summary && (
231
+ {description?.Authors?.length ? description.Authors : ['N/A']}
232
+ </EditDescriptionList>
233
+ {summary && (
234
+ <ModalitiesMetaDataBlock
235
+ items={summary.modalities}
236
+ className="dmb-modalities"
237
+ />
238
+ )}
266
239
  <MetaDataBlock
267
- heading="Tasks"
268
- item={summary.tasks.length ? summary.tasks.join(', ') : 'N/A'}
269
- className="dmb-inline-list"
240
+ heading={dataset.snapshots.length ? 'Versions' : 'Version'}
241
+ item={
242
+ <div className="version-block">
243
+ <VersionList
244
+ datasetId={datasetId}
245
+ hasEdit={hasEdit}
246
+ items={dataset.snapshots}
247
+ className="version-dropdown"
248
+ activeDataset={activeDataset}
249
+ dateModified={dateModified}
250
+ selected={selectedVersion}
251
+ setSelected={setSelectedVersion}
252
+ />
253
+ </div>
254
+ }
270
255
  />
271
- )}
272
- {summary?.modalities.includes('pet') ||
273
- summary?.modalities.includes('Pet') ||
274
- (summary?.modalities.includes('PET') && (
275
- <>
276
- <MetaDataBlock
277
- heading={pluralize('Target', summary.pet?.BodyPart)}
278
- item={summary.pet?.BodyPart}
279
- />
280
- <MetaDataBlock
281
- heading={pluralize(
282
- 'Scanner Manufacturer',
283
- summary.pet?.ScannerManufacturer,
284
- )}
285
- item={
286
- summary.pet?.ScannerManufacturer
287
- ? summary.pet?.ScannerManufacturer
288
- : 'N/A'
289
- }
290
- />
291
-
292
- <MetaDataBlock
293
- heading={pluralize(
294
- 'Scanner Model',
295
- summary.pet?.ScannerManufacturersModelName,
296
- )}
297
- item={
298
- summary.pet?.ScannerManufacturersModelName
299
- ? summary.pet?.ScannerManufacturersModelName
300
- : 'N/A'
301
- }
302
- />
303
- <MetaDataBlock
304
- heading={pluralize(
305
- 'Radionuclide',
306
- summary.pet?.TracerRadionuclide,
307
- )}
308
- item={
309
- summary.pet?.TracerRadionuclide
310
- ? summary.pet?.TracerRadionuclide
311
- : 'N/A'
312
- }
313
- />
314
- <MetaDataBlock
315
- heading={pluralize('Radiotracer', summary.pet?.TracerName)}
316
- item={
317
- summary.pet?.TracerName ? summary.pet?.TracerName : 'N/A'
318
- }
319
- />
320
- </>
321
- ))}
322
-
323
- <MetaDataBlock
324
- heading="Uploaded by"
325
- item={
326
- <>
327
- {dataset.uploader.name} on {dateAdded} - {dateAddedDifference}{' '}
328
- ago
329
- </>
330
- }
331
- />
256
+ {summary && (
257
+ <MetaDataBlock
258
+ heading="Tasks"
259
+ item={summary.tasks.length ? summary.tasks.join(', ') : 'N/A'}
260
+ className="dmb-inline-list"
261
+ />
262
+ )}
263
+ {summary?.modalities.includes('pet') ||
264
+ summary?.modalities.includes('Pet') ||
265
+ (summary?.modalities.includes('PET') && (
266
+ <>
267
+ <MetaDataBlock
268
+ heading={pluralize('Target', summary.pet?.BodyPart)}
269
+ item={summary.pet?.BodyPart}
270
+ />
271
+ <MetaDataBlock
272
+ heading={pluralize(
273
+ 'Scanner Manufacturer',
274
+ summary.pet?.ScannerManufacturer,
275
+ )}
276
+ item={
277
+ summary.pet?.ScannerManufacturer
278
+ ? summary.pet?.ScannerManufacturer
279
+ : 'N/A'
280
+ }
281
+ />
332
282
 
333
- {dataset.snapshots?.length ? (
283
+ <MetaDataBlock
284
+ heading={pluralize(
285
+ 'Scanner Model',
286
+ summary.pet?.ScannerManufacturersModelName,
287
+ )}
288
+ item={
289
+ summary.pet?.ScannerManufacturersModelName
290
+ ? summary.pet?.ScannerManufacturersModelName
291
+ : 'N/A'
292
+ }
293
+ />
294
+ <MetaDataBlock
295
+ heading={pluralize(
296
+ 'Radionuclide',
297
+ summary.pet?.TracerRadionuclide,
298
+ )}
299
+ item={
300
+ summary.pet?.TracerRadionuclide
301
+ ? summary.pet?.TracerRadionuclide
302
+ : 'N/A'
303
+ }
304
+ />
305
+ <MetaDataBlock
306
+ heading={pluralize(
307
+ 'Radiotracer',
308
+ summary.pet?.TracerName,
309
+ )}
310
+ item={
311
+ summary.pet?.TracerName
312
+ ? summary.pet?.TracerName
313
+ : 'N/A'
314
+ }
315
+ />
316
+ </>
317
+ ))}
334
318
  <MetaDataBlock
335
- heading="Last Updated"
319
+ heading="Uploaded by"
336
320
  item={
337
321
  <>
338
- {dateModified} - {dateUpdatedDifference} ago
322
+ {dataset.uploader.name} on {dateAdded} -{' '}
323
+ {dateAddedDifference} ago
339
324
  </>
340
325
  }
341
326
  />
342
- ) : null}
343
- <MetaDataBlock heading="Sessions" item={numSessions} />
344
- <>
345
- {summary && (
327
+ {dataset.snapshots?.length ? (
346
328
  <MetaDataBlock
347
- heading="Participants"
348
- item={summary.subjects.length}
329
+ heading="Last Updated"
330
+ item={
331
+ <>
332
+ {dateModified} - {dateUpdatedDifference} ago
333
+ </>
334
+ }
349
335
  />
350
- )}
351
- </>
352
-
353
- <MetaDataBlock
354
- heading="Dataset DOI"
355
- item={<DOILink DOI={description.DatasetDOI} />}
356
- />
357
- <MetaDataBlock heading="License" item={description.License} />
358
-
359
- <MetaDataBlock
360
- heading="Acknowledgements"
361
- item={description.Acknowledgements}
362
- renderEditor={() => (
363
- <EditDescriptionField
364
- datasetId={datasetId}
365
- field="Acknowledgements"
366
- rows={2}
367
- description={description.Acknowledgements}
368
- editMode={hasEdit}>
369
- <Markdown>{description.Acknowledgements || 'N/A'}</Markdown>
370
- </EditDescriptionField>
371
- )}
372
- />
373
-
374
- <MetaDataBlock
375
- heading="How to Acknowledge"
376
- item={description.HowToAcknowledge}
377
- renderEditor={() => (
378
- <EditDescriptionField
379
- datasetId={datasetId}
380
- field="HowToAcknowledge"
381
- rows={2}
382
- description={description.HowToAcknowledge}
383
- editMode={hasEdit}>
384
- <Markdown>{description.HowToAcknowledge || 'N/A'}</Markdown>
385
- </EditDescriptionField>
386
- )}
387
- />
388
-
389
- <EditDescriptionList
390
- className="dmb-list"
391
- datasetId={datasetId}
392
- field="Funding"
393
- heading="Funding"
394
- description={description.Funding}
395
- editMode={hasEdit}>
396
- {description.Funding?.length ? description.Funding : ['N/A']}
397
- </EditDescriptionList>
398
-
399
- <EditDescriptionList
400
- className="dmb-list"
401
- datasetId={datasetId}
402
- field="ReferencesAndLinks"
403
- heading="References and Links"
404
- description={description.ReferencesAndLinks}
405
- editMode={hasEdit}>
406
- {description.ReferencesAndLinks?.length
407
- ? description.ReferencesAndLinks
408
- : ['N/A']}
409
- </EditDescriptionList>
410
-
411
- <EditDescriptionList
412
- className="dmb-list"
413
- datasetId={datasetId}
414
- field="EthicsApprovals"
415
- heading="Ethics Approvals"
416
- description={description.EthicsApprovals}
417
- editMode={hasEdit}>
418
- {description.EthicsApprovals?.length
419
- ? description.EthicsApprovals
420
- : ['N/A']}
421
- </EditDescriptionList>
422
- </>
423
- )}
424
- renderComments={() => (
425
- <Comments
426
- datasetId={dataset.id}
427
- uploader={dataset.uploader}
428
- comments={dataset.comments}
429
- />
430
- )}
431
- />
336
+ ) : null}
337
+ <MetaDataBlock heading="Sessions" item={numSessions} />
338
+ <>
339
+ {summary && (
340
+ <MetaDataBlock
341
+ heading="Participants"
342
+ item={summary.subjects.length}
343
+ />
344
+ )}
345
+ </>
346
+ <MetaDataBlock
347
+ heading="Dataset DOI"
348
+ item={
349
+ <DOILink DOI={description.DatasetDOI} datasetId={datasetId} />
350
+ }
351
+ />
352
+ <MetaDataBlock heading="License" item={description.License} />
353
+ <MetaDataBlock
354
+ heading="Acknowledgements"
355
+ item={description.Acknowledgements}
356
+ renderEditor={() => (
357
+ <EditDescriptionField
358
+ datasetId={datasetId}
359
+ field="Acknowledgements"
360
+ rows={2}
361
+ description={description.Acknowledgements}
362
+ editMode={hasEdit}>
363
+ <Markdown>{description.Acknowledgements || 'N/A'}</Markdown>
364
+ </EditDescriptionField>
365
+ )}
366
+ />
367
+ <MetaDataBlock
368
+ heading="How to Acknowledge"
369
+ item={description.HowToAcknowledge}
370
+ renderEditor={() => (
371
+ <EditDescriptionField
372
+ datasetId={datasetId}
373
+ field="HowToAcknowledge"
374
+ rows={2}
375
+ description={description.HowToAcknowledge}
376
+ editMode={hasEdit}>
377
+ <Markdown>{description.HowToAcknowledge || 'N/A'}</Markdown>
378
+ </EditDescriptionField>
379
+ )}
380
+ />
381
+ <EditDescriptionList
382
+ className="dmb-list"
383
+ datasetId={datasetId}
384
+ field="Funding"
385
+ heading="Funding"
386
+ description={description.Funding}
387
+ editMode={hasEdit}>
388
+ {description.Funding?.length ? description.Funding : ['N/A']}
389
+ </EditDescriptionList>
390
+ <EditDescriptionList
391
+ className="dmb-list"
392
+ datasetId={datasetId}
393
+ field="ReferencesAndLinks"
394
+ heading="References and Links"
395
+ description={description.ReferencesAndLinks}
396
+ editMode={hasEdit}>
397
+ {description.ReferencesAndLinks?.length
398
+ ? description.ReferencesAndLinks
399
+ : ['N/A']}
400
+ </EditDescriptionList>
401
+ <EditDescriptionList
402
+ className="dmb-list"
403
+ datasetId={datasetId}
404
+ field="EthicsApprovals"
405
+ heading="Ethics Approvals"
406
+ description={description.EthicsApprovals}
407
+ editMode={hasEdit}>
408
+ {description.EthicsApprovals?.length
409
+ ? description.EthicsApprovals
410
+ : ['N/A']}
411
+ </EditDescriptionList>
412
+ </div>
413
+ </div>
414
+ </div>
415
+ </div>
432
416
  </>
433
417
  )
434
418
  }
419
+
435
420
  export default DraftContainer