/* 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_handle", async (parameters, target_element) => { function set_state( state : ("load" | "fill" | "wait" | "done"), messages : Array = [] ) : void { target_element.querySelector(".invite_handle").setAttribute("rel", state); target_element.querySelector(".invite_handle-message").textContent = ""; let dom_list = document.createElement("ul"); messages.forEach( message => { let dom_message = document.createElement("li"); dom_message.textContent = message; dom_list.appendChild(dom_message); } ); target_element.querySelector(".invite_handle-message").appendChild(dom_list); } // parameters const key : string = parameters["key"]; target_element.appendChild(template_request("invite_handle")); set_state( "load", [ ] ); target_element.querySelector(".invite_handle-title").textContent = lib_plankton.translate.get("page.invite_handle.title"); let data : ( null | { 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; } ); try { data = await _espe.backend.invite_examine(key); } catch (error) { data = null; } if (data === null) { set_state( "done", [ lib_plankton.translate.get("page.invite_handle.message.invalid"), ] ); } else { const form = new lib_plankton.zoo_form.class_form< { membership_number_value : (null | string); name_value : string; email_address_value : (null | string); groups_value : Array; }, { membership_number_value : string; name_value : string; email_address_value : string; groups_value : Array; } >( value => ({ "membership_number_value": (value.membership_number_value ?? ""), "name_value": value.name_value, "email_address_value": (value.email_address_value ?? ""), "groups_value": value.groups_value, }), representation => ({ "membership_number_value": representation.membership_number_value, "name_value": representation.name_value, "email_address_value": representation.email_address_value, "groups_value": representation.groups_value, }), new lib_plankton.zoo_input.class_input_group( [ { "name": "membership_number_value", "input": new lib_plankton.zoo_input.class_input_text( { "read_only": (! data.membership_number_changeable), } ), "label": lib_plankton.translate.get("domain.member.membership_number.label"), }, { "name": "groups_value", "input": new lib_plankton.zoo_input.class_input_list( () => new lib_plankton.zoo_input.class_input_text( { "read_only": (! data.groups_changeable), } ), { "read_only": (! data.groups_changeable), } ), "label": lib_plankton.translate.get("domain.member.groups.label"), }, { "name": "name_value", "input": new lib_plankton.zoo_input.class_input_text( { "read_only": (! data.name_changeable), } ), "label": lib_plankton.translate.get("domain.member.name_real_value.label"), }, { "name": "email_address_value", "input": new lib_plankton.zoo_input.class_input_text( { "read_only": (! data.email_address_changeable), } ), "label": lib_plankton.translate.get("domain.member.email_address_private.label"), }, ] ), [ { "label": lib_plankton.translate.get("page.invite_handle.form.action.submit"), "procedure": async (get_value, get_representation) => { const value = await get_value(); set_state( "wait", [ ] ); await _espe.backend.invite_accept( key, { "membership_number_value": value.membership_number_value, "name_value": value.name_value, "email_address_value": value.email_address_value, "groups_value": value.groups_value, } ); set_state( "done", [ lib_plankton.translate.get("page.invite_handle.message.successful"), ] ); }, } ] ); await form.setup(target_element.querySelector(".invite_handle-form") as HTMLElement); form.input_write( { "membership_number_value": data.membership_number_value, "name_value": data.name_value, "email_address_value": data.email_address_value, "groups_value": data.groups_value, } ); set_state( "fill", [ ] ); } } );