2022-05-09 16:17:27 +02:00
|
|
|
pub mod api;
|
2022-05-10 08:23:35 +02:00
|
|
|
mod i18n;
|
2022-05-05 16:30:25 +02:00
|
|
|
mod model;
|
|
|
|
mod pages;
|
2022-05-09 16:41:11 +02:00
|
|
|
pub mod shared;
|
2022-05-05 16:30:25 +02:00
|
|
|
|
|
|
|
use seed::empty;
|
|
|
|
use seed::prelude::*;
|
|
|
|
|
2022-05-09 16:17:27 +02:00
|
|
|
use crate::model::Model;
|
2022-05-05 16:30:25 +02:00
|
|
|
use crate::pages::{Msg, Page, PublicPage};
|
|
|
|
|
2022-05-09 16:17:27 +02:00
|
|
|
macro_rules! fetch_page {
|
|
|
|
(public $model: expr, $page: ident, $ret: expr) => {{
|
|
|
|
let p = match &mut $model.page {
|
|
|
|
crate::pages::Page::Public(p) => p,
|
|
|
|
_ => return $ret,
|
|
|
|
};
|
|
|
|
match p {
|
|
|
|
crate::pages::PublicPage::$page(p) => p,
|
|
|
|
_ => return $ret,
|
|
|
|
}
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
2022-05-05 16:30:25 +02:00
|
|
|
fn init(url: Url, orders: &mut impl Orders<Msg>) -> Model {
|
|
|
|
Model {
|
|
|
|
token: LocalStorage::get("auth-token").ok(),
|
|
|
|
page: Page::Public(PublicPage::Listing(pages::public::listing::init(
|
|
|
|
url,
|
2022-05-09 16:17:27 +02:00
|
|
|
&mut orders.proxy(proxy_public_listing),
|
2022-05-05 16:30:25 +02:00
|
|
|
))),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|
|
|
match msg {
|
|
|
|
Msg::UrlChanged(subs::UrlChanged(url)) => model.page = Page::init(url, orders),
|
2022-05-09 16:17:27 +02:00
|
|
|
Msg::Public(pages::public::Msg::Listing(msg)) => {
|
|
|
|
let page = fetch_page!(public model, Listing, ());
|
|
|
|
pages::public::listing::update(msg, page, &mut orders.proxy(proxy_public_listing));
|
|
|
|
}
|
2022-05-05 16:30:25 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn view(model: &Model) -> Node<Msg> {
|
|
|
|
match &model.page {
|
|
|
|
Page::Public(PublicPage::Listing(page)) => pages::public::listing::view(&page)
|
|
|
|
.map_msg(|msg| Msg::Public(pages::public::Msg::Listing(msg))),
|
|
|
|
_ => empty![],
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[wasm_bindgen(start)]
|
|
|
|
pub fn start() {
|
|
|
|
App::start("main", init, update, view);
|
|
|
|
}
|
2022-05-09 16:17:27 +02:00
|
|
|
|
|
|
|
fn proxy_public_listing(msg: pages::public::listing::Msg) -> Msg {
|
|
|
|
Msg::Public(pages::public::Msg::Listing(msg))
|
|
|
|
}
|