Add ability to count down
This commit is contained in:
parent
7bd06e5c89
commit
d8322fa8e9
1
pomo/Cargo.lock
generated
1
pomo/Cargo.lock
generated
|
@ -172,6 +172,7 @@ name = "pomo"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"sycamore",
|
"sycamore",
|
||||||
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -7,3 +7,4 @@ edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
sycamore = "0.6.3"
|
sycamore = "0.6.3"
|
||||||
|
wasm-bindgen = "0.2.78"
|
||||||
|
|
44
pomo/src/components.rs
Normal file
44
pomo/src/components.rs
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
use sycamore::prelude::*;
|
||||||
|
use crate::interval::{set_interval, clear_interval};
|
||||||
|
use wasm_bindgen::closure::Closure;
|
||||||
|
|
||||||
|
#[component(WorkingView<G>)]
|
||||||
|
pub fn working_view() -> Template<G> {
|
||||||
|
let time_left = Signal::new(1500);
|
||||||
|
let id = Signal::new(0i32);
|
||||||
|
|
||||||
|
let cb = Closure::wrap(Box::new(cloned!((time_left) => move || {
|
||||||
|
let time = *time_left.get();
|
||||||
|
time_left.set(time - 1);
|
||||||
|
})) as Box<dyn Fn()>);
|
||||||
|
|
||||||
|
id.set(set_interval(&cb, 1_000));
|
||||||
|
|
||||||
|
on_cleanup(cloned!((id) => move || {
|
||||||
|
clear_interval(*id.get());
|
||||||
|
}));
|
||||||
|
|
||||||
|
cb.forget();
|
||||||
|
|
||||||
|
template! {
|
||||||
|
p {
|
||||||
|
(format_time(*time_left.get()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn format_time(seconds_left: u32) -> String {
|
||||||
|
let minutes = (seconds_left / 60) % 60;
|
||||||
|
let seconds = seconds_left % 60;
|
||||||
|
|
||||||
|
format!("{}:{}", add_leading_zeroes(minutes), add_leading_zeroes(seconds))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_leading_zeroes(num: u32) -> String {
|
||||||
|
if num < 10 {
|
||||||
|
format!("0{}", num)
|
||||||
|
} else {
|
||||||
|
// quick and easy string making
|
||||||
|
format!("{}", num)
|
||||||
|
}
|
||||||
|
}
|
9
pomo/src/interval.rs
Normal file
9
pomo/src/interval.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
extern "C" {
|
||||||
|
#[wasm_bindgen(js_name = setInterval)]
|
||||||
|
pub fn set_interval(closure: &Closure<dyn Fn()>, time: u32) -> i32;
|
||||||
|
#[wasm_bindgen(js_name = clearInterval)]
|
||||||
|
pub fn clear_interval(id: i32);
|
||||||
|
}
|
|
@ -1,9 +1,19 @@
|
||||||
|
mod components;
|
||||||
|
mod interval;
|
||||||
|
|
||||||
use sycamore::prelude::*;
|
use sycamore::prelude::*;
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
enum AppMode {
|
||||||
|
Working,
|
||||||
|
Break
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
sycamore::render(|| template! {
|
sycamore::render(|| template! {
|
||||||
div(class="wrapper") {
|
div(class="wrapper") {
|
||||||
h1(style="text-align: center") { "Hello, World!" }
|
h1(style="text-align: center") { "Pomo" }
|
||||||
|
components::WorkingView()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue