Add filewatcher for config files (#63)

This adds the filewatcher and forwards events to the frontend. It also
sets up the widgets as something that can be controlled with a config
file.
This commit is contained in:
Sylvie Crowe
2024-06-19 23:59:41 -07:00
committed by GitHub
parent c7f76d5ced
commit 21fa9a601f
13 changed files with 369 additions and 31 deletions
+20 -30
View File
@@ -4,12 +4,16 @@
import { TabBar } from "@/app/tab/tabbar";
import { TabContent } from "@/app/tab/tabcontent";
import { atoms, createBlock } from "@/store/global";
import * as services from "@/store/services";
import * as jotai from "jotai";
import * as React from "react";
import { CenteredDiv } from "../element/quickelems";
import "./workspace.less";
function Widgets() {
const settingsConfig = jotai.useAtomValue(atoms.settingsConfigAtom);
const newWidgetModalVisible = React.useState(false);
async function clickTerminal() {
const termBlockDef = {
controller: "shell",
@@ -18,51 +22,37 @@ function Widgets() {
createBlock(termBlockDef);
}
async function clickPreview(fileName: string) {
const markdownDef = {
view: "preview",
meta: { file: fileName },
};
createBlock(markdownDef);
}
async function clickPlot() {
const plotDef: BlockDef = {
view: "plot",
};
createBlock(plotDef);
}
async function clickEdit() {
const editDef: BlockDef = {
view: "codeedit",
};
createBlock(editDef);
}
async function handleWidgetSelect(blockDef: BlockDef) {
createBlock(blockDef);
}
async function handleCreateWidget(newWidget: WidgetsConfigType) {
await services.FileService.AddWidget(newWidget);
}
async function handleRemoveWidget(idx: number) {
await services.FileService.RmWidget(idx);
}
return (
<div className="workspace-widgets">
<div className="widget" onClick={() => clickTerminal()}>
<i className="fa fa-solid fa-square-terminal fa-fw" />
</div>
<div className="widget" onClick={() => clickPreview("~/work/wails/thenextwave/README.md")}>
<i className="fa fa-solid fa-files fa-fw" />
</div>
<div className="widget" onClick={() => clickPreview("~/work/wails/thenextwave/go.mod")}>
<i className="fa fa-solid fa-files fa-fw" />
</div>
<div className="widget" onClick={() => clickPreview("~/work/wails/thenextwave/build/appicon.png")}>
<i className="fa fa-solid fa-files fa-fw" />
</div>
<div className="widget" onClick={() => clickPreview("~")}>
<i className="fa fa-solid fa-files fa-fw" />
</div>
<div className="widget" onClick={() => clickPlot()}>
<i className="fa fa-solid fa-chart-simple fa-fw" />
</div>
<div className="widget" onClick={() => clickEdit()}>
<i className="fa-sharp fa-solid fa-pen-to-square"></i>
</div>
{settingsConfig.widgets.map((data, idx) => (
<div className="widget" onClick={() => handleWidgetSelect(data.blockdef)} key={`widget-${idx}`}>
<i className={data.icon}></i>
</div>
))}
<div className="widget no-hover">
<i className="fa fa-solid fa-plus fa-fw" />
</div>