diff --git a/apps/desktop/src/api/spell-checker.ts b/apps/desktop/src/api/spell-checker.ts
index 00b9355c6..54e79c291 100644
--- a/apps/desktop/src/api/spell-checker.ts
+++ b/apps/desktop/src/api/spell-checker.ts
@@ -118,5 +118,13 @@ export const spellCheckerRouter = t.router({
.mutation(({ input: { enabled } }) => {
globalThis.window?.webContents.session.setSpellCheckerEnabled(enabled);
config.isSpellCheckerEnabled = enabled;
- })
+ }),
+ words: t.procedure.query(() =>
+ globalThis.window?.webContents.session.listWordsInSpellCheckerDictionary()
+ ),
+ deleteWord: t.procedure.input(z.string()).mutation(({ input: word }) => {
+ globalThis.window?.webContents.session.removeWordFromSpellCheckerDictionary(
+ word
+ );
+ })
});
diff --git a/apps/web/src/dialogs/settings/components/dictionary-words.tsx b/apps/web/src/dialogs/settings/components/dictionary-words.tsx
new file mode 100644
index 000000000..60dacd1d0
--- /dev/null
+++ b/apps/web/src/dialogs/settings/components/dictionary-words.tsx
@@ -0,0 +1,53 @@
+/*
+This file is part of the Notesnook project (https://notesnook.com/)
+
+Copyright (C) 2023 Streetwriters (Private) Limited
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+import { Button, Text } from "@theme-ui/components";
+import { FlexScrollContainer } from "../../../components/scroll-container";
+import { useSpellChecker } from "../../../hooks/use-spell-checker";
+
+export function DictionaryWords() {
+ const words = useSpellChecker((store) => store.words);
+ const deleteWord = useSpellChecker((store) => store.deleteWord);
+
+ return (
+ <>
+
+
+ You have {words.length} custom dictionary words.
+
+ {words.map((word) => (
+
+ ))}
+
+ >
+ );
+}
diff --git a/apps/web/src/dialogs/settings/editor-settings.ts b/apps/web/src/dialogs/settings/editor-settings.ts
index efc9d9632..a77bac3a7 100644
--- a/apps/web/src/dialogs/settings/editor-settings.ts
+++ b/apps/web/src/dialogs/settings/editor-settings.ts
@@ -29,6 +29,7 @@ import { useSpellChecker } from "../../hooks/use-spell-checker";
import { SpellCheckerLanguages } from "./components/spell-checker-languages";
import { CustomizeToolbar } from "./components/customize-toolbar";
+import { DictionaryWords } from "./components/dictionary-words";
export const EditorSettings: SettingsGroup[] = [
{
@@ -149,6 +150,16 @@ symbols (e.g. 202305261253)`,
component: SpellCheckerLanguages
}
]
+ },
+ {
+ key: "custom-dictionay-words",
+ title: "Custom dictionary words",
+ components: [
+ {
+ type: "custom",
+ component: DictionaryWords
+ }
+ ]
}
]
},
diff --git a/apps/web/src/hooks/use-spell-checker.ts b/apps/web/src/hooks/use-spell-checker.ts
index 5c2a0744d..bc4868a14 100644
--- a/apps/web/src/hooks/use-spell-checker.ts
+++ b/apps/web/src/hooks/use-spell-checker.ts
@@ -27,6 +27,7 @@ class SpellCheckerStore extends BaseStore {
languages: Language[] = [];
enabled = true;
enabledLanguages: Language[] = [];
+ words: string[] = [];
toggleSpellChecker = async () => {
const enabled = this.get().enabled;
@@ -44,14 +45,19 @@ class SpellCheckerStore extends BaseStore {
};
refresh = async () => {
- console.log("SPELL CHECK", await desktop?.spellChecker.isEnabled.query());
this.set({
enabledLanguages:
(await desktop?.spellChecker.enabledLanguages.query()) || [],
languages: (await desktop?.spellChecker.languages.query()) || [],
- enabled: await desktop?.spellChecker.isEnabled.query()
+ enabled: await desktop?.spellChecker.isEnabled.query(),
+ words: (await desktop?.spellChecker.words.query()) || []
});
};
+
+ deleteWord = async (word: string) => {
+ await desktop?.spellChecker.deleteWord.mutate(word);
+ await this.get().refresh();
+ };
}
const [useSpellChecker] = createStore(SpellCheckerStore);