11import { hooks } from 'botframework-webchat-api' ;
22import classNames from 'classnames' ;
3- import React , { memo , useCallback , useEffect , useRef , useState } from 'react' ;
3+ import React , { memo , useCallback , useEffect , useRef , useState , type FormEventHandler } from 'react' ;
4+ import { useRefFrom } from 'use-ref-from' ;
45import useStyleSet from '../../hooks/useStyleSet' ;
56import testIds from '../../testIds' ;
67import TextArea from './FeedbackTextArea' ;
@@ -20,31 +21,30 @@ function FeedbackForm({ feedbackType, disclaimer, onReset, replyToId }: Feedback
2021 const [ userFeedback , setUserFeedback ] = useState ( '' ) ;
2122 const feedbackTextAreaRef = useRef < HTMLTextAreaElement > ( null ) ;
2223 const localize = useLocalizer ( ) ;
24+ const onResetRef = useRefFrom ( onReset ) ;
2325 const postActivity = usePostActivity ( ) ;
2426
2527 const handleReset = useCallback ( ( ) => {
2628 setUserFeedback ( '' ) ;
2729
28- onReset ( ) ;
30+ onResetRef . current ( ) ;
2931
3032 setHasFocused ( false ) ;
31- } , [ onReset , setHasFocused , setUserFeedback ] ) ;
33+ } , [ onResetRef , setHasFocused , setUserFeedback ] ) ;
3234
3335 const handleSubmit = useCallback (
3436 event => {
3537 event . preventDefault ( ) ;
3638
3739 postActivity ( {
38- type : 'invoke' ,
3940 name : 'message/submitAction' ,
4041 replyToId,
42+ type : 'invoke' ,
4143 value : {
4244 actionName : 'feedback' ,
4345 actionValue : {
44- reaction : feedbackType === 'LikeAction' ? 'like' : 'dislike' ,
45- feedback : {
46- feedbackText : userFeedback
47- }
46+ feedback : { feedbackText : userFeedback } ,
47+ reaction : feedbackType === 'LikeAction' ? 'like' : 'dislike'
4848 }
4949 }
5050 } as any ) ;
@@ -54,14 +54,15 @@ function FeedbackForm({ feedbackType, disclaimer, onReset, replyToId }: Feedback
5454 [ feedbackType , handleReset , postActivity , replyToId , userFeedback ]
5555 ) ;
5656
57- const handleChange : React . FormEventHandler < HTMLTextAreaElement > = useCallback (
58- event => {
59- setUserFeedback ( event . currentTarget . value ) ;
60- } ,
57+ const handleChange : FormEventHandler < HTMLTextAreaElement > = useCallback (
58+ event => setUserFeedback ( event . currentTarget . value ) ,
6159 [ setUserFeedback ]
6260 ) ;
6361
6462 useEffect ( ( ) => {
63+ // Will focus on the text area when:
64+ // 1. The component is mounted initially, or
65+ // 2. User clicked on the reset button
6566 if ( feedbackTextAreaRef . current && ! hasFocused ) {
6667 setHasFocused ( true ) ;
6768 feedbackTextAreaRef . current . focus ( ) ;
0 commit comments