From d523373b8e0060fde1ef3209f7ad3c2ba9caa851 Mon Sep 17 00:00:00 2001 From: Matthew Kaminski Date: Thu, 29 Aug 2024 21:23:39 -0400 Subject: [PATCH] WIP components --- src/capsules/login_form.rs | 16 +++------------- src/components/error_block.rs | 36 +++++++++++++++++++++++++++++++++++ src/components/mod.rs | 1 + 3 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 src/components/error_block.rs diff --git a/src/capsules/login_form.rs b/src/capsules/login_form.rs index 364b3cb..f3374b3 100644 --- a/src/capsules/login_form.rs +++ b/src/capsules/login_form.rs @@ -4,6 +4,8 @@ use serde::{Deserialize, Serialize}; use sycamore::prelude::*; use web_sys::Event; +use crate::components::error_block::{ErrorBlock, ErrorBlockProps}; + cfg_if::cfg_if! { if #[cfg(client)] { use crate::{ @@ -150,19 +152,7 @@ fn login_form_capsule( div (class="space-y-6 px-6 lg:px-8 pb-4 sm:pb-6 xl:pb-8") { h3 (class="text-xl font-medium text-gray-900 dark:text-white"){"Sign in"} - (match state.error.get().as_ref() != "" { - true => { view!{cx, - div (role="alert") { - div (class="bg-red-500 text-white font-bold rounded-t px-4 py-2") { - "Error" - } - div (class="border border-t-0 border-red-400 rounded-b bg-red-100 px-4 py-3 text-red-700"){ - p {(state.error.get())} - } - } - }}, - false => {view!{cx,}}, - }) + ErrorBlock(error = state.error.clone()) div { label (class="text-sm font-medium text-gray-900 block mb-2 dark:text-gray-300") {"Username"} diff --git a/src/components/error_block.rs b/src/components/error_block.rs new file mode 100644 index 0000000..6bbb765 --- /dev/null +++ b/src/components/error_block.rs @@ -0,0 +1,36 @@ +use perseus::prelude::*; +use sycamore::prelude::*; +use web_sys::Event; + +cfg_if::cfg_if! { + if #[cfg(client)] { + use crate::{ + state_enums::OpenState, + }; + } +} + +#[derive(Prop, Debug, Clone)] +pub struct ErrorBlockProps { + error: RcSignal, +} + +#[component] +pub fn ErrorBlock(cx: Scope, props: ErrorBlockProps) -> View { + let is_empty = create_selector(cx, || props.error.get().is_empty()); + view! { cx, + (match *is_empty.get() { + true => { view!{cx, + div (role="alert") { + div (class="bg-red-500 text-white font-bold rounded-t px-4 py-2") { + "Error" + } + div (class="border border-t-0 border-red-400 rounded-b bg-red-100 px-4 py-3 text-red-700"){ + p {(*props.error.get())} + } + } + }}, + false => {view!{cx,}}, + }) + } +} diff --git a/src/components/mod.rs b/src/components/mod.rs index f70771d..f106093 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -1,2 +1,3 @@ +pub mod error_block; mod header; pub mod layout;