@@ -14,6 +14,7 @@ import {
14
14
usePageMetaHelper ,
15
15
} from '@toeverything/hooks/use-block-suite-page-meta' ;
16
16
import { useAtom } from 'jotai' ;
17
+ import { useRouter } from 'next/router' ;
17
18
import { useState } from 'react' ;
18
19
19
20
import { workspacePreferredModeAtom } from '../../../../atoms' ;
@@ -22,10 +23,41 @@ import { useCurrentPageId } from '../../../../hooks/current/use-current-page-id'
22
23
import { useCurrentWorkspace } from '../../../../hooks/current/use-current-workspace' ;
23
24
import { toast } from '../../../../utils' ;
24
25
import { Export , MoveToTrash } from '../../../affine/operation-menu-items' ;
25
-
26
- export const EditorOptionMenu = ( ) => {
26
+ import { MenuThemeModeSwitch } from '../header-right-items/theme-mode-switch' ;
27
+ import {
28
+ StyledHorizontalDivider ,
29
+ StyledHorizontalDividerContainer ,
30
+ } from '../styles' ;
31
+ import { LanguageMenu } from './LanguageMenu' ;
32
+ const CommonMenu = ( ) => {
33
+ const content = (
34
+ < div
35
+ onClick = { e => {
36
+ e . stopPropagation ( ) ;
37
+ } }
38
+ >
39
+ < MenuThemeModeSwitch />
40
+ < LanguageMenu />
41
+ </ div >
42
+ ) ;
43
+ return (
44
+ < FlexWrapper alignItems = "center" justifyContent = "center" >
45
+ < Menu
46
+ width = { 276 }
47
+ content = { content }
48
+ // placement="bottom-end"
49
+ disablePortal = { true }
50
+ trigger = "click"
51
+ >
52
+ < IconButton data-testid = "editor-option-menu" iconSize = { [ 24 , 24 ] } >
53
+ < MoreVerticalIcon />
54
+ </ IconButton >
55
+ </ Menu >
56
+ </ FlexWrapper >
57
+ ) ;
58
+ } ;
59
+ const PageMenu = ( ) => {
27
60
const { t } = useTranslation ( ) ;
28
-
29
61
// fixme(himself65): remove these hooks ASAP
30
62
const [ workspace ] = useCurrentWorkspace ( ) ;
31
63
const [ pageId ] = useCurrentPageId ( ) ;
@@ -35,55 +67,70 @@ export const EditorOptionMenu = () => {
35
67
const pageMeta = useBlockSuitePageMeta ( blockSuiteWorkspace ) . find (
36
68
meta => meta . id === pageId
37
69
) ;
70
+ assertExists ( pageMeta ) ;
38
71
const [ record , set ] = useAtom ( workspacePreferredModeAtom ) ;
39
72
const mode = record [ pageId ] ?? 'page' ;
40
- assertExists ( pageMeta ) ;
41
- const { favorite } = pageMeta ;
73
+
74
+ const favorite = pageMeta . favorite ?? false ;
42
75
const { setPageMeta } = usePageMetaHelper ( blockSuiteWorkspace ) ;
43
76
const [ openConfirm , setOpenConfirm ] = useState ( false ) ;
44
77
const { removeToTrash } = useBlockSuiteMetaHelper ( blockSuiteWorkspace ) ;
45
78
const EditMenu = (
46
79
< >
47
- < MenuItem
48
- data-testid = "editor-option-menu-favorite"
49
- onClick = { ( ) => {
50
- setPageMeta ( pageId , { favorite : ! favorite } ) ;
51
- toast (
52
- favorite ? t ( 'Removed from Favorites' ) : t ( 'Added to Favorites' )
53
- ) ;
54
- } }
55
- icon = {
56
- favorite ? (
57
- < FavoritedIcon style = { { color : 'var(--affine-primary-color)' } } />
58
- ) : (
59
- < FavoriteIcon />
60
- )
61
- }
62
- >
63
- { favorite ? t ( 'Remove from favorites' ) : t ( 'Add to Favorites' ) }
64
- </ MenuItem >
65
- < MenuItem
66
- icon = { mode === 'page' ? < EdgelessIcon /> : < PageIcon /> }
67
- data-testid = "editor-option-menu-edgeless"
68
- onClick = { ( ) => {
69
- set ( record => ( {
70
- ...record ,
71
- [ pageId ] : mode === 'page' ? 'edgeless' : 'page' ,
72
- } ) ) ;
80
+ < >
81
+ < MenuItem
82
+ data-testid = "editor-option-menu-favorite"
83
+ onClick = { ( ) => {
84
+ setPageMeta ( pageId , { favorite : ! favorite } ) ;
85
+ toast (
86
+ favorite ? t ( 'Removed from Favorites' ) : t ( 'Added to Favorites' )
87
+ ) ;
88
+ } }
89
+ icon = {
90
+ favorite ? (
91
+ < FavoritedIcon style = { { color : 'var(--affine-primary-color)' } } />
92
+ ) : (
93
+ < FavoriteIcon />
94
+ )
95
+ }
96
+ >
97
+ { favorite ? t ( 'Remove from favorites' ) : t ( 'Add to Favorites' ) }
98
+ </ MenuItem >
99
+ < MenuItem
100
+ icon = { mode === 'page' ? < EdgelessIcon /> : < PageIcon /> }
101
+ data-testid = "editor-option-menu-edgeless"
102
+ onClick = { ( ) => {
103
+ set ( record => ( {
104
+ ...record ,
105
+ [ pageId ] : mode === 'page' ? 'edgeless' : 'page' ,
106
+ } ) ) ;
107
+ } }
108
+ >
109
+ { t ( 'Convert to ' ) }
110
+ { mode === 'page' ? t ( 'Edgeless' ) : t ( 'Page' ) }
111
+ </ MenuItem >
112
+ < Export />
113
+ { ! pageMeta . isRootPinboard && (
114
+ < MoveToTrash
115
+ testId = "editor-option-menu-delete"
116
+ onItemClick = { ( ) => {
117
+ setOpenConfirm ( true ) ;
118
+ } }
119
+ />
120
+ ) }
121
+ < StyledHorizontalDividerContainer >
122
+ < StyledHorizontalDivider />
123
+ </ StyledHorizontalDividerContainer >
124
+ </ >
125
+
126
+ < div
127
+ onClick = { e => {
128
+ e . stopPropagation ( ) ;
73
129
} }
74
130
>
75
- { t ( 'Convert to ' ) }
76
- { mode === 'page' ? t ( 'Edgeless' ) : t ( 'Page' ) }
77
- </ MenuItem >
78
- < Export />
79
- { ! pageMeta . isRootPinboard && (
80
- < MoveToTrash
81
- testId = "editor-option-menu-delete"
82
- onItemClick = { ( ) => {
83
- setOpenConfirm ( true ) ;
84
- } }
85
- />
86
- ) }
131
+ < MenuThemeModeSwitch />
132
+ < LanguageMenu />
133
+ </ div >
87
134
</ >
88
135
) ;
89
136
@@ -116,3 +163,7 @@ export const EditorOptionMenu = () => {
116
163
</ >
117
164
) ;
118
165
} ;
166
+ export const EditorOptionMenu = ( ) => {
167
+ const router = useRouter ( ) ;
168
+ return router . query . pageId ? < PageMenu /> : < CommonMenu /> ;
169
+ } ;
0 commit comments