import { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' import useAsync from '../../../shared/hooks/use-async' import { postJSON } from '../../../infrastructure/fetch-json' import { debugConsole } from '@/utils/debugging' import { OLModalBody, OLModalFooter, OLModalHeader, OLModalTitle, } from '@/features/ui/components/ol/ol-modal' import OLTooltip from '@/features/ui/components/ol/ol-tooltip' import OLNotification from '@/features/ui/components/ol/ol-notification' import OLButton from '@/features/ui/components/ol/ol-button' import OLIconButton from '@/features/ui/components/ol/ol-icon-button' import { learnedWords as initialLearnedWords } from '@/features/source-editor/extensions/spelling/learned-words' type DictionaryModalContentProps = { handleHide: () => void } const wordsSortFunction = (a: string, b: string) => a.localeCompare(b) export default function DictionaryModalContent({ handleHide, }: DictionaryModalContentProps) { const { t } = useTranslation() const [learnedWords, setLearnedWords] = useState>( initialLearnedWords.global ) const { isError, runAsync } = useAsync() const handleRemove = useCallback( word => { runAsync(postJSON('/spelling/unlearn', { body: { word } })) .then(() => { setLearnedWords(prevLearnedWords => { const learnedWords = new Set(prevLearnedWords) learnedWords.delete(word) return learnedWords }) window.dispatchEvent( new CustomEvent('editor:remove-learned-word', { detail: word }) ) }) .catch(debugConsole.error) }, [runAsync] ) return ( <> {t('edit_dictionary')} {isError ? ( ) : null} {learnedWords.size > 0 ? (
    {[...learnedWords].sort(wordsSortFunction).map(learnedWord => (
  • {learnedWord} handleRemove(learnedWord)} icon="delete" accessibilityLabel={t('edit_dictionary_remove')} />
  • ))}
) : (

{t('edit_dictionary_empty')}

)}
{t('close')} ) }