diff --git a/packages/frontend/core/src/mobile/pages/workspace/detail/menu/mode-switch.css.ts b/packages/frontend/core/src/mobile/pages/workspace/detail/menu/mode-switch.css.ts new file mode 100644 index 0000000000..d056d14cd0 --- /dev/null +++ b/packages/frontend/core/src/mobile/pages/workspace/detail/menu/mode-switch.css.ts @@ -0,0 +1,6 @@ +import { style } from '@vanilla-extract/css'; + +export const radioWrapper = style({ + padding: '6px 10px', + width: '100%', +}); diff --git a/packages/frontend/core/src/mobile/pages/workspace/detail/menu/mode-switch.tsx b/packages/frontend/core/src/mobile/pages/workspace/detail/menu/mode-switch.tsx new file mode 100644 index 0000000000..8af9aa1395 --- /dev/null +++ b/packages/frontend/core/src/mobile/pages/workspace/detail/menu/mode-switch.tsx @@ -0,0 +1,61 @@ +import { + RadioGroup, + type RadioItem, + useMobileMenuController, +} from '@affine/component'; +import { EditorService } from '@affine/core/modules/editor'; +import track from '@affine/track'; +import type { DocMode } from '@blocksuite/affine/blocks'; +import { useLiveData, useService } from '@toeverything/infra'; +import { useCallback } from 'react'; + +import * as styles from './mode-switch.css'; + +const EdgelessRadioItem: RadioItem = { + value: 'edgeless', + label: 'Edgeless', + testId: 'switch-edgeless-mode-button', +}; +const PageRadioItem: RadioItem = { + value: 'page', + label: 'Page', + testId: 'switch-page-mode-button', +}; +const items = [PageRadioItem, EdgelessRadioItem]; + +export const EditorModeSwitch = () => { + const { close } = useMobileMenuController(); + const editor = useService(EditorService).editor; + const trash = useLiveData(editor.doc.trash$); + const isSharedMode = editor.isSharedMode; + const currentMode = useLiveData(editor.mode$); + + const onToggle = useCallback( + (mode: DocMode) => { + editor.setMode(mode); + editor.setSelector(undefined); + track.$.header.actions.switchPageMode({ mode }); + close(); + }, + [close, editor] + ); + + if (trash || isSharedMode) { + return null; + } + + return ( +