namespace mod_platform.app.web { /** */ export type type_state = { model : lib_mvc.type_model; element_dom : (null | HTMLElement); } /** */ export function make ( model : lib_mvc.type_model ) : type_state { return { "model": model, "element_dom": null, }; } /** */ export function setup ( platform : lib_mvc.type_model, target_dom : HTMLElement ) : Promise { let fragment : DocumentFragment = lib_dom.request("app"); let app_dom : HTMLElement = fragment.querySelector(".app"); target_dom.appendChild(fragment); app_dom.classList.add("empty"); platform.state.element_dom = app_dom; // propagate events from the model lib_mvc.model_listen ( platform.state.model, (event) => { return lib_mvc.model_notify(platform, event); } ); return Promise.resolve(undefined); } // imitate interface of model // export function login(platform : lib_mvc.type_model, username : string, password : string) : Promise {return mod_model.app.login(platform.state.model, username, password);} // export function logout(platform : lib_mvc.type_model) : Promise {return mod_model.app.logout(platform.state.model);} // export function prepare_rental(platform : lib_mvc.type_model) : Promise {return mod_model.app.prepare_rental(platform.state.model);} // function start_rental(platform : lib_mvc.type_model, bike_name : string) : Promise {return mod_model.app.start_rental(platform.model, bike_name);} // function pause_rental(platform : lib_mvc.type_model, bike_name : string) : Promise {return mod_model.app.pause_rental(platform.model, bike_name);} // function open_lock(platform : lib_mvc.type_model, bike_name : string) : Promise {return mod_model.app.open_lock(platform.model, bike_name);} // function end_rental(platform : lib_mvc.type_model, rental_id : mod_model.rental.type_id) : Promise {return mod_model.app.end_rental(platform.model, rental_id);} }