diff --git a/.changeset/cold-months-wash.md b/.changeset/cold-months-wash.md new file mode 100644 index 0000000..fd58e9f --- /dev/null +++ b/.changeset/cold-months-wash.md @@ -0,0 +1,5 @@ +--- +"treeground": minor +--- + +feat: add remove grammar button diff --git a/src/components/Editor.tsx b/src/components/Editor.tsx index 15439a9..6ba1e94 100644 --- a/src/components/Editor.tsx +++ b/src/components/Editor.tsx @@ -22,13 +22,14 @@ const Editor: Component = (props) => { createEffect(() => { const selectedGrammar = props.selectedGrammar(); const selectedHighlighter = props.selectedHighlighter(); + untrack(() => { + let editor = props.editor(); + if (editor) { + editor.dispose(); + } + props.setEditor(null); + }); if (selectedGrammar) { - untrack(() => { - let editor = props.editor(); - if (editor) { - editor.dispose(); - } - }); createHighlighter({ themes: ["dark-plus"], langs: [selectedHighlighter], diff --git a/src/components/Nav.tsx b/src/components/Nav.tsx index 6121401..137d147 100644 --- a/src/components/Nav.tsx +++ b/src/components/Nav.tsx @@ -1,5 +1,6 @@ import { BundledLanguage, bundledLanguages } from "shiki"; import { AiFillCloseCircle, AiOutlinePlus } from "solid-icons/ai"; +import { IoTrash } from "solid-icons/io"; import { Accessor, Component, @@ -51,6 +52,23 @@ const Nav: Component<{ } }; + const removeGrammar = (e: Event) => { + e.preventDefault(); + const socket = props.ws(); + const selectedGrmr = props.selectedGrammar(); + if (socket && selectedGrmr) { + sendMsgToServer(socket, { + type: "remove", + folder: selectedGrmr, + }); + props.setGrammars((prev) => + prev.filter((grammar) => grammar.folder !== selectedGrmr), + ); + props.parseOnNewEditor(); + props.setSelectedGrammar(props.grammars().at(-1)?.folder); + } + }; + const findSelectedGrammar = () => { const selectedGrmr = props.selectedGrammar(); if (selectedGrmr) { @@ -89,6 +107,7 @@ const Nav: Component<{ grmrs[grmrIndex].highlighter = value; props.setGrammars((prev) => [...prev]); props.setSelectedHighlighter(value); + props.parseOnNewEditor(); } } }; @@ -103,6 +122,28 @@ const Nav: Component<{ > + +
+
+
+ ctx.setModal(null)} + /> +
+
addGrammar(e)}> + setInputGrammar(e.target.value)} + /> +
+
+
+
+
setInputGrammar(e.target.value)} - /> - - - + + + + +