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.
39 lines (33 loc) • 1.27 kB
JSX
import { useCallback } from 'react';
import PropTypes from 'prop-types';
import { ErrorBoundary } from 'react-error-boundary';
import { useTranslation } from 'react-i18next';
import CompanionWindowRegistry from '../lib/CompanionWindowRegistry';
import CompanionWindow from '../containers/CompanionWindow';
import ErrorContent from '../containers/ErrorContent';
/**
* Render a companion window using the appropriate component for the content
*/
export function CompanionWindowFactory({ content = null, id, windowId }) {
const { t } = useTranslation();
const ErroredCompanionWindow = useCallback(
({ error }) => (
<CompanionWindow title={t('error')} windowId={windowId} id={id}>
<ErrorContent error={error} windowId={windowId} companionWindowId={id} />
</CompanionWindow>
),
[windowId, t, id],
);
const DynamicCompanionWindowType = CompanionWindowRegistry[content];
if (!DynamicCompanionWindowType) return null;
return (
<ErrorBoundary fallbackComponent={ErroredCompanionWindow}>
<DynamicCompanionWindowType id={id} windowId={windowId} />
</ErrorBoundary>
);
}
CompanionWindowFactory.propTypes = {
content: PropTypes.string,
id: PropTypes.string.isRequired,
windowId: PropTypes.string.isRequired,
};