ft/adds local storage functionality
This commit is contained in:
parent
b5968c6905
commit
566a95b5d7
@ -7,6 +7,9 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
web-sys = {version="0.3.69", features = ["HtmlInputElement"]}
|
web-sys = {version="0.3.69", features = ["HtmlInputElement"]}
|
||||||
yew = { git = "https://github.com/yewstack/yew/", features = ["csr"] }
|
yew = { version = "0.21.0", features = ["csr"] }
|
||||||
yew-router = { git = "https://github.com/yewstack/yew.git" }
|
yew-router = { version = "0.18.0"}
|
||||||
gloo-console = "0.3.0"
|
gloo-console = "0.3.0"
|
||||||
|
yewdux = "0.10.0"
|
||||||
|
serde = "1.0.198"
|
||||||
|
serde_json = "1.0.116"
|
||||||
|
1
dist/digitaler-frieden-795e1f8302791ee3.js
vendored
1
dist/digitaler-frieden-795e1f8302791ee3.js
vendored
File diff suppressed because one or more lines are too long
BIN
dist/digitaler-frieden-795e1f8302791ee3_bg.wasm
vendored
BIN
dist/digitaler-frieden-795e1f8302791ee3_bg.wasm
vendored
Binary file not shown.
1
dist/digitaler-frieden-eab7a54548d51de2.js
vendored
Normal file
1
dist/digitaler-frieden-eab7a54548d51de2.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
dist/digitaler-frieden-eab7a54548d51de2_bg.wasm
vendored
Normal file
BIN
dist/digitaler-frieden-eab7a54548d51de2_bg.wasm
vendored
Normal file
Binary file not shown.
2
dist/index.html
vendored
2
dist/index.html
vendored
@ -1 +1 @@
|
|||||||
<!doctype html><html lang=en><meta charset=UTF-8><meta content="width=device-width,initial-scale=1" name=viewport><title>Digitaler Frieden</title><link href=/styles-5591055ecd987932.css integrity=sha384-a1WEqxtAH6YUfKJ4yrHqkgiTWmHSE42XmyBtxbyCY/WaCq4Is/iVWx0Q1jgF3cVf rel=stylesheet><link href=/favicon-928ba63f33046eed.ico integrity=sha384-Neq57jnFrTfqAN1JvKAVVVcH1EW3//cZHmK2NRXRlNrxAZR6ErTvXzbOLSyHzkA4 rel=icon><link href=public/manifest.json rel=manifest><link as=fetch crossorigin href=/digitaler-frieden-795e1f8302791ee3_bg.wasm integrity=sha384-A3uAtAsxCCKmIP7Da07uuP8bTVVReLXUYbouhrjjMFqCkDOlNk6i6g6Wj+/vOXen rel=preload type=application/wasm><link crossorigin href=/digitaler-frieden-795e1f8302791ee3.js integrity=sha384-N4IsPzEVpnyqMI4scOD/c9Kl6gIagEOAbcIBYDcEKmdgixw7jwKdvjNI8/4mlz1v rel=modulepreload></head><body class="bg-black text-white"><script type=module>import a,*as b from"/digitaler-frieden-795e1f8302791ee3.js";a(`/digitaler-frieden-795e1f8302791ee3_bg.wasm`);window.wasmBindings=b</script></body></html>
|
<!doctype html><html lang=en><meta charset=UTF-8><meta content="width=device-width,initial-scale=1" name=viewport><title>Digitaler Frieden</title><link href=/styles-5591055ecd987932.css integrity=sha384-a1WEqxtAH6YUfKJ4yrHqkgiTWmHSE42XmyBtxbyCY/WaCq4Is/iVWx0Q1jgF3cVf rel=stylesheet><link href=/favicon-928ba63f33046eed.ico integrity=sha384-Neq57jnFrTfqAN1JvKAVVVcH1EW3//cZHmK2NRXRlNrxAZR6ErTvXzbOLSyHzkA4 rel=icon><link href=public/manifest.json rel=manifest><link as=fetch crossorigin href=/digitaler-frieden-eab7a54548d51de2_bg.wasm integrity=sha384-yIgdjjA54X2bCfznoV2thson0zMX/fylXo3m3P6SQUskENlvhwzInFeXgmspjxws rel=preload type=application/wasm><link crossorigin href=/digitaler-frieden-eab7a54548d51de2.js integrity=sha384-Cv8tsSgrMidET9utI0GS5mGbbYqFPiVDuqpIdmg3Xx2gn3M6iEcvr2b5TuuW93cS rel=modulepreload></head><body class="bg-black text-white"><script type=module>import a,*as b from"/digitaler-frieden-eab7a54548d51de2.js";a(`/digitaler-frieden-eab7a54548d51de2_bg.wasm`);window.wasmBindings=b</script></body></html>
|
@ -1,2 +1,3 @@
|
|||||||
pub mod pages;
|
pub mod pages;
|
||||||
pub mod router;
|
pub mod router;
|
||||||
|
pub mod storage;
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
use crate::router::Route;
|
use crate::{
|
||||||
|
router::Route,
|
||||||
|
storage::{self, UserData},
|
||||||
|
};
|
||||||
use web_sys::HtmlInputElement;
|
use web_sys::HtmlInputElement;
|
||||||
use yew::{classes, function_component, html, Html};
|
use yew::{classes, function_component, html, Html};
|
||||||
use yew_router::components::Link;
|
use yew_router::components::Link;
|
||||||
|
|
||||||
#[function_component]
|
#[function_component]
|
||||||
pub fn SignUp() -> Html {
|
pub fn SignUp() -> Html {
|
||||||
|
let (_, dispatch) = yewdux::use_store::<UserData>();
|
||||||
|
|
||||||
let register = yew::functional::use_state(|| true);
|
let register = yew::functional::use_state(|| true);
|
||||||
let reg = register.clone();
|
let reg = register.clone();
|
||||||
let reg_onchange = yew::Callback::from(move |_| {
|
let reg_onchange = yew::Callback::from(move |_| {
|
||||||
@ -26,10 +31,13 @@ pub fn SignUp() -> Html {
|
|||||||
let email: yew::NodeRef = yew::NodeRef::default();
|
let email: yew::NodeRef = yew::NodeRef::default();
|
||||||
let mail = email.clone();
|
let mail = email.clone();
|
||||||
let onchange = yew::Callback::from(move |_| {
|
let onchange = yew::Callback::from(move |_| {
|
||||||
|
let dispatch = dispatch.clone();
|
||||||
if let Some(m) = mail.cast::<HtmlInputElement>() {
|
if let Some(m) = mail.cast::<HtmlInputElement>() {
|
||||||
// TODO: Remove as soon as the Logic is implemented.
|
// TODO: Remove as soon as the Logic is implemented.
|
||||||
gloo_console::log!(format!("E-Mail: {}", m.value()));
|
gloo_console::log!(format!("E-Mail: {}", m.value()));
|
||||||
|
|
||||||
if !m.value().is_empty() {
|
if !m.value().is_empty() {
|
||||||
|
storage::set_email_address(dispatch, Some(m.value()));
|
||||||
mc.set(false);
|
mc.set(false);
|
||||||
} else {
|
} else {
|
||||||
mc.set(true);
|
mc.set(true);
|
||||||
|
@ -2,9 +2,14 @@ use yew::{classes, function_component, html, Html};
|
|||||||
use yew_router::components::Link;
|
use yew_router::components::Link;
|
||||||
|
|
||||||
use crate::router::Route;
|
use crate::router::Route;
|
||||||
|
use crate::storage;
|
||||||
|
|
||||||
#[function_component]
|
#[function_component]
|
||||||
pub fn Verify() -> Html {
|
pub fn Verify() -> Html {
|
||||||
|
let (state, _) = yewdux::use_store::<storage::UserData>();
|
||||||
|
let resend_onclick = yew::Callback::from(move |_| {
|
||||||
|
gloo_console::log!(format!("Resending E-Mail to '{:?}'", state.email_address()));
|
||||||
|
});
|
||||||
html! {
|
html! {
|
||||||
<div class="flex flex-col justify-center items-center h-full space-y-16 px-8 m-0">
|
<div class="flex flex-col justify-center items-center h-full space-y-16 px-8 m-0">
|
||||||
<section id="navigation" class="mb-2 md:mb-12 lg:mb-0">
|
<section id="navigation" class="mb-2 md:mb-12 lg:mb-0">
|
||||||
@ -107,7 +112,8 @@ pub fn Verify() -> Html {
|
|||||||
transition duration-150
|
transition duration-150
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<Link<Route> to={Route::SignUp}>{ "Erneut senden" }</Link<Route>>
|
<button onclick={resend_onclick}>{ "Erneut senden" }</button>
|
||||||
|
//<Link<Route> to={Route::SignUp}>{ "Erneut senden" }</Link<Route>>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
42
src/storage.rs
Normal file
42
src/storage.rs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use yewdux::Store;
|
||||||
|
|
||||||
|
#[derive(Debug, Default, Clone, PartialEq, Store, Serialize, Deserialize)]
|
||||||
|
#[store(storage = "local")]
|
||||||
|
pub struct UserData {
|
||||||
|
id: Option<String>,
|
||||||
|
email_address: Option<String>,
|
||||||
|
token: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl UserData {
|
||||||
|
pub fn email_address(&self) -> Option<String> {
|
||||||
|
self.email_address.clone()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn id(&self) -> Option<String> {
|
||||||
|
self.id.clone()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn token(&self) -> Option<String> {
|
||||||
|
self.token.clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_email_address(dispatch: yewdux::Dispatch<UserData>, email_address: Option<String>) {
|
||||||
|
dispatch.reduce_mut(move |store| {
|
||||||
|
store.email_address = email_address;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_token(dispatch: yewdux::Dispatch<UserData>, token: Option<String>) {
|
||||||
|
dispatch.reduce_mut(move |store| {
|
||||||
|
store.token = token;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_id(dispatch: yewdux::Dispatch<UserData>, id: Option<String>) {
|
||||||
|
dispatch.reduce_mut(move |store| {
|
||||||
|
store.id = id;
|
||||||
|
})
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user