Skip to content

Commit

Permalink
feat: add single deposition info panel (#986)
Browse files Browse the repository at this point in the history
#926

- fix/refactor various components
- add info panel
- add deposition overview metadata table
- add annotations summary metadata table
- add annotations methods summary metadata table



https://github.com/user-attachments/assets/e78dd5b3-4555-4b34-895b-7f93beb74ff7
  • Loading branch information
kne42 authored Aug 21, 2024
1 parent 65f0a4b commit 62fb35f
Show file tree
Hide file tree
Showing 21 changed files with 652 additions and 129 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export function AccordionMetadataTable({
data={data}
tableCellLabelProps={{
renderLoadingSkeleton: false,
width: { min: COLUMN_WIDTH, max: COLUMN_WIDTH },
width: { min: COLUMN_WIDTH, width: COLUMN_WIDTH, max: COLUMN_WIDTH },
...tableCellLabelProps,
}}
tableCellValueProps={{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,10 @@ export function AuthorLink({
)}
>
{author.orcid && (
<ORCIDIcon className="inline mb-0.5" width={iconSize} />
<ORCIDIcon className="inline mb-0.5 mr-sds-xxxs" width={iconSize} />
)}

<span className={cns('ml-sds-xxxs', large ? 'text-sm' : 'text-xs')}>
{author.name}
</span>
<span className={large ? 'text-sm' : 'text-xs'}>{author.name}</span>
</span>

{author.corresponding_author_status && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import { DepositionTableWidths } from 'app/constants/table'
import { Deposition, useDepositions } from 'app/hooks/useDepositions'
import { useI18n } from 'app/hooks/useI18n'
import { useIsLoading } from 'app/hooks/useIsLoading'
import { I18nKeys } from 'app/types/i18n'
import { LogLevel } from 'app/types/logging'
import { cnsNoMerge } from 'app/utils/cns'
import { sendLogs } from 'app/utils/logging'
Expand Down Expand Up @@ -295,7 +294,7 @@ export function DepositionTable() {
className="whitespace-nowrap overflow-x-hidden overflow-ellipsis"
key={entry[0]}
>
{t(entry[1] as I18nKeys)}
{t(entry[1])}
</li>
))}
</ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ export function CollapsibleList({
className={cns(
'flex',
inlineVariant ? 'flex-wrap gap-sds-xxs' : 'flex-col gap-sds-xs',
'text-sds-body-xxs leading-sds-body-xxs',
tableVariant
? 'text-sds-body-s leading-sds-body-s'
: 'text-sds-body-xxs leading-sds-body-xxs',
collapsible && 'transition-[max-height_0.2s_ease-out]',
)}
>
Expand Down Expand Up @@ -83,7 +85,9 @@ export function CollapsibleList({
sdsType="static"
className="!text-current"
/>
{t('showMore', { count: entries.length - collapseAfter })}
{t('showNumberMore', {
count: entries.length - collapseAfter,
})}
</>
) : (
<>
Expand Down
14 changes: 14 additions & 0 deletions frontend/packages/data-portal/app/components/DatabaseEntry.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,17 @@ export function DatabaseEntry(props: DatabaseEntryProps) {
</p>
)
}

export function DatabaseEntryList({ entries }: { entries: string }) {
return (
<ul className="flex flex-col gap-sds-xs text-sds-body-s leading-sds-body-xs">
{entries.split(',').map((entry) => {
return (
<li key={entry}>
<DatabaseEntry entry={entry.trim()} inline />
</li>
)
})}
</ul>
)
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
import { MetadataDrawer } from 'app/components/MetadataDrawer'
import { useDatasetById } from 'app/hooks/useDatasetById'
import { useI18n } from 'app/hooks/useI18n'
import { MetadataDrawerId } from 'app/hooks/useMetadataDrawer'
import { i18n } from 'app/i18n'

import { DatasetMetadataTable } from './DatasetMetadataTable'
import { DatasetTiltSeriesTable } from './DatasetTiltSeriesTable'
import { SampleAndExperimentConditionsTable } from './SampleAndExperimentConditionsTable'

export function DatasetMetadataDrawer() {
const { t } = useI18n()
const { dataset } = useDatasetById()

return (
<MetadataDrawer
drawerId={MetadataDrawerId.Dataset}
title={dataset.title}
label={i18n.datasetDetails}
label={t('datasetDetails')}
>
<DatasetMetadataTable dataset={dataset} />
<SampleAndExperimentConditionsTable dataset={dataset} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,44 +5,28 @@ import { AccordionMetadataTable } from 'app/components/AccordionMetadataTable'
import { AuthorLegend } from 'app/components/AuthorLegend'
import { AuthorInfo } from 'app/components/AuthorLink'
import { AuthorList } from 'app/components/AuthorList'
import { DatabaseEntry } from 'app/components/DatabaseEntry'
import { DatabaseEntryList } from 'app/components/DatabaseEntry'
import { Link } from 'app/components/Link'
import { useI18n } from 'app/hooks/useI18n'
import { getTableData } from 'app/utils/table'

import { DatasetType } from './type'

function DatabaseEntryList({ entries }: { entries: string }) {
return (
<ul className="flex flex-col gap-sds-xs text-sds-body-s leading-sds-body-xs">
{entries.split(',').map((entry) => {
return (
<li key={entry}>
<DatabaseEntry entry={entry.trim()} inline />
</li>
)
})}
</ul>
)
}

interface DatasetMetadataTableProps {
dataset: DatasetType
allFields?: boolean
initialOpen?: boolean
}

export function DatasetMetadataTable({
dataset,
allFields,
showAllFields,
initialOpen,
}: DatasetMetadataTableProps) {
}: {
dataset: DatasetType
showAllFields?: boolean
initialOpen?: boolean
}) {
const { t } = useI18n()

const datasetMetadata = getTableData(
!!allFields && {
!!showAllFields && {
label: t('datasetTitle'),
values: [dataset.title!],
values: [dataset.title ?? ''],
renderValue: (value) => {
return (
<Link
Expand All @@ -62,33 +46,33 @@ export function DatasetMetadataTable({
},
},

!!allFields && {
!!showAllFields && {
label: t('datasetId'),
values: [`${dataset.id!}`],
values: [`${dataset.id ?? ''}`],
},

!!allFields && {
!!showAllFields && {
label: t('description'),
values: [dataset.description ?? ''],
className: 'text-ellipsis line-clamp-3',
},

{
label: t('depositionDate'),
values: [dataset.deposition_date!],
values: [dataset.deposition_date ?? ''],
},

!!allFields && {
!!showAllFields && {
label: t('releaseDate'),
values: [dataset.release_date ?? ''],
},

!!allFields && {
!!showAllFields && {
label: t('lastModifiedDate'),
values: [dataset.last_modified_date ?? ''],
},

!!allFields && {
!!showAllFields && {
label:
dataset.authors && dataset.authors.length === 1
? t('author')
Expand Down Expand Up @@ -128,7 +112,7 @@ export function DatasetMetadataTable({
},
},

!!allFields && {
!!showAllFields && {
label: t('publications'),
values: [dataset.dataset_publications ?? ''],
renderValue: (value: string) => {
Expand All @@ -140,7 +124,7 @@ export function DatasetMetadataTable({
return (
<AccordionMetadataTable
id="dataset-metadata"
header={allFields ? t('dataset') : t('datasetMetadata')}
header={showAllFields ? t('dataset') : t('datasetMetadata')}
data={datasetMetadata}
initialOpen={initialOpen}
/>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import { AccordionMetadataTable } from 'app/components/AccordionMetadataTable'
import { CollapsibleList } from 'app/components/CollapsibleList'
import { shapeTypeToI18nKeyPlural } from 'app/constants/objectShapeTypes'
import { useI18n } from 'app/hooks/useI18n'
import { getTableData } from 'app/utils/table'

export function AnnotationsSummaryMetadataTable({
initialOpen,
}: {
initialOpen?: boolean
}) {
const { t } = useI18n()

// TODO: replace this when backend data hooked up
const fakeListData = [
{
key: '1',
entry: 'dfasdfsdf',
},
{
key: '2',
entry: 'werweqe',
},
{
key: '3',
entry: 'fdsgfdg',
},
{
key: '4',
entry: 'dfghdfgh',
},
{
key: '5',
entry: 'fghjgfhjfghj',
},
{
key: '6',
entry: 'ryturtyu',
},
{
key: '7',
entry: 'ertyery',
},
]

const annotationsSummaryMetadata = getTableData(
{
label: t('annotationsTotal'),
// TODO: replace this when backend data hooked up
values: [(10000).toLocaleString()],
},

{
label: t('annotatedOrganisms'),
values: [],
renderValue: () => (
<CollapsibleList
entries={fakeListData}
collapseAfter={4}
tableVariant
/>
),
},

{
label: t('annotatedObjects'),
values: [],
renderValue: () => (
<CollapsibleList
entries={fakeListData}
collapseAfter={4}
tableVariant
/>
),
},

{
label: t('objectShapeTypes'),
values: [],
renderValue: () => {
// TODO: replace this when backend data hooked up
const shapeTypes = [
'InstanceSegmentation',
'OrientedPoint',
'Point',
'SegmentationMask',
]

return (
<ul className="flex flex-col list-none gap-sds-xs text-sds-body-s leading-sds-body-s">
{Object.entries(shapeTypeToI18nKeyPlural)
.filter(([k]) => shapeTypes.includes(k))
.map(([k, v]) => (
<li key={k}>{t(v)}</li>
))}
</ul>
)
},
},
)

return (
<AccordionMetadataTable
id="annotations-summary-metadata"
header={t('annotationsSummary')}
data={annotationsSummaryMetadata}
initialOpen={initialOpen}
/>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { MetadataDrawer } from 'app/components/MetadataDrawer'
import { useDepositionById } from 'app/hooks/useDepositionById'
import { useI18n } from 'app/hooks/useI18n'
import { MetadataDrawerId } from 'app/hooks/useMetadataDrawer'

import { AnnotationsSummaryMetadataTable } from './AnnotationsSummaryMetadataTable'
import { DepositionMetadataTable } from './DepositionMetadataTable'
import { MethodLinksMetadataTable } from './MethodLinks'

export function DepositionMetadataDrawer() {
const { t } = useI18n()
const { deposition } = useDepositionById()

return (
<MetadataDrawer
drawerId={MetadataDrawerId.Deposition}
title={deposition.title}
label={t('depositionDetails')}
>
<DepositionMetadataTable deposition={deposition} />
<AnnotationsSummaryMetadataTable />
<MethodLinksMetadataTable />
</MetadataDrawer>
)
}
Loading

0 comments on commit 62fb35f

Please sign in to comment.