smart-house-web: переход на leptos
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
members = [
|
members = [
|
||||||
"backend",
|
"backend",
|
||||||
"frontend",
|
"frontend",
|
||||||
|
"frontend-dioxus",
|
||||||
]
|
]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
|
|
||||||
|
|||||||
16
smart-house-web/frontend-dioxus/Cargo.toml
Normal file
16
smart-house-web/frontend-dioxus/Cargo.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[package]
|
||||||
|
name = "frontend-old"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
dioxus = { version = "0.7", features = ["fullstack", "router"] }
|
||||||
|
reqwest = { version = "0.13", features = ["json"] }
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["web"]
|
||||||
|
web = ["dioxus/web"]
|
||||||
|
desktop = ["dioxus/desktop"]
|
||||||
|
mobile = ["dioxus/mobile"]
|
||||||
|
server = ["dioxus/server"]
|
||||||
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
@@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports)]
|
||||||
|
|
||||||
mod favorites;
|
mod favorites;
|
||||||
mod nav;
|
mod nav;
|
||||||
mod view;
|
mod view;
|
||||||
76
smart-house-web/frontend-dioxus/src/main.rs
Normal file
76
smart-house-web/frontend-dioxus/src/main.rs
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
|
use crate::components::{Favorites, NavBar};
|
||||||
|
|
||||||
|
const FAVICON: Asset = asset!("/assets/favicon.ico");
|
||||||
|
const MAIN_CSS: Asset = asset!("/assets/main.css");
|
||||||
|
|
||||||
|
mod backend;
|
||||||
|
mod components;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
dioxus::launch(App);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
struct TitleState(String);
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
fn App() -> Element {
|
||||||
|
use_context_provider(|| TitleState("HotDog".to_string()));
|
||||||
|
rsx! {
|
||||||
|
document::Link { rel: "icon", href: FAVICON }
|
||||||
|
document::Stylesheet { href: MAIN_CSS }
|
||||||
|
Router::<Route> { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
fn Title() -> Element {
|
||||||
|
let title = use_context::<TitleState>();
|
||||||
|
rsx! {
|
||||||
|
div { id: "title",
|
||||||
|
h1 { "{title.0}! 🌭" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(serde::Deserialize)]
|
||||||
|
struct DogApi {
|
||||||
|
message: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
fn DogView() -> Element {
|
||||||
|
let mut img_src = use_resource(|| async move {
|
||||||
|
reqwest::get("https://dog.ceo/api/breeds/image/random")
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.json::<DogApi>()
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.message
|
||||||
|
});
|
||||||
|
|
||||||
|
rsx! {
|
||||||
|
div { id: "dogview",
|
||||||
|
img { src: img_src.cloned().unwrap_or_default() }
|
||||||
|
}
|
||||||
|
div { id: "buttons",
|
||||||
|
button { onclick: move |_| img_src.restart(), id: "skip", "skip" }
|
||||||
|
button { onclick: move |_| img_src.restart(), id: "save", "save!" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Routable, Clone, PartialEq)]
|
||||||
|
enum Route {
|
||||||
|
#[layout(NavBar)]
|
||||||
|
#[route("/")]
|
||||||
|
DogView,
|
||||||
|
|
||||||
|
#[route("/favorites")]
|
||||||
|
Favorites,
|
||||||
|
}
|
||||||
@@ -1,16 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "frontend"
|
name = "frontend"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus = { version = "0.7", features = ["fullstack", "router"] }
|
leptos = { version = "0.8.19", features = ["csr"] }
|
||||||
reqwest = { version = "0.13", features = ["json"] }
|
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["web"]
|
|
||||||
web = ["dioxus/web"]
|
|
||||||
desktop = ["dioxus/desktop"]
|
|
||||||
mobile = ["dioxus/mobile"]
|
|
||||||
server = ["dioxus/server"]
|
|
||||||
|
|||||||
5
smart-house-web/frontend/index.html
Normal file
5
smart-house-web/frontend/index.html
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head></head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
||||||
@@ -1,74 +1,5 @@
|
|||||||
use dioxus::prelude::*;
|
use leptos::prelude::*;
|
||||||
|
|
||||||
use crate::components::{Favorites, NavBar};
|
|
||||||
|
|
||||||
const FAVICON: Asset = asset!("/assets/favicon.ico");
|
|
||||||
const MAIN_CSS: Asset = asset!("/assets/main.css");
|
|
||||||
|
|
||||||
mod backend;
|
|
||||||
mod components;
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
dioxus::launch(App);
|
leptos::mount::mount_to_body(|| view! { <p>"Hello, world!"</p> })
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
struct TitleState(String);
|
|
||||||
|
|
||||||
#[component]
|
|
||||||
fn App() -> Element {
|
|
||||||
use_context_provider(|| TitleState("HotDog".to_string()));
|
|
||||||
rsx! {
|
|
||||||
document::Link { rel: "icon", href: FAVICON }
|
|
||||||
document::Stylesheet { href: MAIN_CSS }
|
|
||||||
Router::<Route> { }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[component]
|
|
||||||
fn Title() -> Element {
|
|
||||||
let title = use_context::<TitleState>();
|
|
||||||
rsx! {
|
|
||||||
div { id: "title",
|
|
||||||
h1 { "{title.0}! 🌭" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(serde::Deserialize)]
|
|
||||||
struct DogApi {
|
|
||||||
message: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[component]
|
|
||||||
fn DogView() -> Element {
|
|
||||||
let mut img_src = use_resource(|| async move {
|
|
||||||
reqwest::get("https://dog.ceo/api/breeds/image/random")
|
|
||||||
.await
|
|
||||||
.unwrap()
|
|
||||||
.json::<DogApi>()
|
|
||||||
.await
|
|
||||||
.unwrap()
|
|
||||||
.message
|
|
||||||
});
|
|
||||||
|
|
||||||
rsx! {
|
|
||||||
div { id: "dogview",
|
|
||||||
img { src: img_src.cloned().unwrap_or_default() }
|
|
||||||
}
|
|
||||||
div { id: "buttons",
|
|
||||||
button { onclick: move |_| img_src.restart(), id: "skip", "skip" }
|
|
||||||
button { onclick: move |_| img_src.restart(), id: "save", "save!" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Routable, Clone, PartialEq)]
|
|
||||||
enum Route {
|
|
||||||
#[layout(NavBar)]
|
|
||||||
#[route("/")]
|
|
||||||
DogView,
|
|
||||||
|
|
||||||
#[route("/favorites")]
|
|
||||||
Favorites,
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user