ryde/source/logic/view/web/app.ts
2026-03-06 08:37:53 +01:00

124 lines
2.5 KiB
TypeScript

namespace mod_view.app.web
{
/**
*/
export type type_style =
{
sheet_name : string;
force_language : (null | string);
};
/**
*/
export type type_state =
{
context_dom : (null | HTMLElement);
};
/**
*/
function set_condition
(
state : type_state,
condition : mod_model.app.enum_condition
) : void
{
state.context_dom.classList.toggle("empty", false);
state.context_dom.classList.toggle("logged_in", (condition === mod_model.app.enum_condition.logged_in));
state.context_dom.classList.toggle("logged_out", (condition === mod_model.app.enum_condition.logged_out));
}
/**
*/
export function make
(
) : type_state
{
return {
"context_dom": null,
};
}
/**
*/
export function setup
(
state : type_state,
platform : lib_mvc.type_model<mod_platform.app.web.type_state>,
) : Promise<void>
{
let context_dom : HTMLElement = platform.state.element_dom;
state.context_dom = context_dom;
// translate stuff
{
lib_loc.translate_item(".app_username > input", "username", {"context": context_dom, "kind": "attribute", "parameters": {"key": "placeholder"}});
lib_loc.translate_item(".app_password > input", "password", {"context": context_dom, "kind": "attribute", "parameters": {"key": "placeholder"}});
lib_loc.translate_item(".app_login > button", "login", {"context": context_dom});
lib_loc.translate_item(".app_logout > button", "logout", {"context": context_dom});
lib_loc.translate_item(".app_rent > button", "rent", {"context": context_dom});
}
// list rentals
{
/*
let rentals_dom : HTMLElement = document.querySelector("#rentals");
rentals_dom.innerHTML = "";
model.rentals.order.forEach
(
(rental_id) =>
{
}
);
*/
}
set_condition(state, platform.state.model.state.condition);
return Promise.resolve<void>(undefined);
}
/**
*/
function update
(
state : type_state,
platform : lib_mvc.type_model<mod_platform.app.web.type_state>,
event : lib_mvc.type_event<any>
) : Promise<void>
{
switch (event.type)
{
default:
{
// do nothing
break;
}
case "login":
case "logout":
{
set_condition(state, platform.state.model.state.condition);
break;
}
}
return Promise.resolve<void>(undefined);
}
/**
*/
export function implementation_view
(
) : lib_mvc.type_view<mod_platform.app.web.type_state>
{
let state : type_state = make();
return {
"setup": (model) => setup(state, model),
"update": (model, event) => update(state, model, event),
};
}
}