@@ -38,20 +38,35 @@ function MorePageActions({ view, onClose }: {
3838
3939 const {
4040 updatePage,
41+ uploadFile,
4142 } = useAppHandlers ( ) ;
4243 const { t } = useTranslation ( ) ;
4344
44- const handleChangeIcon = useCallback ( async ( icon : { ty : ViewIconType , value : string } ) => {
45+ const viewId = view . view_id ;
46+
47+ const onUploadFile = useCallback ( async ( file : File ) => {
48+ if ( ! uploadFile ) return Promise . reject ( ) ;
49+ return uploadFile ( viewId , file ) ;
50+ } , [ uploadFile , viewId ] ) ;
51+
52+ const handleChangeIcon = useCallback ( async ( icon : { ty : ViewIconType , value : string , color ?: string } ) => {
4553 try {
4654 await updatePage ?.( view . view_id , {
47- icon : icon ,
55+ icon : icon . ty === ViewIconType . Icon ? {
56+ ty : ViewIconType . Icon ,
57+ value : JSON . stringify ( {
58+ color : icon . color ,
59+ groupName : icon . value . split ( '/' ) [ 0 ] ,
60+ iconName : icon . value . split ( '/' ) [ 1 ] ,
61+ } ) ,
62+ } : icon ,
4863 name : view . name ,
4964 extra : view . extra || { } ,
5065 } ) ;
5166 setIconPopoverAnchorEl ( null ) ;
5267 onClose ?.( ) ;
5368 // eslint-disable-next-line
54- } catch ( e : any ) {
69+ } catch ( e : any ) {
5570 notify . error ( e ) ;
5671 }
5772 } , [ onClose , updatePage , view . extra , view . name , view . view_id ] ) ;
@@ -63,14 +78,14 @@ function MorePageActions({ view, onClose }: {
6378 const actions = useMemo ( ( ) => {
6479 return [ {
6580 label : t ( 'button.rename' ) ,
66- icon : < EditIcon /> ,
81+ icon : < EditIcon /> ,
6782 onClick : ( ) => {
6883 setRenameModalOpen ( true ) ;
6984 onClose ?.( ) ;
7085 } ,
7186 } , {
7287 label : t ( 'disclosureAction.changeIcon' ) ,
73- icon : < ChangeIcon /> ,
88+ icon : < ChangeIcon /> ,
7489 onClick : ( e : React . MouseEvent < HTMLButtonElement > ) => {
7590 setIconPopoverAnchorEl ( e . currentTarget ) ;
7691 } ,
@@ -96,32 +111,34 @@ function MorePageActions({ view, onClose }: {
96111 viewId = { view . view_id }
97112 movePopoverOrigins = { popoverProps }
98113 />
99- < Divider className = { 'w-full' } />
114+ < Divider className = { 'w-full' } />
100115 < Button
101116 size = { 'small' }
102117
103118 className = { 'px-3 py-1 justify-start' }
104119 color = { 'inherit' }
105120 onClick = { ( ) => {
106- if ( ! currentWorkspaceId ) return ;
121+ if ( ! currentWorkspaceId ) return ;
107122 onClose ?.( ) ;
108123 window . open ( `/app/${ currentWorkspaceId } /${ view . view_id } ` , '_blank' ) ;
109124
110125 } }
111- startIcon = { < OpenInBrowserIcon className = { 'w-4 h-4' } /> }
126+ startIcon = { < OpenInBrowserIcon className = { 'w-4 h-4' } /> }
112127 >
113128 { t ( 'disclosureAction.openNewTab' ) }
114129 </ Button >
115130 < Suspense fallback = { null } >
116131 < ChangeIconPopover
117- iconEnabled = { false }
132+ iconEnabled
118133 defaultType = { 'emoji' }
119134 open = { openIconPopover }
120135 anchorEl = { iconPopoverAnchorEl }
121136 onClose = { ( ) => {
122137 onClose ?.( ) ;
123138 setIconPopoverAnchorEl ( null ) ;
124139 } }
140+ onUploadFile = { onUploadFile }
141+ uploadEnabled
125142 popoverProps = { popoverProps }
126143 onSelectIcon = { handleChangeIcon }
127144 removeIcon = { handleRemoveIcon }
0 commit comments