You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/components/conversation/media-gallery/AttachmentSection.tsx

63 lines
1.7 KiB
TypeScript

import React from 'react';
import { DocumentListItem } from './DocumentListItem';
import { MediaGridItem } from './MediaGridItem';
import { missingCaseError } from '../../../util/missingCaseError';
import { MediaItemType } from '../../lightbox/LightboxGallery';
type Props = {
type: 'media' | 'documents';
mediaItems: Array<MediaItemType>;
};
const Items = (props: Props): JSX.Element => {
const { mediaItems, type } = props;
return (
<>
{mediaItems.map((mediaItem, position, array) => {
const shouldShowSeparator = position < array.length - 1;
const { index, attachment, messageTimestamp, messageId } = mediaItem;
switch (type) {
case 'media':
return (
<MediaGridItem
key={`${messageId}-${index}`}
mediaItem={mediaItem}
mediaItems={mediaItems}
/>
);
case 'documents':
return (
<DocumentListItem
key={`${messageId}-${index}`}
fileName={attachment.fileName}
fileSize={attachment.size}
shouldShowSeparator={shouldShowSeparator}
timestamp={messageTimestamp}
mediaItem={mediaItem}
/>
);
default:
return missingCaseError(type);
}
})}
</>
);
};
export const AttachmentSection = (props: Props) => {
const { type } = props;
return (
<div className="module-attachment-section">
<div className="module-attachment-section__items">
<div className={`module-attachment-section__items-${type}`}>
<Items {...props} />
</div>
</div>
</div>
);
};