import React from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { UserPreferences, AboutModal, useModal } from '@ohif/ui'; import { Header } from '@ohif/ui-next'; import i18n from '@ohif/i18n'; import { hotkeys } from '@ohif/core'; import { Toolbar } from '../Toolbar/Toolbar'; import HeaderPatientInfo from './HeaderPatientInfo'; import { PatientInfoVisibility } from './HeaderPatientInfo/HeaderPatientInfo'; import { preserveQueryParameters, publicUrl } from '@ohif/app'; const { availableLanguages, defaultLanguage, currentLanguage } = i18n; function ViewerHeader({ hotkeysManager, extensionManager, servicesManager, appConfig, }: withAppTypes<{ appConfig: AppTypes.Config }>) { const navigate = useNavigate(); const location = useLocation(); const onClickReturnButton = () => { const { pathname } = location; const dataSourceIdx = pathname.indexOf('/', 1); const query = new URLSearchParams(window.location.search); const configUrl = query.get('configUrl'); const dataSourceName = pathname.substring(dataSourceIdx + 1); const existingDataSource = extensionManager.getDataSources(dataSourceName); const searchQuery = new URLSearchParams(); if (dataSourceIdx !== -1 && existingDataSource) { searchQuery.append('datasources', pathname.substring(dataSourceIdx + 1)); } if (configUrl) { searchQuery.append('configUrl', configUrl); } navigate({ pathname: publicUrl, search: decodeURIComponent(searchQuery.toString()), }); }; const { t } = useTranslation(); const { show, hide } = useModal(); const { hotkeyDefinitions, hotkeyDefaults } = hotkeysManager; const versionNumber = process.env.VERSION_NUMBER; const commitHash = process.env.COMMIT_HASH; const menuOptions = [ { title: t('Header:About'), icon: 'info', onClick: () => show({ content: AboutModal, title: t('AboutModal:About OHIF Viewer'), contentProps: { versionNumber, commitHash }, containerDimensions: 'max-w-4xl max-h-4xl', }), }, { title: t('Header:Preferences'), icon: 'settings', onClick: () => show({ title: t('UserPreferencesModal:User preferences'), content: UserPreferences, containerDimensions: 'w-[70%] max-w-[900px]', contentProps: { hotkeyDefaults: hotkeysManager.getValidHotkeyDefinitions(hotkeyDefaults), hotkeyDefinitions, currentLanguage: currentLanguage(), availableLanguages, defaultLanguage, onCancel: () => { hotkeys.stopRecord(); hotkeys.unpause(); hide(); }, onSubmit: ({ hotkeyDefinitions, language }) => { if (language.value !== currentLanguage().value) { i18n.changeLanguage(language.value); } hotkeysManager.setHotkeys(hotkeyDefinitions); hide(); }, onReset: () => hotkeysManager.restoreDefaultBindings(), hotkeysModule: hotkeys, }, }), }, ]; if (appConfig.oidc) { menuOptions.push({ title: t('Header:Logout'), icon: 'power-off', onClick: async () => { navigate(`/logout?redirect_uri=${encodeURIComponent(window.location.href)}`); }, }); } return (
} PatientInfo={ appConfig.showPatientInfo !== PatientInfoVisibility.DISABLED && ( ) } >
); } export default ViewerHeader;