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.
66 lines (63 loc) • 1.85 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,
};