scripts/core/editor3/actions/spellchecker.tsx
import {IReplaceWordData} from '../reducers/spellchecker';
import {
getSpellcheckWarningsByBlock,
ISpellcheckWarningsByBlock,
} from '../components/spellchecker/SpellcheckerDecorator';
import {IEditorStore} from '../store';
import {getSpellchecker} from '../components/spellchecker/default-spellcheckers';
export function replaceWord(data: IReplaceWordData) {
return {
type: 'SPELLCHECKER_REPLACE_WORD',
payload: data,
};
}
export function setSpellcheckerStatus(enabled: boolean): any {
if (enabled) {
return reloadSpellcheckerWarnings();
} else {
return disableSpellchecker();
}
}
export function reloadSpellcheckerWarnings() {
return function(dispatch, getState) {
const state: IEditorStore = getState();
const spellchecker = getSpellchecker(state.spellchecking.language);
if (spellchecker == null) {
return;
}
getSpellcheckWarningsByBlock(spellchecker, getState().editorState).then((spellcheckWarningsByBlock) => {
dispatch(applySpellcheck(spellcheckWarningsByBlock));
});
};
}
/** *
* passing language as parameter so that spellchecker runs with currently updated language
* When we perform undo operation and language gets chnaged state is not updated
* at time when spellchecker actions are dispatched
*/
export function setSpellcheckerLanguage(language: string) {
return {
type: 'SET_SPELLCHEKCER_LANGUAGE',
payload: language,
};
}
export function disableSpellchecker() {
return {
type: 'DISABLE_SPELLCHECKER',
};
}
export function applySpellcheck(spellcheckWarningsByBlock: ISpellcheckWarningsByBlock) {
return {
type: 'APPLY_SPELLCHECK',
payload: spellcheckWarningsByBlock,
};
}
export function setSpellcheckerProgress(inProgress: boolean) {
return {
type: 'SET_SPELLCHEKCER_PROGRESS',
payload: inProgress,
};
}