import { LogoIcon, SearchIcon, SideBarViewCloseIcon, SideBarViewIcon, } from '@toeverything/components/icons'; import { IconButton, styled, Tooltip } from '@toeverything/components/ui'; import { useTranslation } from '@toeverything/datasource/i18n'; import { useCurrentEditors, useLocalTrigger, useShowSettingsSidebar, } from '@toeverything/datasource/state'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { EditorBoardSwitcher } from './EditorBoardSwitcher'; import { fsApiSupported } from './FileSystem'; import { Logo } from './Logo'; import { CurrentPageTitle } from './Title'; export const LayoutHeader = () => { const [isLocalWorkspace] = useLocalTrigger(); const { toggleSettingsSidebar: toggleInfoSidebar, showSettingsSidebar } = useShowSettingsSidebar(); const { t } = useTranslation(); // because of header not compatible with small screen, hide the mode switcher in that case, this will be optimize in future. const [hideSwitcher, setHideSwither] = useState(false); const [rootEle, setRootEle] = useState(); useEffect(() => { if (rootEle) { const observer = new ResizeObserver(entries => { setHideSwither(entries[0].contentRect.width < 970); }); observer.observe(rootEle); return () => { observer.disconnect(); }; } return undefined; }, [rootEle]); const warningTips = useMemo(() => { if (!fsApiSupported()) { return t('WarningTips.IsNotfsApiSupported'); } else if (!isLocalWorkspace) { return t('WarningTips.IsNotLocalWorkspace'); } else { return t('WarningTips.DoNotStore'); } }, [isLocalWorkspace, t]); const { currentEditors } = useCurrentEditors(); const handleSearch = useCallback(() => { for (const key in currentEditors || {}) { currentEditors[key].getHooks().onSearch(); } }, [currentEditors]); return ( {t('Share')}
{showSettingsSidebar ? ( ) : ( )}
{hideSwitcher ? null : ( )}
); }; const StyledUnstableTips = styled('div')(({ theme }) => { return { width: '100%', height: '2em', display: 'flex', zIndex: theme.affine.zIndex.header, backgroundColor: '#fff8c5', borderWidth: '1px 0', borderColor: '#e4e49588', borderStyle: 'solid', }; }); const StyledUnstableTipsText = styled('span')(({ theme }) => { return { margin: 'auto 36px', width: '100%', textAlign: 'center', }; }); const StyledContainerForHeaderRoot = styled('div')(({ theme }) => { return { width: '100%', zIndex: theme.affine.zIndex.header, backgroundColor: '#fff', }; }); const StyledHeaderRoot = styled('div')(({ theme }) => { return { position: 'relative', display: 'flex', justifyContent: 'space-between', alignItems: 'center', height: 60, marginLeft: 36, marginRight: 36, }; }); const FlexContainer = styled('div')({ display: 'flex', alignItems: 'center' }); const TitleContainer = styled('div')(({ theme }) => { return { // marginLeft: theme.affine.spacing.lgSpacing, marginLeft: 100, maxWidth: 500, overflowX: 'hidden', color: theme.affine.palette.primaryText, lineHeight: '18px', fontSize: '15px', fontStyle: 'normal', fontWeight: '400', letterSpacing: '1.06px', display: 'flex', alignItems: 'center', }; }); const StyledHelper = styled('div')({ display: 'flex', alignItems: 'center', }); const StyledShare = styled('div')<{ disabled?: boolean }>({ padding: '10px 12px', fontWeight: 600, fontSize: '14px', cursor: 'not-allowed', color: '#98ACBD', textTransform: 'none', /* disabled for current time */ // color: '#3E6FDB', // '&:hover': { // background: '#F5F7F8', // borderRadius: '5px', // }, }); const StyledLogoIcon = styled(LogoIcon)(({ theme }) => { return { color: theme.affine.palette.primary, cursor: 'pointer', }; }); const StyledContainerForEditorBoardSwitcher = styled('div')({ width: '100%', position: 'absolute', display: 'flex', justifyContent: 'center', pointerEvents: 'none', });