mirador
Version:
An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.
64 lines (61 loc) • 1.9 kB
JSX
import { useContext } from 'react';
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';
import ListItemText from '@mui/material/ListItemText';
import ListSubheader from '@mui/material/ListSubheader';
import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
import WorkspaceContext from '../contexts/WorkspaceContext';
/**
*/
export function WindowList({
handleClose, windowIds, focusWindow, focusedWindowId = null,
titles = {}, tReady = false, ...menuProps
}) {
const { t } = useTranslation();
const container = useContext(WorkspaceContext);
return (
<Menu
anchorOrigin={{
horizontal: 'right',
vertical: 'top',
}}
transformOrigin={{
horizontal: 'left',
vertical: 'top',
}}
id="window-list-menu"
container={container?.current}
onClose={handleClose}
{...menuProps}
>
<ListSubheader role="presentation" selected={false} disabled tabIndex="-1">
{t('openWindows')}
</ListSubheader>
{
windowIds.map((windowId, i) => (
<MenuItem
key={windowId}
selected={windowId === focusedWindowId}
onClick={(e) => { focusWindow(windowId, true); handleClose(e); }}
>
<ListItemText primaryTypographyProps={{ variant: 'body1' }}>
{
titles[windowId] || t('untitled')
}
</ListItemText>
</MenuItem>
))
}
</Menu>
);
}
WindowList.propTypes = {
container: PropTypes.shape({ current: PropTypes.instanceOf(Element) }),
focusedWindowId: PropTypes.string,
focusWindow: PropTypes.func.isRequired,
handleClose: PropTypes.func.isRequired,
titles: PropTypes.objectOf(PropTypes.string),
tReady: PropTypes.bool,
windowIds: PropTypes.arrayOf(PropTypes.string).isRequired,
};