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,