feat: sql migrations and daemon state endpoint

This commit is contained in:
2026-02-14 15:51:28 +02:00
parent 3ce2fa3841
commit 9920bfcdee
10 changed files with 276 additions and 219 deletions

View File

@@ -1,10 +1,15 @@
use crate::bridge::invoke;
use crate::popup::Popup;
use std::time::Duration;
use feshared::daemon::DaemonState;
use leptos::{prelude::*, reactive::spawn_local};
use leptos_router::{
components::{Route, Router, Routes},
path,
};
use wasm_bindgen::JsValue;
use crate::bridge::invoke;
use crate::popup::Popup;
#[component]
pub fn App() -> impl IntoView {
@@ -26,19 +31,37 @@ fn Dashboard() -> impl IntoView {
invoke("toggle_popup", empty_args).await;
});
};
let prompt = |_ev: leptos::ev::MouseEvent| {
spawn_local(async {
let prompt =
serde_wasm_bindgen::to_value(&serde_json::json!({"prompt": "jee juu juu"}))
.unwrap();
invoke("prompt_llm", prompt).await;
});
};
view! {
<main class="window-shell opaque-bg">
<h1>"AI Dashboard"</h1>
<button on:click=on_click>Test popup</button>
<button on:click=prompt>Prompt!</button>
<button on:click=on_click>Open chat</button>
<DaemonStatusIndicator />
</main>
}
}
#[component]
fn DaemonStatusIndicator() -> impl IntoView {
let (poll_count, set_pool_count) = signal(0);
set_interval(
move || set_pool_count.update(|v| *v += 1),
Duration::from_secs(1),
);
let status = LocalResource::new(move || async move {
poll_count.get();
let val = invoke("daemon_state", JsValue::NULL).await;
let s: DaemonState = serde_wasm_bindgen::from_value(val).unwrap();
s
});
view! {
<div>
{move || match status.get() {
Some(state) => match state.is_ok {
true => view! { <span>{"OK"}</span>},
false => view! { <span>{"DOWN"}</span>},
},
None => view! { <span>{ "Loading status" }</span> },
}}
</div>
}
}