import { useCallback, useRef, useState } from 'react'; import { FeedbackContainer, VoteButton, VoteButtonsContainer, Toggle, FeedbackMobileContainer, ThankYouContainer } from './styles'; import { useEffect } from 'react'; import { trackFeedbackSubmission } from '../../utils/track'; enum FeedbackState { START = 'START', END = 'END', HIDDEN = 'HIDDEN' } type Feedback = { vote: boolean; page_path: string; id?: string; comment?: string; }; export default function Feedback() { const [state, setState] = useState(FeedbackState.START); const feedbackQuestion = 'Was this page helpful?'; const feedbackAppreciation = 'Thank you for your feedback!'; const onYesVote = useCallback(() => { setState(FeedbackState.END); trackFeedbackSubmission(true); }, []); const onNoVote = useCallback(() => { setState(FeedbackState.END); trackFeedbackSubmission(false); }, []); return ( {state == FeedbackState.START ? ( <>

{feedbackQuestion}

Thumbs up Yes Thumbs down No ) : (

{feedbackAppreciation}

)}
); } export function FeedbackToggle() { const [inView, setInView] = useState(false); const feedbackContainer = useRef(null); function toggleView() { if (inView) { setInView(false); } else { setInView(true); } } function handleClickOutside(e) { if ( feedbackContainer.current && feedbackContainer.current.contains(e.target) ) { // inside click return; } // outside click setInView(false); } useEffect(() => { if (inView) { document.addEventListener('mousedown', handleClickOutside); } else { document.removeEventListener('mousedown', handleClickOutside); } return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [inView]); return (
{ toggleView(); }} > Thumbs up Thumbs down
); }