Skip to content

Commit

Permalink
feat: add remove grammar button
Browse files Browse the repository at this point in the history
  • Loading branch information
almahdi404 committed Sep 8, 2024
1 parent de8a759 commit 5318450
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 31 deletions.
5 changes: 5 additions & 0 deletions .changeset/cold-months-wash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"treeground": minor
---

feat: add remove grammar button
13 changes: 7 additions & 6 deletions src/components/Editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@ const Editor: Component<Props> = (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],
Expand Down
72 changes: 52 additions & 20 deletions src/components/Nav.tsx
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -89,6 +107,7 @@ const Nav: Component<{
grmrs[grmrIndex].highlighter = value;
props.setGrammars((prev) => [...prev]);
props.setSelectedHighlighter(value);
props.parseOnNewEditor();
}
}
};
Expand All @@ -103,6 +122,28 @@ const Nav: Component<{
>
<AiOutlinePlus />
</button>
<Show when={ctx.modal() === "Add"}>
<div class="fixed inset-0 bg-black/50 flex items-center justify-center z-50">
<div class="bg-white rounded-lg w-full max-w-md">
<div class="flex justify-end p-2 border-b border-gray-300">
<AiFillCloseCircle
size={28}
class="text-gray-500 hover:text-blue-500 active:scale-110 transition-all cursor-pointer"
onclick={() => ctx.setModal(null)}
/>
</div>
<form class="flex gap-2 p-2 my-2" onSubmit={(e) => addGrammar(e)}>
<input
class="p-2 border border-gray-300 rounded w-full"
placeholder="grammar folder"
value={inputGrammar()}
onChange={(e) => setInputGrammar(e.target.value)}
/>
</form>
</div>
</div>
</Show>
<div class="w-[1px] self-stretch bg-gray-300 rounded-l"></div>
<Show when={props.grammars().length}>
<select
class="border border-gray-300 rounded"
Expand Down Expand Up @@ -139,26 +180,17 @@ const Nav: Component<{
))}
</select>
</Show>
<Show when={ctx.modal() === "Add"}>
<div class="fixed inset-0 bg-black/50 flex items-center justify-center z-50">
<div class="bg-white rounded-lg w-full max-w-md">
<div class="flex justify-end p-2 border-b border-gray-300">
<AiFillCloseCircle
size={28}
class="text-gray-500 hover:text-blue-500 active:scale-110 transition-all cursor-pointer"
onclick={() => ctx.setModal(null)}
/>
</div>
<form class="flex gap-2 p-2 my-2" onSubmit={(e) => addGrammar(e)}>
<input
class="p-2 border border-gray-300 rounded w-full"
placeholder="grammar folder"
value={inputGrammar()}
onChange={(e) => setInputGrammar(e.target.value)}
/>
</form>
</div>
</div>
<Show when={props.selectedGrammar()}>
<button
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-2 rounded"
title="Remove grammar"
onClick={removeGrammar}
>
<IoTrash />
</button>
</Show>
<Show when={props.grammars().length}>
<div class="w-[1px] self-stretch bg-gray-300 rounded-l"></div>
</Show>
<button
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-2 rounded"
Expand Down
9 changes: 4 additions & 5 deletions src/components/TreeGround.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,8 @@ function App() {
};

createEffect(() => {
const selectedGrmr = selectedGrammar();
if (selectedGrmr) {
localStorage.setItem("treeground.selectedGrammar", selectedGrmr);
parseOnNewEditor();
}
localStorage.setItem("treeground.selectedGrammar", selectedGrammar() || "");
parseOnNewEditor();
});

createEffect(() => {
Expand All @@ -140,6 +137,8 @@ function App() {
const e = editor();
if (e) {
parse(e.getValue());
} else {
setTree(null);
}
});
track(() => editor());
Expand Down
4 changes: 4 additions & 0 deletions src/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ type ClientMessage =
type: "add";
folder: string;
}
| {
type: "remove";
folder: string;
}
| {
type: "watch";
folders: string[];
Expand Down
5 changes: 5 additions & 0 deletions src/websocket.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,11 @@ export default partyHandler({
watcher.add(folder);
}
}
} else if (msg.type === "remove") {
if (grammars.includes(msg.folder)) {
grammars = grammars.filter((grammar) => grammar !== msg.folder);
watcher.unwatch(msg.folder);
}
}
},
});
Expand Down

0 comments on commit 5318450

Please sign in to comment.