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"
|
||||
dependencies = [
|
||||
"sycamore",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
@ -7,3 +7,4 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
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::*;
|
||||
|
||||
#[allow(unused)]
|
||||
enum AppMode {
|
||||
Working,
|
||||
Break
|
||||
}
|
||||
|
||||
fn main() {
|
||||
sycamore::render(|| template! {
|
||||
div(class="wrapper") {
|
||||
h1(style="text-align: center") { "Hello, World!" }
|
||||
h1(style="text-align: center") { "Pomo" }
|
||||
components::WorkingView()
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue