@@ -139,7 +139,6 @@ export default function MessageContent(props: MessageContentProps): ReactElement
139139 const [ mouseHover , setMouseHover ] = useState ( false ) ;
140140 const [ supposedHover , setSupposedHover ] = useState ( false ) ;
141141 // Feedback states
142- const [ selectedFeedback , setSelectedFeedback ] = useState < FeedbackRating > ( null ) ;
143142 const [ showFeedbackOptionsMenu , setShowFeedbackOptionsMenu ] = useState ( false ) ;
144143 const [ showFeedbackModal , setShowFeedbackModal ] = useState ( false ) ;
145144 const [ feedbackFailedText , setFeedbackFailedText ] = useState ( '' ) ;
@@ -171,10 +170,17 @@ export default function MessageContent(props: MessageContentProps): ReactElement
171170 const feedbackMessageClassName = isFeedbackEnabled ? 'sendbird-message-content__feedback' : '' ;
172171
173172 const onCloseFeedbackForm = ( ) => {
174- setSelectedFeedback ( null ) ;
175173 setShowFeedbackModal ( false ) ;
176174 } ;
177175
176+ const openFeedbackFormOrMenu = ( ) => {
177+ if ( isMobile ) {
178+ setShowFeedbackOptionsMenu ( true ) ;
179+ } else {
180+ setShowFeedbackModal ( true ) ;
181+ }
182+ } ;
183+
178184 // onMouseDown: (e: React.MouseEvent<T>) => void;
179185 // onTouchStart: (e: React.TouchEvent<T>) => void;
180186 // onMouseUp: (e: React.MouseEvent<T>) => void;
@@ -339,12 +345,19 @@ export default function MessageContent(props: MessageContentProps): ReactElement
339345 >
340346 < FeedbackIconButton
341347 isSelected = { message ?. myFeedback ?. rating === FeedbackRating . GOOD }
342- onClick = { ( ) => {
343- setSelectedFeedback ( FeedbackRating . GOOD ) ;
344- if ( isMobile && message ?. myFeedback ?. rating === FeedbackRating . GOOD ) {
345- setShowFeedbackOptionsMenu ( true ) ;
348+ onClick = { async ( ) => {
349+ if ( ! message ?. myFeedback ?. rating ) {
350+ try {
351+ await message . submitFeedback ( {
352+ rating : FeedbackRating . GOOD ,
353+ } ) ;
354+ openFeedbackFormOrMenu ( ) ;
355+ } catch ( error ) {
356+ config ?. logger ?. error ?.( 'Channel: Submit feedback failed.' , error ) ;
357+ setFeedbackFailedText ( stringSet . FEEDBACK_FAILED_SUBMIT ) ;
358+ }
346359 } else {
347- setShowFeedbackModal ( true ) ;
360+ openFeedbackFormOrMenu ( ) ;
348361 }
349362 } }
350363 disabled = { message ?. myFeedback && message . myFeedback . rating !== FeedbackRating . GOOD }
@@ -357,12 +370,19 @@ export default function MessageContent(props: MessageContentProps): ReactElement
357370 </ FeedbackIconButton >
358371 < FeedbackIconButton
359372 isSelected = { message ?. myFeedback ?. rating === FeedbackRating . BAD }
360- onClick = { ( ) => {
361- setSelectedFeedback ( FeedbackRating . BAD ) ;
362- if ( isMobile && message ?. myFeedback ?. rating === FeedbackRating . BAD ) {
363- setShowFeedbackOptionsMenu ( true ) ;
373+ onClick = { async ( ) => {
374+ if ( ! message ?. myFeedback ?. rating ) {
375+ try {
376+ await message . submitFeedback ( {
377+ rating : FeedbackRating . BAD ,
378+ } ) ;
379+ openFeedbackFormOrMenu ( ) ;
380+ } catch ( error ) {
381+ config ?. logger ?. error ?.( 'Channel: Submit feedback failed.' , error ) ;
382+ setFeedbackFailedText ( stringSet . FEEDBACK_FAILED_SUBMIT ) ;
383+ }
364384 } else {
365- setShowFeedbackModal ( true ) ;
385+ openFeedbackFormOrMenu ( ) ;
366386 }
367387 } }
368388 disabled = { message ?. myFeedback && message . myFeedback . rating !== FeedbackRating . BAD }
@@ -465,7 +485,7 @@ export default function MessageContent(props: MessageContentProps): ReactElement
465485 )
466486 }
467487 {
468- showFeedbackOptionsMenu && (
488+ message ?. myFeedback ?. rating && showFeedbackOptionsMenu && (
469489 < MobileFeedbackMenu
470490 hideMenu = { ( ) => {
471491 setShowFeedbackOptionsMenu ( false ) ;
@@ -475,32 +495,24 @@ export default function MessageContent(props: MessageContentProps): ReactElement
475495 setShowFeedbackModal ( true ) ;
476496 } }
477497 onRemoveFeedback = { async ( ) => {
478- await message . deleteFeedback ( message . myFeedback . id ) ;
479- setSelectedFeedback ( null ) ;
498+ try {
499+ await message . deleteFeedback ( message . myFeedback . id ) ;
500+ } catch ( error ) {
501+ config ?. logger ?. error ?.( 'Channel: Delete feedback failed.' , error ) ;
502+ setFeedbackFailedText ( stringSet . FEEDBACK_FAILED_DELETE ) ;
503+ }
480504 setShowFeedbackOptionsMenu ( false ) ;
481505 } }
482506 />
483507 )
484508 }
485509 { /* Feedback modal */ }
486510 {
487- showFeedbackModal && (
511+ message ?. myFeedback ?. rating && showFeedbackModal && (
488512 < MessageFeedbackModal
489- selectedFeedback = { selectedFeedback }
513+ selectedFeedback = { message . myFeedback . rating }
490514 message = { message }
491- onSubmit = { async ( comment : string ) => {
492- try {
493- await message . submitFeedback ( {
494- rating : selectedFeedback ,
495- comment,
496- } ) ;
497- } catch ( error ) {
498- config ?. logger ?. error ?.( 'Channel: Submit feedback failed.' , error ) ;
499- setFeedbackFailedText ( stringSet . FEEDBACK_FAILED_SUBMIT ) ;
500- }
501- onCloseFeedbackForm ( ) ;
502- } }
503- onUpdate = { async ( comment : string ) => {
515+ onUpdate = { async ( selectedFeedback : FeedbackRating , comment : string ) => {
504516 const newFeedback : Feedback = new Feedback ( {
505517 id : message . myFeedback . id ,
506518 rating : selectedFeedback ,
0 commit comments