/* Espe | Ein schlichtes Werkzeug zur Mitglieder-Verwaltung | Frontend Copyright (C) 2024 Christian Fraß This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ lib_plankton.zoo_page.register( "invite_view", async (parameters, target_element) => { // functions const get_url = (item) => { const url : URL = new URL(window.location.toString()); url.hash = lib_plankton.string.coin( "#invite_handle,key={{key}}", { "key": item.key, } ); return url.toString(); }; // parameters const id : int = parseInt(parameters["id"]); target_element.appendChild(template_request("invite_view")); target_element.querySelector(".invite_view-title").textContent = lib_plankton.translate.get("page.invite_view.title"); const indent = str => (/*"... " + */str); /** * @todo outsource */ const null_when_empty = (str) => (((str === null) || (str === "")) ? null : str); const form = new lib_plankton.zoo_form.class_form< { key : string; expiry : (null | int); membership_number_changeable : boolean; membership_number_value : (null | string); name_changeable : boolean; name_value : string; email_address_changeable : boolean; email_address_value : (null | string); groups_changeable : boolean; groups_value : Array; }, { key : string; expiry : (null | lib_plankton.pit.type_datetime); membership_number : { changeable : boolean; value : string; }; name : { changeable : boolean; value : string; }; email_address : { changeable : boolean; value : string; }; groups : { changeable : boolean; value : Array; }; url : string; } >( value => ({ "expiry": ( (value.expiry === null) ? null : lib_plankton.pit.to_datetime(lib_plankton.pit.from_unix_timestamp(value.expiry)) ), "key": value.key, "membership_number": { "changeable": value.membership_number_changeable, "value": (value.membership_number_value ?? ""), }, "name": { "changeable": value.name_changeable, "value": value.name_value, }, "email_address": { "changeable": value.email_address_changeable, "value": (value.email_address_value ?? ""), }, "groups": { "changeable": value.groups_changeable, "value": value.groups_value, }, "url": get_url(value), }), representation => ({ "expiry": ( (representation.expiry === null) ? null : lib_plankton.pit.to_unix_timestamp(lib_plankton.pit.from_datetime(representation.expiry)) ), "key": representation.key, "membership_number_changeable": representation.membership_number.changeable, "membership_number_value": null_when_empty(representation.membership_number.value), "name_changeable": representation.name.changeable, "name_value": representation.name.value, "email_address_changeable": representation.email_address.changeable, "email_address_value": null_when_empty(representation.email_address.value), "groups_changeable": representation.groups.changeable, "groups_value": representation.groups.value, "url": "", }), new lib_plankton.zoo_input.class_input_group( [ { "name": "url", "input": new lib_plankton.zoo_input.class_input_text({"read_only": false}), "label": lib_plankton.translate.get("domain.invite.url.label"), }, { "name": "key", "input": new lib_plankton.zoo_input.class_input_text({"read_only": true}), "label": lib_plankton.translate.get("domain.invite.key.label"), }, { "name": "membership_number", "input": new lib_plankton.zoo_input.class_input_group( [ { "name": "value", "input": new lib_plankton.zoo_input.class_input_text({"read_only": true}), "label": indent(lib_plankton.translate.get("common.initial_value")), }, { "name": "changeable", "input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}), "label": indent(lib_plankton.translate.get("common.changeable")), }, ] ), "label": lib_plankton.translate.get("domain.member.membership_number.label"), }, { "name": "groups", "input": new lib_plankton.zoo_input.class_input_group( [ { "name": "value", "input": new lib_plankton.zoo_input.class_input_list( () => new lib_plankton.zoo_input.class_input_text(), {"read_only": true} ), "label": indent(lib_plankton.translate.get("common.initial_value")), }, { "name": "changeable", "input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}), "label": indent(lib_plankton.translate.get("common.changeable")), }, ] ), "label": lib_plankton.translate.get("domain.member.groups.label"), }, { "name": "name", "input": new lib_plankton.zoo_input.class_input_group( [ { "name": "value", "input": new lib_plankton.zoo_input.class_input_text({"read_only": true}), "label": indent(lib_plankton.translate.get("common.initial_value")), }, { "name": "changeable", "input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}), "label": indent(lib_plankton.translate.get("common.changeable")), }, ] ), "label": lib_plankton.translate.get("domain.member.name_real_value.label"), }, { "name": "email_address", "input": new lib_plankton.zoo_input.class_input_group( [ { "name": "value", "input": new lib_plankton.zoo_input.class_input_text({"read_only": true}), "label": indent(lib_plankton.translate.get("common.initial_value")), }, { "name": "changeable", "input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}), "label": indent(lib_plankton.translate.get("common.changeable")), }, ] ), "label": lib_plankton.translate.get("domain.member.email_address_private.label"), }, { "name": "expiry", "input": new lib_plankton.zoo_input.class_input_soft( new lib_plankton.zoo_input.class_input_datetime_central_europe( { // "read_only": true, // "label_timezone_shift": indent(lib_plankton.translate.get("common.timezone_shift")), "label_date": indent(lib_plankton.translate.get("common.date")), "label_time": indent(lib_plankton.translate.get("common.time")), } ) ), "label": lib_plankton.translate.get("domain.invite.expiry.label"), }, ] ), [ ] ); await form.setup(target_element.querySelector(".invite_view-form") as HTMLElement); const data : { key: string; expiry : (null | int); membership_number_changeable : boolean; membership_number_value : (null | string); name_changeable : boolean; name_value : string; email_address_changeable : boolean; email_address_value : (null | string); groups_changeable : boolean; groups_value : Array; } = await _espe.backend.invite_read(id); form.input_write(data); } );