import { useCallback, useEffect, useRef, useState } from 'react' import { Button } from 'react-bootstrap' import useScopeValue from '../../../shared/hooks/use-scope-value' import getMeta from '../../../utils/meta' import { hasSeenCM6SwitchAwaySurvey, setHasSeenCM6SwitchAwaySurvey, } from '../utils/switch-away-survey' import { sendMB } from '../../../infrastructure/event-tracking' type CM6SwitchAwaySurveyState = 'disabled' | 'enabled' | 'shown' export default function CM6SwitchAwaySurvey() { const [state, setState] = useState('disabled') const [newSourceEditor] = useScopeValue('editor.newSourceEditor') const [richText] = useScopeValue('editor.showRichText') const initialRichTextPreference = useRef(richText) useEffect(() => { // If cm6 is not available, don't show the survey if (!getMeta('ol-showNewSourceEditorOption')) { return } // If the user has previously seen any switch-away survey, then don't show // the current one if (hasSeenCM6SwitchAwaySurvey()) return if (initialRichTextPreference.current) { if (!richText && newSourceEditor) { // If user change from rich text to cm6, we remove the rich text // preference so if user use rich text -> cm6 -> ace, we will show the // current survey initialRichTextPreference.current = false } // If the user loaded rich text initially, then don't show the survey // (we are assuming that they will not have used CM6 as much) return } if (!newSourceEditor && !richText) { setState('enabled') } else { setState('disabled') } }, [newSourceEditor, richText]) useEffect(() => { const handleKeyDown = () => { const TIME_FOR_SURVEY_TO_APPEAR = 3000 setTimeout(() => { if (state === 'enabled') { setState('shown') setHasSeenCM6SwitchAwaySurvey() } }, TIME_FOR_SURVEY_TO_APPEAR) } // can't access the ace editor directly, so add the keydown event // to window window?.addEventListener('keydown', handleKeyDown, { once: true }) return () => window?.removeEventListener('keydown', handleKeyDown) }, [state]) const handleClose = useCallback(() => { setState('disabled') }, []) const handleFollowLink = useCallback(() => { sendMB('cm6-switch-away-survey') setState('disabled') }, []) if (state !== 'shown') { return null } return (
We noticed that you're still using the{' '} Source (legacy) editor.
Could you let us know why?
Take survey
) }