import {useState} from 'react'; import {FormattedMessage} from 'react-intl'; import { Icon, Item, List, Menu, MenuItemProps, Popup, Tab, } from 'semantic-ui-react'; import {Source} from '../../util/gedcom_util'; import {AdditionalFiles, FileEntry} from './additional-files'; import {MultilineText} from './multiline-text'; import {Sources} from './sources'; import {WrappedImage} from './wrapped-image'; export interface Image { url: string; filename: string; title?: string; } interface Props { images?: Image[]; notes?: string[][]; sources?: Source[]; indi: string; files?: FileEntry[]; } function eventImages(images: Image[] | undefined) { return ( !!images && images.map((image, index) => ( )) ); } function eventNotes(notes: string[][] | undefined) { return ( !!notes?.length && notes.map((note, index) => (
( {line} ))} />
)) ); } export function EventExtras(props: Props) { const [activeIndex, setActiveIndex] = useState(-1); const [indi, setIndi] = useState(''); if (!indi || indi !== props.indi) { setActiveIndex(-1); setIndi(props.indi); } function handleTabOnClick( _event: React.MouseEvent, menuItemProps: MenuItemProps, ) { menuItemProps.index !== undefined && activeIndex !== menuItemProps.index ? setActiveIndex(menuItemProps.index) : setActiveIndex(-1); } const imageTab = props.images?.length && { menuItem: ( } size="mini" position="bottom center" trigger={} /> ), render: () => {eventImages(props.images)}, }; const noteTab = props.notes?.length && { menuItem: ( } size="mini" position="bottom center" trigger={} /> ), render: () => {eventNotes(props.notes)}, }; const sourceTab = props.sources?.length && { menuItem: ( } size="mini" position="bottom center" trigger={} /> ), render: () => ( ), }; const filesTab = props.files?.length && { menuItem: ( } size="mini" position="bottom center" trigger={} /> ), render: () => ( ), }; const panes = [imageTab, noteTab, sourceTab, filesTab].flatMap((tab) => tab ? [tab] : [], ); if (panes.length) { return ( ); } return null; }