import styled from '@emotion/styled'; import { memo, useMemo } from 'react'; import { FaFilm, FaQuestionCircle, FaRegSave, FaRegWindowMaximize, } from 'react-icons/fa'; import { Toolbar, useFullscreen } from 'react-science/ui'; import { docsBaseUrl } from '../../constants.js'; import { useChartData } from '../context/ChartContext.js'; import { useCore } from '../context/CoreContext.js'; import { usePreferences, useWorkspacesList, } from '../context/PreferencesContext.js'; import Button from '../elements/Button.js'; import { ContainerQueryWrapper } from '../elements/ContainerQueryWrapper.js'; import { HeaderContainer } from '../elements/HeaderContainer.js'; import type { LabelStyle } from '../elements/Label.js'; import type { DropDownListItem } from '../elements/dropDownButton/DropDownButton.js'; import DropDownButton from '../elements/dropDownButton/DropDownButton.js'; import { useSaveSettings } from '../hooks/useSaveSettings.js'; import { useWorkspaceAction } from '../hooks/useWorkspaceAction.js'; import { LogsHistoryModal } from '../modal/LogsHistoryModal.js'; import AboutUsModal from '../modal/aboutUs/AboutUsModal.js'; import WorkspaceItem from '../modal/setting/WorkspaceItem.js'; import GeneralSettingsModal from '../modal/setting/general_settings.js'; import { options } from '../toolbar/ToolTypes.js'; import { renderCoreSlot } from '../utility/renderCoreSlot.js'; import { AutoPeakPickingOptionPanel } from './AutoPeakPickingOptionPanel.js'; import { HeaderWrapper } from './HeaderWrapper.js'; import RangesPickingOptionPanel from './RangesPickingOptionPanel.js'; import { SimpleApodizationDimensionOneOptionsPanel } from './SimpleApodizationDimensionOneOptionsPanel.js'; import { SimpleApodizationDimensionTwoOptionsPanel } from './SimpleApodizationDimensionTwoOptionsPanel.js'; import { SimpleApodizationOptionsPanel } from './SimpleApodizationOptionsPanel.js'; import { SimpleBaseLineCorrectionOptionsPanel } from './SimpleBaseLineCorrectionOptionsPanel.js'; import { SimplePhaseCorrectionOptionsPanel } from './SimplePhaseCorrectionOptionsPanel.js'; import { SimplePhaseCorrectionTwoDimensionsPanel } from './SimplePhaseCorrectionTwoDimensionsPanel.js'; import { SimpleZeroFillingDimensionOneOptionsPanel } from './SimpleZeroFillingDimensionOneOptionsPanel.js'; import { SimpleZeroFillingDimensionTwoOptionsPanel } from './SimpleZeroFillingDimensionTwoOptionsPanel.js'; import { SimpleZeroFillingOptionsPanel } from './SimpleZeroFillingOptionsPanel.js'; import Zones2DOptionPanel from './Zones2DOptionPanel.js'; export const headerLabelStyle: LabelStyle = { label: { fontWeight: 'normal', fontSize: '12px', }, wrapper: { paddingRight: '5px', height: '100%', display: 'flex', alignItems: 'center', }, }; interface HeaderInnerProps { selectedOptionPanel: string | null; height: number; } function HeaderInner(props: HeaderInnerProps) { const { selectedOptionPanel, height } = props; const core = useCore(); const { current: { display: { general }, }, workspace, } = usePreferences(); const { setActiveWorkspace } = useWorkspaceAction(); const fullscreen = useFullscreen(); const workspacesList = useWorkspacesList(); const hideGeneralSettings = !!( general?.hideGeneralSettings && workspace.base ); const hideWorkspaces = !!(general?.hideWorkspaces && workspace.base); const selectedPanel = useMemo(() => { switch (selectedOptionPanel) { case options.apodization.id: return ; case options.apodizationDimension1.id: return ; case options.apodizationDimension2.id: return ; case options.zeroFilling.id: return ; case options.zeroFillingDimension1.id: return ; case options.zeroFillingDimension2.id: return ; case options.phaseCorrection.id: return ; case options.phaseCorrectionTwoDimensions.id: return ; case options.baselineCorrection.id: return ; case options.peakPicking.id: return ; case options.rangePicking.id: return ; case options.zonePicking.id: return ; default: return null; } }, [selectedOptionPanel]); function changeWorkspaceHandler(option: DropDownListItem) { setActiveWorkspace(option.key); } function renderItem(item: any) { return ; } return (
{selectedPanel}
{renderCoreSlot(core, 'topbar.right')} {!hideWorkspaces && ( )} {!hideGeneralSettings && } {!general?.hideLogs && }
{!general?.hideHelp && ( window.open(docsBaseUrl, '_blank')} icon={} /> )} window.open('https://www.nmrium.org/tutorials', '_blank') } icon={} /> {!hideGeneralSettings && ( )} {!fullscreen.isFullScreen && !general?.hideMaximize && ( } /> )}
); } function SaveButton() { const { workspace, workspaces, originalWorkspaces } = usePreferences(); const { saveSettings, SaveSettingsModal } = useSaveSettings(); const isWorkspaceHasSettingNotSaved = JSON.stringify(workspaces[workspace.current]) !== JSON.stringify(originalWorkspaces[workspace.current]); function handleSave() { saveSettings(); } return ( <> ); } const MemoizedHeader = memo(HeaderInner); export function Header() { const { toolOptions: { selectedOptionPanel }, height, } = useChartData(); return ( ); } const PluginTopBarRight = styled.div` align-items: center; display: flex; gap: 5px; margin-right: 5px; `;