2024-09-11 20:57:19 +02:00
|
|
|
import React from 'react';
|
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
import classnames from 'classnames';
|
2024-09-30 23:45:14 +02:00
|
|
|
import { ThumbnailList } from '../ThumbnailList';
|
2024-09-11 20:57:19 +02:00
|
|
|
|
|
|
|
|
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '../Accordion';
|
2025-01-23 20:13:44 +01:00
|
|
|
import { Tooltip, TooltipContent, TooltipTrigger } from '../Tooltip';
|
2024-09-11 20:57:19 +02:00
|
|
|
|
|
|
|
|
const StudyItem = ({
|
|
|
|
|
date,
|
|
|
|
|
description,
|
|
|
|
|
numInstances,
|
|
|
|
|
modalities,
|
|
|
|
|
isActive,
|
|
|
|
|
onClick,
|
|
|
|
|
isExpanded,
|
|
|
|
|
displaySets,
|
|
|
|
|
activeDisplaySetInstanceUIDs,
|
|
|
|
|
onClickThumbnail,
|
|
|
|
|
onDoubleClickThumbnail,
|
|
|
|
|
onClickUntrack,
|
|
|
|
|
viewPreset = 'thumbnails',
|
2025-01-13 16:49:08 +01:00
|
|
|
ThumbnailMenuItems,
|
|
|
|
|
StudyMenuItems,
|
|
|
|
|
StudyInstanceUID,
|
2024-10-18 17:42:44 +02:00
|
|
|
}: withAppTypes) => {
|
2024-09-11 20:57:19 +02:00
|
|
|
return (
|
|
|
|
|
<Accordion
|
|
|
|
|
type="single"
|
|
|
|
|
collapsible
|
|
|
|
|
onClick={onClick}
|
2024-11-06 13:15:27 +01:00
|
|
|
onKeyDown={() => {}}
|
2024-09-11 20:57:19 +02:00
|
|
|
role="button"
|
|
|
|
|
tabIndex={0}
|
|
|
|
|
defaultValue={isActive ? 'study-item' : undefined}
|
|
|
|
|
>
|
|
|
|
|
<AccordionItem value="study-item">
|
2025-01-23 20:13:44 +01:00
|
|
|
<AccordionTrigger className={classnames('hover:bg-accent bg-popover group w-full rounded')}>
|
|
|
|
|
<div className="flex h-[40px] w-full flex-row overflow-hidden">
|
|
|
|
|
<div className="flex w-full flex-row items-center justify-between">
|
|
|
|
|
<div className="flex min-w-0 flex-col items-start text-[13px]">
|
|
|
|
|
<Tooltip>
|
|
|
|
|
<TooltipContent>{date}</TooltipContent>
|
2025-03-07 04:19:47 +01:00
|
|
|
<TooltipTrigger
|
|
|
|
|
className="w-full"
|
|
|
|
|
asChild
|
|
|
|
|
>
|
2025-01-23 20:13:44 +01:00
|
|
|
<div className="h-[18px] w-full max-w-[160px] overflow-hidden truncate whitespace-nowrap text-left text-white">
|
|
|
|
|
{date}
|
|
|
|
|
</div>
|
|
|
|
|
</TooltipTrigger>
|
|
|
|
|
</Tooltip>
|
|
|
|
|
<Tooltip>
|
|
|
|
|
<TooltipContent>{description}</TooltipContent>
|
2025-03-07 04:19:47 +01:00
|
|
|
<TooltipTrigger
|
|
|
|
|
className="w-full"
|
|
|
|
|
asChild
|
|
|
|
|
>
|
2025-01-23 20:13:44 +01:00
|
|
|
<div className="text-muted-foreground h-[18px] w-full overflow-hidden truncate whitespace-nowrap text-left">
|
|
|
|
|
{description}
|
|
|
|
|
</div>
|
|
|
|
|
</TooltipTrigger>
|
|
|
|
|
</Tooltip>
|
2024-09-11 20:57:19 +02:00
|
|
|
</div>
|
2025-01-23 20:13:44 +01:00
|
|
|
<div className="text-muted-foreground flex flex-col items-end pl-[10px] text-[12px]">
|
2024-10-18 17:42:44 +02:00
|
|
|
<div className="max-w-[150px] overflow-hidden text-ellipsis">{modalities}</div>
|
2024-09-11 20:57:19 +02:00
|
|
|
<div>{numInstances}</div>
|
|
|
|
|
</div>
|
2025-01-13 16:49:08 +01:00
|
|
|
{StudyMenuItems && (
|
|
|
|
|
<div className="ml-2 flex items-center">
|
|
|
|
|
<StudyMenuItems StudyInstanceUID={StudyInstanceUID} />
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
2024-09-11 20:57:19 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</AccordionTrigger>
|
|
|
|
|
<AccordionContent
|
|
|
|
|
onClick={event => {
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
{isExpanded && displaySets && (
|
|
|
|
|
<ThumbnailList
|
|
|
|
|
thumbnails={displaySets}
|
|
|
|
|
activeDisplaySetInstanceUIDs={activeDisplaySetInstanceUIDs}
|
|
|
|
|
onThumbnailClick={onClickThumbnail}
|
|
|
|
|
onThumbnailDoubleClick={onDoubleClickThumbnail}
|
|
|
|
|
onClickUntrack={onClickUntrack}
|
|
|
|
|
viewPreset={viewPreset}
|
2025-01-13 16:49:08 +01:00
|
|
|
ThumbnailMenuItems={ThumbnailMenuItems}
|
2024-09-11 20:57:19 +02:00
|
|
|
/>
|
|
|
|
|
)}
|
|
|
|
|
</AccordionContent>
|
|
|
|
|
</AccordionItem>
|
|
|
|
|
</Accordion>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
StudyItem.propTypes = {
|
|
|
|
|
date: PropTypes.string.isRequired,
|
|
|
|
|
description: PropTypes.string,
|
|
|
|
|
modalities: PropTypes.string.isRequired,
|
|
|
|
|
numInstances: PropTypes.number.isRequired,
|
|
|
|
|
isActive: PropTypes.bool,
|
|
|
|
|
onClick: PropTypes.func.isRequired,
|
|
|
|
|
isExpanded: PropTypes.bool,
|
|
|
|
|
displaySets: PropTypes.array,
|
|
|
|
|
activeDisplaySetInstanceUIDs: PropTypes.array,
|
|
|
|
|
onClickThumbnail: PropTypes.func,
|
|
|
|
|
onDoubleClickThumbnail: PropTypes.func,
|
|
|
|
|
onClickUntrack: PropTypes.func,
|
|
|
|
|
viewPreset: PropTypes.string,
|
2025-01-13 16:49:08 +01:00
|
|
|
StudyMenuItems: PropTypes.func,
|
|
|
|
|
StudyInstanceUID: PropTypes.string,
|
2024-09-11 20:57:19 +02:00
|
|
|
};
|
|
|
|
|
|
2024-09-27 18:17:54 +02:00
|
|
|
export { StudyItem };
|