import type { PopperProps } from '@affine/component'; import { QuickSearchTips } from '@affine/component'; import { getEnvironment } from '@affine/env'; import { ArrowDownSmallIcon } from '@blocksuite/icons'; import { assertExists } from '@blocksuite/store'; import { useAtomValue, useSetAtom } from 'jotai'; import type { HTMLAttributes, PropsWithChildren } from 'react'; import { forwardRef, useCallback, useRef } from 'react'; import { currentEditorAtom, openQuickSearchModalAtom } from '../../../atoms'; import { useGuideHidden } from '../../../hooks/use-is-first-load'; import { usePageMeta } from '../../../hooks/use-page-meta'; import { useElementResizeEffect } from '../../../hooks/use-workspaces'; import { QuickSearchButton } from '../../pure/quick-search-button'; import { EditorModeSwitch } from './editor-mode-switch'; import type { BaseHeaderProps } from './header'; import { Header } from './header'; import { StyledQuickSearchTipButton, StyledQuickSearchTipContent, StyledSearchArrowWrapper, StyledSwitchWrapper, StyledTitle, StyledTitleContainer, StyledTitleWrapper, } from './styles'; export type WorkspaceHeaderProps = BaseHeaderProps; export const WorkspaceHeader = forwardRef< HTMLDivElement, PropsWithChildren & HTMLAttributes >((props, ref) => { const { workspace, currentPage, children, isPublic } = props; // fixme(himself65): remove this atom and move it to props const setOpenQuickSearch = useSetAtom(openQuickSearchModalAtom); const pageMeta = usePageMeta(workspace.blockSuiteWorkspace).find( meta => meta.id === currentPage?.id ); assertExists(pageMeta); const title = pageMeta.title; const [isTipsHidden, setTipsHidden] = useGuideHidden(); const isMac = () => { const env = getEnvironment(); return env.isBrowser && env.isMacOs; }; const popperRef: PopperProps['popperRef'] = useRef(null); useElementResizeEffect( useAtomValue(currentEditorAtom), useCallback(() => { if (isTipsHidden.quickSearchTips || !popperRef.current) { return; } popperRef.current.update(); }, [isTipsHidden.quickSearchTips]) ); const TipsContent = (
Click button { } or use {isMac() ? ' ⌘ + K' : ' Ctrl + K'} to activate Quick Search. Then you can search keywords or quickly open recently viewed pages.
setTipsHidden({ ...isTipsHidden, quickSearchTips: true }) } > Got it
); return (
{children} {!isPublic && currentPage && ( {title || 'Untitled'} { setOpenQuickSearch(true); }} /> )}
); }); WorkspaceHeader.displayName = 'BlockSuiteEditorHeader';