@@ -22,7 +22,15 @@ const ChatInputFormattingToolbar = ({
2222 inputRef,
2323 triggerButton,
2424 optionConfig = {
25- surfaceItems : [ 'emoji' , 'formatter' , 'link' , 'audio' , 'video' , 'file' ] ,
25+ surfaceItems : [
26+ 'emoji' ,
27+ 'formatter' ,
28+ 'link' ,
29+ 'audio' ,
30+ 'video' ,
31+ 'file' ,
32+ 'preview' ,
33+ ] ,
2634 formatters : [ 'bold' , 'italic' , 'strike' , 'code' , 'multiline' ] ,
2735 smallScreenSurfaceItems : [ 'emoji' , 'video' , 'audio' , 'file' ] ,
2836 popOverItems : [ 'formatter' , 'link' ] ,
@@ -46,6 +54,12 @@ const ChatInputFormattingToolbar = ({
4654 ( state ) => state . isRecordingMessage
4755 ) ;
4856
57+ const addPreviewMessage = useMessageStore ( ( state ) => state . addPreviewMessage ) ;
58+ const previewMessage = useMessageStore ( ( state ) => state . previewMessage ) ;
59+ const removePreviewMessage = useMessageStore (
60+ ( state ) => state . removePreviewMessage
61+ ) ;
62+
4963 const [ isEmojiOpen , setEmojiOpen ] = useState ( false ) ;
5064 const [ isInsertLinkOpen , setInsertLinkOpen ] = useState ( false ) ;
5165 const [ isPopoverOpen , setPopoverOpen ] = useState ( false ) ;
@@ -144,7 +158,7 @@ const ChatInputFormattingToolbar = ({
144158 } }
145159 >
146160 < Icon name = "attachment" size = "1rem" />
147- < span > file </ span >
161+ < span > File </ span >
148162 </ Box >
149163 ) : (
150164 < Tooltip text = "Upload File" position = "top" key = "file" >
@@ -173,7 +187,7 @@ const ChatInputFormattingToolbar = ({
173187 } }
174188 >
175189 < Icon name = "link" size = "1rem" />
176- < span > link </ span >
190+ < span > Link </ span >
177191 </ Box >
178192 ) : (
179193 < Tooltip text = "Link" position = "top" key = "link" >
@@ -190,6 +204,41 @@ const ChatInputFormattingToolbar = ({
190204 </ ActionButton >
191205 </ Tooltip >
192206 ) ,
207+ preview :
208+ isPopoverOpen && popOverItems . includes ( 'preview' ) ? (
209+ < Box
210+ key = "preview"
211+ css = { styles . popOverItemStyles }
212+ disabled = { isRecordingMessage || ! messageRef . current ?. value }
213+ onClick = { ( ) => {
214+ if ( isRecordingMessage || ! messageRef . current ?. value ) return ;
215+ if ( previewMessage ) {
216+ removePreviewMessage ( previewMessage [ 0 ] ) ;
217+ }
218+ addPreviewMessage ( messageRef . current . value ) ;
219+ } }
220+ >
221+ < Icon name = "eyeopen" size = "1rem" />
222+ < span > Preview</ span >
223+ </ Box >
224+ ) : (
225+ < Tooltip text = "Preview" position = "top" key = "preview" >
226+ < ActionButton
227+ square
228+ ghost
229+ disabled = { isRecordingMessage || ! messageRef . current ?. value }
230+ onClick = { ( ) => {
231+ if ( isRecordingMessage || ! messageRef . current ?. value ) return ;
232+ if ( previewMessage ) {
233+ removePreviewMessage ( previewMessage [ 0 ] ) ;
234+ }
235+ addPreviewMessage ( messageRef . current . value ) ;
236+ } }
237+ >
238+ < Icon name = "eyeopen" size = "1.25rem" />
239+ </ ActionButton >
240+ </ Tooltip >
241+ ) ,
193242 formatter : formatters
194243 . map ( ( name ) => formatter . find ( ( item ) => item . name === name ) )
195244 . map ( ( item ) =>
0 commit comments