import React from 'react'; import classNames from 'classnames'; import { AttachmentSection } from './AttachmentSection'; import { EmptyState } from './EmptyState'; import { ItemClickEvent } from './types/ItemClickEvent'; import { missingCaseError } from '../../../util/missingCaseError'; import { MediaItemType } from '../../LightboxGallery'; interface Props { documents: Array; media: Array; onItemClick?: (event: ItemClickEvent) => void; } interface State { selectedTab: 'media' | 'documents'; } interface TabSelectEvent { type: 'media' | 'documents'; } const Tab = ({ isSelected, label, onSelect, type, }: { isSelected: boolean; label: string; onSelect?: (event: TabSelectEvent) => void; type: 'media' | 'documents'; }) => { const handleClick = onSelect ? () => { onSelect({ type }); } : undefined; return (
{label}
); }; export class MediaGallery extends React.Component { public state: State = { selectedTab: 'media', }; public render() { const { selectedTab } = this.state; return (
{this.renderSections()}
); } private readonly handleTabSelect = (event: TabSelectEvent): void => { this.setState({ selectedTab: event.type }); }; private renderSections() { const { media, documents, onItemClick } = this.props; const { selectedTab } = this.state; const mediaItems = selectedTab === 'media' ? media : documents; const type = selectedTab; if (!mediaItems || mediaItems.length === 0) { const label = (() => { switch (type) { case 'media': return window.i18n('mediaEmptyState'); case 'documents': return window.i18n('documentsEmptyState'); default: throw missingCaseError(type); } })(); return ; } return (
); } }