namespace _dali.pages.overview { /** */ lib_plankton.zoo_page.register( "overview", async (parameters, target_element) => { // params const view_mode : _dali.type.enum_view_mode = view_mode_determine(parameters["mode"] ?? "auto"); /** * @todo ordentlich machen (nicht nur week und list) */ const set_view_mode = (view_mode) => { const compact : boolean = (view_mode !== _dali.type.enum_view_mode.week); target_element.querySelector("#overview").classList.toggle("overview-compact", compact); }; // exec target_element.innerHTML = await _dali.helpers.template_coin( "overview", "default", { } ); // mode switcher { const widget_mode_switcher : lib_plankton.zoo_widget.interface_widget = new _dali.widgets.mode_switcher.class_widget_mode_switcher( [ { "mode": _dali.type.enum_view_mode.week, "label": lib_plankton.translate.get("page.overview.mode.week"), }, { "mode": _dali.type.enum_view_mode.list, "label": lib_plankton.translate.get("page.overview.mode.list"), }, ], { "initial_selection": view_mode, "action_change": (view_mode) => { lib_plankton.zoo_page.set( { "name": "overview", "parameters": { "mode": _dali.view_mode_encode(view_mode), } } ); set_view_mode(view_mode); } } ); set_view_mode(view_mode); await widget_mode_switcher.load(target_element.querySelector("#overview-mode")); } let widget_weekview : _dali.widgets.weekview.class_widget_weekview; let widget_listview : _dali.widgets.listview.class_widget_listview; /** * @todo update sources */ const update = () => { widget_weekview.update_entries(); }; // hint { if (! await _dali.backend.is_logged_in()) { target_element.querySelector("#overview-hint").textContent = lib_plankton.translate.get("page.overview.login_hint"); } else { // do nothing } } // sources { const data : Array< { id : _dali.type.calendar_id; name : string; hue : float; access_level : _dali.type.enum_access_level; } > = await _dali.backend.calendar_list( ); const widget_sources = new _dali.widgets.sources.class_widget_sources( data, { "action_open": (entry) => { let read_only : boolean; switch (entry.access_level) { case _dali.type.enum_access_level.none: { throw (new Error("this event should not be visible")); break; } case _dali.type.enum_access_level.edit: case _dali.type.enum_access_level.view: { read_only = true; break; } case _dali.type.enum_access_level.admin: { read_only = false; break; } } (async () => { const calendar_id : _dali.type.calendar_id = entry.id; const calendar_object : _dali.type.calendar_object = await _dali.backend.calendar_get( calendar_id ); const widget = new _dali.widgets.calendar_edit.class_widget_calendar_edit( { "read_only": read_only, "action_cancel": () => { _dali.overlay.toggle({"mode": false}); }, "action_change": (data) => { _dali.backend.calendar_change( calendar_id, data ) .then( () => { update(); _dali.overlay.toggle({"mode": false}); } ); }, "action_remove": (data) => { _dali.backend.calendar_remove( calendar_id ) .then( () => { update(); _dali.overlay.toggle({"mode": false}); } ); }, "initial_value": { "name": calendar_object.name, "hue": calendar_object.hue, "access": calendar_object.access, }, } ); _dali.overlay.clear(); _dali.overlay.toggle({"mode": true}); await widget.load(_dali.overlay.get_content_element()); }) (); }, "action_toggle_visibility": (entry) => { widget_weekview.toggle_visibility(entry.id); widget_listview.toggle_visibility(entry.id); }, } ); await widget_sources.load(target_element.querySelector("#overview-pane-left")); } // events { const get_entries = (from_pit, to_pit, calendar_ids) => _dali.backend.events( from_pit, to_pit, { "calendar_ids": calendar_ids, } ); const action_select_event = (calendar_id, access_level, event_id) => { /* if (! await _dali.backend.is_logged_in()) { // do nothing } else { } */ let read_only : boolean; switch (access_level) { case _dali.type.enum_access_level.none: { throw (new Error("this event should not be visible")); break; } case _dali.type.enum_access_level.view: { read_only = true; break; } case _dali.type.enum_access_level.edit: case _dali.type.enum_access_level.admin: { read_only = false; break; } } (async () => { const event_object : _dali.type.event_object = await _dali.backend.calendar_event_get( calendar_id, event_id ); const widget = new _dali.widgets.event_edit.class_widget_event_edit( { "calendar_id": calendar_id, "event_name": event_object.name, "event_begin": event_object.begin, "event_end": event_object.end, "event_location": event_object.location, "event_link": event_object.link, "event_description": event_object.description, }, { "read_only": read_only, "action_cancel": () => { _dali.overlay.toggle({"mode": false}); }, "action_change": (data) => { _dali.backend.calendar_event_change( calendar_id, event_id, { "name": data.event_name, "begin": data.event_begin, "end": data.event_end, "location": data.event_location, "link": data.event_link, "description": data.event_description, } ) .then( () => { update(); _dali.overlay.toggle({"mode": false}); } ) .catch( (reason) => { lib_plankton.log.warning( "dali.overview.event_change.error", {"details": String(reason)} ); } ); }, "action_remove": () => { _dali.backend.calendar_event_remove( calendar_id, event_id ) .then( () => { update(); _dali.overlay.toggle({"mode": false}); } ) .catch( (reason) => { lib_plankton.log.warning( "dali.overview.event_remove_error", {"details": String(reason)} ); } ); }, } ); _dali.overlay.clear(); _dali.overlay.toggle({"mode": true}); await widget.load(_dali.overlay.get_content_element()); }) (); }; // listview { widget_listview = ( new _dali.widgets.listview.class_widget_listview( get_entries, { "action_select_event": action_select_event, "action_add": () => { lib_plankton.zoo_page.set( { "name": "event_add", "parameters": { "calendar_id": null, "year": null, "month": null, "day": null, } } ); }, } ) ); await widget_listview.load(target_element.querySelector("#overview-pane-right-listview")); } // weekview { widget_weekview = ( new _dali.widgets.weekview.class_widget_weekview( get_entries, { "action_select_event": action_select_event, "action_select_day": (date) => { /* if (! await _dali.backend.is_logged_in()) { // do nothing } else { } */ (async () => { const widget = new _dali.widgets.event_edit.class_widget_event_edit( { "calendar_id": null, "event_name": "", "event_begin": lib_plankton.call.convey( date, [ x => ({ "timezone_shift": 0, "date": date, "time": {"hour": 12, "minute": 0, "second": 0} }), lib_plankton.pit.from_datetime, x => lib_plankton.pit.shift_hour(x, 0), lib_plankton.pit.to_datetime, ] ), "event_end": lib_plankton.call.convey( date, [ x => ({ "timezone_shift": 0, "date": date, "time": {"hour": 12, "minute": 0, "second": 0} }), lib_plankton.pit.from_datetime, x => lib_plankton.pit.shift_hour(x, +1), lib_plankton.pit.to_datetime, ] ), "event_location": null, "event_link": null, "event_description": null, }, { "read_only": false, "action_cancel": () => { _dali.overlay.toggle({"mode": false}); }, "action_add": (data) => { _dali.backend.calendar_event_add( data.calendar_id, { "name": data.event_name, "begin": data.event_begin, "end": data.event_end, "location": data.event_location, "link": data.event_link, "description": data.event_description, } ) .then( () => { update(); _dali.overlay.toggle({"mode": false}); } ) .catch( (reason) => { // todo } ); }, } ); _dali.overlay.clear(); _dali.overlay.toggle({"mode": true}); await widget.load(_dali.overlay.get_content_element()); }) (); }, } ) ); await widget_weekview.load(target_element.querySelector("#overview-pane-right-weekview")); } } return Promise.resolve(undefined); }, ); }