From 89a72c9fbcc9cf1fea665675980c95201adb7971 Mon Sep 17 00:00:00 2001 From: xeovalyte Date: Tue, 18 Jun 2024 13:57:58 +0200 Subject: [PATCH] Added toast notifications --- application/Cargo.toml | 4 +++- application/src/app.rs | 25 ++++++++++++++--------- application/src/components/participant.rs | 16 +++++++++++++++ application/src/pages/add_participant.rs | 18 +++++++++++++++- application/src/pages/add_time.rs | 16 +++++++++++++++ 5 files changed, 67 insertions(+), 12 deletions(-) diff --git a/application/Cargo.toml b/application/Cargo.toml index a308637..3f4f1f5 100644 --- a/application/Cargo.toml +++ b/application/Cargo.toml @@ -30,9 +30,10 @@ uuid = "1.8.0" leptos-use = "0.10.6" strsim = "0.11.1" web-sys = { version = "0.3.69", features = ["Document", "Window", "Element", "ScrollIntoViewOptions", "ScrollLogicalPosition", "ScrollBehavior" ] } +leptos_toaster = { version = "0.1.7", optional = true, features = [ "builtin_toast" ] } [features] -hydrate = ["leptos/hydrate", "leptos_meta/hydrate", "leptos_router/hydrate"] +hydrate = ["leptos/hydrate", "leptos_meta/hydrate", "leptos_router/hydrate", "leptos_toaster/hydrate"] ssr = [ "dep:surrealdb", "dep:axum", @@ -45,6 +46,7 @@ ssr = [ "leptos_meta/ssr", "leptos_router/ssr", "dep:tracing", + "leptos_toaster/ssr" ] # Defines a size-optimized profile for the WASM bundle in release mode diff --git a/application/src/app.rs b/application/src/app.rs index 71677c9..17a8bb3 100644 --- a/application/src/app.rs +++ b/application/src/app.rs @@ -7,6 +7,7 @@ use leptos_router::*; use crate::components; use crate::pages; use crate::util; +use leptos_toaster::{Toaster, ToasterPosition}; #[component] pub fn App() -> impl IntoView { @@ -38,16 +39,20 @@ pub fn App() -> impl IntoView { } .into_view() }> - - -
- - - - - - -
+ + + +
+ + + + + + +
+
} } diff --git a/application/src/components/participant.rs b/application/src/components/participant.rs index ef0331c..7e9a685 100644 --- a/application/src/components/participant.rs +++ b/application/src/components/participant.rs @@ -1,5 +1,6 @@ use crate::util::surrealdb::{client::Time, schemas}; use leptos::*; +use leptos_toaster::{Toast, ToastId, ToastVariant, Toasts}; cfg_if::cfg_if! { if #[cfg(feature = "ssr")] { @@ -53,6 +54,7 @@ async fn modify_participant( pub fn Modal() -> impl IntoView { let participant_id = use_context::>>().unwrap(); let participants = use_context::().unwrap(); + let toasts_context = expect_context::(); let time_lifesaver = create_rw_signal(Time { minutes: 0, @@ -131,6 +133,20 @@ pub fn Modal() -> impl IntoView { modify_participant_action.dispatch((p, participant().unwrap().get().id)); + let toast_id = ToastId::new(); + + toasts_context.toast( + view! { + + }, + Some(toast_id), + None, + ); + participant_id.set(None); }; diff --git a/application/src/pages/add_participant.rs b/application/src/pages/add_participant.rs index c5ba5e5..dada62e 100644 --- a/application/src/pages/add_participant.rs +++ b/application/src/pages/add_participant.rs @@ -1,5 +1,5 @@ use leptos::*; -use leptos_router::ActionForm; +use leptos_toaster::{Toast, ToastId, ToastVariant, Toasts}; cfg_if::cfg_if! { if #[cfg(feature = "ssr")] { @@ -49,6 +49,8 @@ async fn add_participant(name: String, group: String) -> Result<(), ServerFnErro /// Renders the home page of your application. #[component] pub fn AddParticipant() -> impl IntoView { + let toasts_context = expect_context::(); + let name = create_rw_signal("".to_string()); let group = create_rw_signal("A1".to_string()); @@ -65,6 +67,20 @@ pub fn AddParticipant() -> impl IntoView { form_submit_action.dispatch((name.get(), group.get())); + let toast_id = ToastId::new(); + + toasts_context.toast( + view! { + + }, + Some(toast_id), + None, + ); + name.set("".to_string()); let _ = name_input_ref.get().unwrap().focus(); }; diff --git a/application/src/pages/add_time.rs b/application/src/pages/add_time.rs index d0aa737..f156e24 100644 --- a/application/src/pages/add_time.rs +++ b/application/src/pages/add_time.rs @@ -1,5 +1,6 @@ use crate::util::surrealdb::{client::sort_participants, client::Time, schemas}; use leptos::{ev::keydown, *}; +use leptos_toaster::{Toast, ToastId, ToastVariant, Toasts}; use leptos_use::*; use web_sys::ScrollIntoViewOptions; @@ -56,6 +57,7 @@ async fn add_time( #[component] pub fn AddTime() -> impl IntoView { let participants = use_context::().unwrap(); + let toasts_context = expect_context::(); let container_ref: NodeRef = create_node_ref(); let name_input_ref: NodeRef = create_node_ref(); @@ -87,6 +89,20 @@ pub fn AddTime() -> impl IntoView { time.get().as_milliseconds(), )); + let toast_id = ToastId::new(); + + toasts_context.toast( + view! { + + }, + Some(toast_id), + None, + ); + name.set("".to_string()); time.set(Time { minutes: 0,