Compware/src/app.rs

39 lines
1.2 KiB
Rust
Raw Normal View History

2024-12-06 14:45:14 +03:00
use leptos::*;
2024-12-10 18:35:39 +03:00
use leptos_meta::*;
2024-12-20 02:56:42 +03:00
use crate::components::items_list::ItemsList;
use crate::models::item::Item;
2024-12-10 22:28:38 +03:00
use crate::nostr::NostrClient;
use tokio::sync::mpsc;
2024-12-10 22:28:38 +03:00
use leptos::spawn_local;
use nostr_sdk::serde_json;
2024-12-06 14:45:14 +03:00
#[component]
pub fn App() -> impl IntoView {
2024-12-10 18:35:39 +03:00
provide_meta_context();
// Signal to manage the list of items
let (items_signal, set_items) = create_signal(Vec::<Item>::new());
let (tx, mut rx) = mpsc::channel::<String>(100);
2024-12-10 22:28:38 +03:00
// Nostr client subscription for items
2024-12-10 22:28:38 +03:00
spawn_local(async move {
let nostr_client = NostrClient::new("wss://relay.example.com").await.unwrap();
2024-12-10 22:28:38 +03:00
nostr_client.subscribe_to_items(tx.clone()).await.unwrap();
while let Some(content) = rx.recv().await {
2024-12-10 22:28:38 +03:00
if let Ok(item) = serde_json::from_str::<Item>(&content) {
set_items.update(|items| items.push(item));
}
}
});
2024-12-06 14:45:14 +03:00
view! {
<Stylesheet href="/assets/style.css" />
<Stylesheet href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" />
<div>
<h1>{ "CompareWare" }</h1>
<ItemsList items=items_signal set_items=set_items />
</div>
2024-12-06 14:45:14 +03:00
}
}