import { memo, forwardRef } from 'react' import { Dropdown, DropdownItem, DropdownMenu, DropdownToggle, DropdownToggleCustom, } from '@/shared/components/dropdown/dropdown-menu' import { Trans, useTranslation } from 'react-i18next' import { IdeLayout, IdeView, useLayoutContext, } from '../../../shared/context/layout-context' import * as eventTracking from '../../../infrastructure/event-tracking' import { DetachRole } from '@/shared/context/detach-context' import MaterialIcon from '@/shared/components/material-icon' import OLTooltip from '@/shared/components/ol/ol-tooltip' import OLSpinner from '@/shared/components/ol/ol-spinner' const isActiveDropdownItem = ({ iconFor, pdfLayout, view, detachRole, }: { iconFor: string pdfLayout: IdeLayout view: IdeView | null detachRole?: DetachRole }) => { if (detachRole === 'detacher' || view === 'history') { return false } if ( iconFor === 'editorOnly' && pdfLayout === 'flat' && (view === 'editor' || view === 'file') ) { return true } else if (iconFor === 'pdfOnly' && pdfLayout === 'flat' && view === 'pdf') { return true } else if (iconFor === 'sideBySide' && pdfLayout === 'sideBySide') { return true } return false } function EnhancedDropdownItem({ active, ...props }: React.ComponentProps) { return ( ) } const LayoutDropdownToggleButton = forwardRef< HTMLButtonElement, { onClick: (e: React.MouseEvent) => void } >(({ onClick, ...props }, ref) => { const handleClick = (e: React.MouseEvent) => { eventTracking.sendMB('navigation-clicked-layout') onClick(e) } return }) LayoutDropdownToggleButton.displayName = 'LayoutDropdownToggleButton' function BS5DetachDisabled() { const { t } = useTranslation() return ( {t('pdf_in_separate_tab')} ) } function LayoutDropdownButton() { const { detachIsLinked, detachRole, view, pdfLayout, handleChangeLayout, handleDetach, } = useLayoutContext() return ( ) } type LayoutDropdownButtonUiProps = { processing: boolean handleChangeLayout: (newLayout: IdeLayout, newView?: IdeView) => void handleDetach: () => void detachIsLinked: boolean detachRole: DetachRole pdfLayout: IdeLayout view: IdeView | null detachable: boolean } export const LayoutDropdownButtonUi = ({ processing, handleChangeLayout, handleDetach, detachIsLinked, detachRole, view, pdfLayout, detachable, }: LayoutDropdownButtonUiProps) => { const { t } = useTranslation() return ( <>
{processing ? t('layout_processing') : ''}
{processing ? ( ) : ( )} {t('layout')} handleChangeLayout('sideBySide')} active={isActiveDropdownItem({ iconFor: 'sideBySide', pdfLayout, view, detachRole, })} leadingIcon="dock_to_right" > {t('editor_and_pdf')} handleChangeLayout('flat', 'editor')} active={isActiveDropdownItem({ iconFor: 'editorOnly', pdfLayout, view, detachRole, })} leadingIcon="code" >
, ]} />
handleChangeLayout('flat', 'pdf')} active={isActiveDropdownItem({ iconFor: 'pdfOnly', pdfLayout, view, detachRole, })} leadingIcon="picture_as_pdf" >
, ]} />
{detachable ? ( handleDetach()} active={detachRole === 'detacher' && detachIsLinked} trailingIcon={ detachRole === 'detacher' ? ( detachIsLinked ? ( 'check' ) : ( ) ) : null } leadingIcon="select_window" > {t('pdf_in_separate_tab')} ) : ( )}
) } export default memo(LayoutDropdownButton)