import { useState, useRef } from 'react' import { ThumbsdownIcon, ThumbsupIcon } from '@primer/octicons-react' import { useTranslation } from 'components/hooks/useTranslation' import { Link } from 'components/Link' import { sendEvent } from '../javascripts/events' enum ViewState { START = 'START', YES = 'YES', NO = 'NO', END = 'END', } export const Survey = () => { const { t } = useTranslation('survey') const [state, setState] = useState(ViewState.START) const formRef = useRef(null) function vote(state: ViewState) { return () => { trackEvent(getFormData()) setState(state) } } function submit(evt: React.FormEvent) { evt.preventDefault() trackEvent(getFormData()) setState(ViewState.END) } function getFormData() { if (!formRef.current) return return new FormData(formRef.current) } return (

{t`able_to_find`} {t`privacy_policy`}

{/* Honeypot: token isn't a real field */} {state !== ViewState.END && (

)} {[ViewState.YES, ViewState.NO].includes(state) && ( <>

{state === ViewState.YES && t`yes_feedback`} {state === ViewState.NO && t`no_feedback`}

{t`not_support`}

)} {state === ViewState.END &&

{t`feedback`}

}
) } function trackEvent(formData: FormData | undefined) { if (!formData) return // Nota bene: convert empty strings to undefined return sendEvent({ type: 'survey', survey_token: formData.get('survey-token') || undefined, // Honeypot survey_vote: formData.get('survey-vote') === 'Y', survey_comment: formData.get('survey-comment') || undefined, survey_email: formData.get('survey-email') || undefined, }) }