diff --git a/source/logic/backend.ts b/source/logic/backend.ts index 31bed3a..33b3587 100644 --- a/source/logic/backend.ts +++ b/source/logic/backend.ts @@ -360,34 +360,6 @@ namespace _espe.backend } - /** - */ - export async function member_project( - data : { - membership_number : string; - name_real_value : string; - email_address_private : (null | string); - groups : Array; - }, - notification_target_url_template : string - ) : Promise - { - return abstract_call( - "POST", - "/member/project", - { - "data": { - "membership_number": data.membership_number, - "name_real_value": data.name_real_value, - "email_address_private": data.email_address_private, - "groups": data.groups, - "notification_target_url_template": notification_target_url_template, - } - } - ); - } - - /** */ export async function member_info( @@ -591,14 +563,12 @@ namespace _espe.backend { 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; + groups_value : Array; } > { @@ -618,14 +588,12 @@ namespace _espe.backend */ export async function invite_create( data : { - 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; + groups_value : Array; expiry : (null | int); }, send_immediatly : boolean, @@ -657,14 +625,12 @@ namespace _espe.backend key : string ) : Promise< { - 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; + groups_value : Array; } > { @@ -685,9 +651,8 @@ namespace _espe.backend export async function invite_accept( key : string, data : { - membership_number : string; - groups : Array; name : string; + groups : Array; email_address : (null | string); password : string; } @@ -707,9 +672,8 @@ namespace _espe.backend "data": { "key": key, "data": { - "membership_number": data.membership_number, - "groups": data.groups, "name": data.name, + "groups": data.groups, "email_address": data.email_address, "password": data.password, }, diff --git a/source/logic/input_set.ts b/source/logic/input_set.ts index acd684d..8ac9f98 100644 --- a/source/logic/input_set.ts +++ b/source/logic/input_set.ts @@ -79,6 +79,7 @@ namespace _espe { const element_checkbox : HTMLInputElement = document.createElement("input"); element_checkbox.setAttribute("type", "checkbox"); + (this.read_only && element_checkbox.setAttribute("disabled", "disabled")); element_container.appendChild(element_checkbox); this.checkboxes.set(option, element_checkbox); } diff --git a/source/pages/invite_create/logic.ts b/source/pages/invite_create/logic.ts index 0115192..a8c9b6a 100644 --- a/source/pages/invite_create/logic.ts +++ b/source/pages/invite_create/logic.ts @@ -27,26 +27,30 @@ lib_plankton.zoo_page.register( */ const null_when_empty = (str) => (((str === null) || (str === "")) ? null : str); + /** + * @todo cache + */ + const groups_as_array : Array<{id : int; name : string;}> = await _espe.backend.group_list(); + const groups_as_map : Map = new Map(); + for (const group_thingy of groups_as_array) + { + groups_as_map.set(group_thingy.id, {"name": group_thingy.name}); + } + const form = new lib_plankton.zoo_form.class_form< { data : { - membership_number_changeable : boolean; - membership_number_value : (null | string); name_changeable : boolean; name_value : (null | string); email_address_changeable : boolean; email_address_value : (null | string); groups_changeable : boolean; - groups_value : Array; + groups_value : Array; expiry : (null | int); }; send_immediatly : boolean; }, { - membership_number : { - changeable : boolean; - value : string; - }; name : { changeable : boolean; value : string; @@ -57,17 +61,13 @@ lib_plankton.zoo_page.register( }; groups : { changeable : boolean; - value : Array; + value : Array; }; expiry : (null | lib_plankton.pit.type_datetime); send_immediatly : boolean; } >( value => ({ - "membership_number": { - "changeable": value.data.membership_number_changeable, - "value": (value.data.membership_number_value ?? ""), - }, "name": { "changeable": value.data.name_changeable, "value": value.data.name_value, @@ -91,8 +91,6 @@ lib_plankton.zoo_page.register( }), representation => ({ "data": { - "membership_number_changeable": representation.membership_number.changeable, - "membership_number_value": null_when_empty(representation.membership_number.value), "name_changeable": representation.name.changeable, "name_value": null_when_empty(representation.name.value), "email_address_changeable": representation.email_address.changeable, @@ -129,26 +127,6 @@ lib_plankton.zoo_page.register( ), "label": lib_plankton.translate.get("domain.member.name.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() - ), - "label": indent(lib_plankton.translate.get("common.initial_value")), - }, - { - "name": "changeable", - "input": new lib_plankton.zoo_input.class_input_checkbox(), - "label": indent(lib_plankton.translate.get("common.changeable")), - }, - ] - ), - "label": lib_plankton.translate.get("domain.member.groups.label"), - }, { "name": "email_address", "input": new lib_plankton.zoo_input.class_input_group( @@ -167,6 +145,45 @@ lib_plankton.zoo_page.register( ), "label": lib_plankton.translate.get("domain.member.email_address.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() + ), + */ + "input": new lib_plankton.zoo_input.class_input_wrapped, Array>( + new _espe.class_input_set( + groups_as_array.map( + group_thingy => group_thingy.id.toFixed(0) + ), + group_id_encoded => groups_as_map.get(parseInt(group_id_encoded)).name + ), + (value_inner) => { + const array : Array = []; + for (const group_id_encoded of value_inner) + { + array.push(parseInt(group_id_encoded)); + } + return array; + }, + (value_outer) => new Set(value_outer.map(group_id => group_id.toFixed(0))) + ), + "label": indent(lib_plankton.translate.get("common.initial_value")), + }, + { + "name": "changeable", + "input": new lib_plankton.zoo_input.class_input_checkbox(), + "label": indent(lib_plankton.translate.get("common.changeable")), + }, + ] + ), + "label": lib_plankton.translate.get("domain.member.groups.label"), + }, { "name": "expiry", "input": new lib_plankton.zoo_input.class_input_soft( @@ -225,8 +242,6 @@ lib_plankton.zoo_page.register( form.input_write( { "data": { - "membership_number_changeable": false, - "membership_number_value": null, "name_changeable": false, "name_value": "", "email_address_changeable": true, diff --git a/source/pages/invite_handle/logic.ts b/source/pages/invite_handle/logic.ts index 93ac310..35345c0 100644 --- a/source/pages/invite_handle/logic.ts +++ b/source/pages/invite_handle/logic.ts @@ -51,14 +51,12 @@ lib_plankton.zoo_page.register( null | { - membership_number_changeable : boolean; - membership_number_value : (null | string); name_changeable : boolean; name_value : (null | string); email_address_changeable : boolean; email_address_value : (null | string); groups_changeable : boolean; - groups_value : Array; + groups_value : Array; } ); try @@ -81,26 +79,33 @@ lib_plankton.zoo_page.register( } else { + /** + * @todo cache + */ + const groups_as_array : Array<{id : int; name : string;}> = await _espe.backend.group_list(); + const groups_as_map : Map = new Map(); + for (const group_thingy of groups_as_array) + { + groups_as_map.set(group_thingy.id, {"name": group_thingy.name}); + } + const form = new lib_plankton.zoo_form.class_form< { - membership_number : (null | string); name : string; email_address : (null | string); - groups : Array; + groups : Array; password_value : string; password_confirmation : string; }, { - membership_number : string; name : string; email_address : string; - groups : Array; + groups : Array; password_value : string; password_confirmation : string; } >( value => ({ - "membership_number": (value.membership_number ?? ""), "name": value.name, "email_address": (value.email_address ?? ""), "groups": value.groups, @@ -108,7 +113,6 @@ lib_plankton.zoo_page.register( "password_confirmation": value.password_confirmation, }), representation => ({ - "membership_number": representation.membership_number, "name": representation.name, "email_address": representation.email_address, "groups": representation.groups, @@ -118,16 +122,17 @@ lib_plankton.zoo_page.register( new lib_plankton.zoo_input.class_input_group( [ { - "name": "membership_number", + "name": "name", "input": new lib_plankton.zoo_input.class_input_text( { - "read_only": (! data.membership_number_changeable), + "read_only": (! data.name_changeable), } ), - "label": lib_plankton.translate.get("domain.member.membership_number.label"), + "label": lib_plankton.translate.get("domain.member.name.label"), }, { "name": "groups", + /* "input": new lib_plankton.zoo_input.class_input_list( () => new lib_plankton.zoo_input.class_input_text( { @@ -138,16 +143,28 @@ lib_plankton.zoo_page.register( "read_only": (! data.groups_changeable), } ), - "label": lib_plankton.translate.get("domain.member.groups.label"), - }, - { - "name": "name", - "input": new lib_plankton.zoo_input.class_input_text( - { - "read_only": (! data.name_changeable), - } + */ + "input": new lib_plankton.zoo_input.class_input_wrapped, Array>( + new _espe.class_input_set( + groups_as_array.map( + group_thingy => group_thingy.id.toFixed(0) + ), + group_id_encoded => groups_as_map.get(parseInt(group_id_encoded)).name, + { + "read_only": (! data.groups_changeable), + } + ), + (value_inner) => { + const array : Array = []; + for (const group_id_encoded of value_inner) + { + array.push(parseInt(group_id_encoded)); + } + return array; + }, + (value_outer) => new Set(value_outer.map(group_id => group_id.toFixed(0))) ), - "label": lib_plankton.translate.get("domain.member.name_real_value.label"), + "label": lib_plankton.translate.get("domain.member.groups.label"), }, { "name": "email_address", @@ -197,7 +214,6 @@ lib_plankton.zoo_page.register( flaws = await _espe.backend.invite_accept( key, { - "membership_number": value.membership_number, "groups": value.groups, "name": value.name, "email_address": value.email_address, @@ -241,7 +257,6 @@ lib_plankton.zoo_page.register( await form.setup(target_element.querySelector(".invite_handle-form") as HTMLElement); form.input_write( { - "membership_number": data.membership_number_value, "name": data.name_value, "email_address": data.email_address_value, "groups": data.groups_value, diff --git a/source/pages/invite_view/logic.ts b/source/pages/invite_view/logic.ts index ae83d49..c2708b6 100644 --- a/source/pages/invite_view/logic.ts +++ b/source/pages/invite_view/logic.ts @@ -42,26 +42,30 @@ lib_plankton.zoo_page.register( */ const null_when_empty = (str) => (((str === null) || (str === "")) ? null : str); + /** + * @todo cache + */ + const groups_as_array : Array<{id : int; name : string;}> = await _espe.backend.group_list(); + const groups_as_map : Map = new Map(); + for (const group_thingy of groups_as_array) + { + groups_as_map.set(group_thingy.id, {"name": group_thingy.name}); + } + 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; + groups_value : Array; }, { key : string; expiry : (null | lib_plankton.pit.type_datetime); - membership_number : { - changeable : boolean; - value : string; - }; name : { changeable : boolean; value : string; @@ -72,7 +76,7 @@ lib_plankton.zoo_page.register( }; groups : { changeable : boolean; - value : Array; + value : Array; }; url : string; } @@ -86,10 +90,6 @@ lib_plankton.zoo_page.register( 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, @@ -113,8 +113,6 @@ lib_plankton.zoo_page.register( 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, @@ -159,9 +157,28 @@ lib_plankton.zoo_page.register( [ { "name": "value", + /* "input": new lib_plankton.zoo_input.class_input_list( () => new lib_plankton.zoo_input.class_input_text(), {"read_only": true} + ), + */ + "input": new lib_plankton.zoo_input.class_input_wrapped, Array>( + new _espe.class_input_set( + groups_as_array.map( + group_thingy => group_thingy.id.toFixed(0) + ), + group_id_encoded => groups_as_map.get(parseInt(group_id_encoded)).name + ), + (value_inner) => { + const array : Array = []; + for (const group_id_encoded of value_inner) + { + array.push(parseInt(group_id_encoded)); + } + return array; + }, + (value_outer) => new Set(value_outer.map(group_id => group_id.toFixed(0))) ), "label": indent(lib_plankton.translate.get("common.initial_value")), }, @@ -216,14 +233,12 @@ lib_plankton.zoo_page.register( 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; + groups_value : Array; } = await _espe.backend.invite_read(id); form.input_write(data); diff --git a/source/pages/member_create/logic.ts b/source/pages/member_create/logic.ts deleted file mode 100644 index 7bc04cd..0000000 --- a/source/pages/member_create/logic.ts +++ /dev/null @@ -1,98 +0,0 @@ -/* -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( - "member_create", - (parameters, target_element) => { - target_element.appendChild(template_request("member_create")); - - target_element.querySelector(".member_create-title").textContent = lib_plankton.translate.get("page.member_create.title"); - - const form = new lib_plankton.zoo_form.class_form< - { - membership_number : string; - name_real_value : string; - email_address_private : (null | string); - groups : Array; - }, - { - membership_number : string; - name_real_value : string; - email_address_private : string; - groups : Array; - } - >( - value => ({ - "membership_number": value.membership_number, - "name_real_value": value.name_real_value, - "email_address_private": (value.email_address_private ?? ""), - "groups": value.groups, - }), - representation => ({ - "membership_number": representation.membership_number, - "name_real_value": representation.name_real_value, - "email_address_private": representation.email_address_private, - "groups": representation.groups, - }), - new lib_plankton.zoo_input.class_input_group( - [ - { - "name": "name_real_value", - "input": new lib_plankton.zoo_input.class_input_text(), - "label": lib_plankton.translate.get("domain.member.name_real_value.label"), - }, - { - "name": "membership_number", - "input": new lib_plankton.zoo_input.class_input_text(), - "label": lib_plankton.translate.get("domain.member.membership_number.label"), - }, - { - "name": "email_address_private", - "input": new lib_plankton.zoo_input.class_input_text(), - "label": lib_plankton.translate.get("domain.member.email_address_private.label") - }, - { - "name": "groups", - "input": new lib_plankton.zoo_input.class_input_list( - () => new lib_plankton.zoo_input.class_input_text() - ), - "label": lib_plankton.translate.get("domain.member.groups.label"), - }, - ] - ), - [ - { - "label": lib_plankton.translate.get("page.member_register.form.submit"), - "procedure": async (get_value, get_representation) => { - const value = await get_value(); - const id : int = await _espe.backend.member_project( - value, - lib_plankton.zoo_page.encode( - { - "name": "member_view", - "parameters": { - "id": "{{id}}", - } - } - ) - ); - lib_plankton.zoo_page.set({"name": "member_view", "parameters": {"id": id}}); - }, - } - ] - ); - form.setup(target_element.querySelector(".member_create-form") as HTMLElement); - } -); diff --git a/source/pages/member_create/structure.html b/source/pages/member_create/structure.html deleted file mode 100644 index 2183174..0000000 --- a/source/pages/member_create/structure.html +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/source/pages/member_create/style.css b/source/pages/member_create/style.css deleted file mode 100644 index 791713b..0000000 --- a/source/pages/member_create/style.css +++ /dev/null @@ -1,15 +0,0 @@ -/* -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 -. - */ - diff --git a/source/pages/member_list/logic.ts b/source/pages/member_list/logic.ts index a70b653..e5559b9 100644 --- a/source/pages/member_list/logic.ts +++ b/source/pages/member_list/logic.ts @@ -29,6 +29,7 @@ lib_plankton.zoo_page.register( target_element.querySelector(".member_list-title").textContent = lib_plankton.translate.get("page.member_list.title"); // create link + /* { const element : HTMLElement = target_element.querySelector(".member_list-create"); element.setAttribute( @@ -43,6 +44,7 @@ lib_plankton.zoo_page.register( ); element.textContent = lib_plankton.translate.get("page.member_create.title"); } + */ const search : lib_plankton.zoo_search.type_search = lib_plankton.zoo_search.make( (term) => _espe.backend.member_list(term), diff --git a/source/pages/member_register/logic.ts b/source/pages/member_register/logic.ts deleted file mode 100644 index 9a499c5..0000000 --- a/source/pages/member_register/logic.ts +++ /dev/null @@ -1,232 +0,0 @@ -/* -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( - "member_register", - async (parameters, target_element) => { - function set_state( - state : ("load" | "fill" | "wait" | "done"), - messages : Array = [] - ) : void - { - target_element.querySelector(".member_register").setAttribute("rel", state); - target_element.querySelector(".member_register-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(".member_register-message").appendChild(dom_list); - } - - // parameters - const id : int = parseInt(parameters["id"]); - const verification : string = parameters["verification"]; - // const verification : string = (new URLSearchParams(location.search)).get("verification"); - - update_nav({"mode": null}); - target_element.appendChild(template_request("member_register")); - set_state( - "load", - [ - ] - ); - - let member_data : ( - null - | - { - name_real_value : string; - name_real_index : int; - name_login : string; - email_address_veiled : string; - email_address_nominal : string; - } - ); - try { - member_data = await _espe.backend.member_info(id, verification); - } - catch (error) { - member_data = null; - } - - if (member_data === null) { - set_state( - "fill", - [ - lib_plankton.translate.get("page.member_register.flaw.already_registered"), - ] - ); - } - else { - - // title - { - target_element.querySelector(".member_register-title").textContent = lib_plankton.translate.get("page.member_register.title"); - } - // info - { - } - // form - { - let input : lib_plankton.zoo_input.interface_input< - { - email_address : ("none" | "only_veiled" | "both"); - email_redirect : boolean; - password_value : string; - password_confirmation : string; - } - >; - // input - { - input = new lib_plankton.zoo_input.class_input_group( - [ - { - "name": "email_address", - "input": new lib_plankton.zoo_input.class_input_enumeration( - [ - { - "value": "none", - "label": lib_plankton.translate.get("page.member_register.form.field.email_address.option.none"), - }, - { - "value": "only_veiled", - "label": lib_plankton.translate.get("page.member_register.form.field.email_address.option.only_veiled"), - }, - { - "value": "both", - "label": lib_plankton.translate.get("page.member_register.form.field.email_address.option.both"), - }, - ] - ), - "label": lib_plankton.translate.get("page.member_register.form.field.email_address.label"), - "help": lib_plankton.translate.get( - "page.member_register.form.field.email_address.help", - { - "email_address_veiled": member_data.email_address_veiled, - "email_address_nominal": member_data.email_address_nominal, - } - ), - }, - { - "name": "email_redirect", - "input": new lib_plankton.zoo_input.class_input_checkbox( - ), - "label": lib_plankton.translate.get("page.member_register.form.field.email_redirect.label"), - }, - { - "name": "password_value", - "input": new lib_plankton.zoo_input.class_input_password( - ), - "label": lib_plankton.translate.get("page.member_register.form.field.password_value.label"), - "help": lib_plankton.translate.get("page.member_register.form.field.password_value.help"), - }, - { - "name": "password_confirmation", - "input": new lib_plankton.zoo_input.class_input_password( - ), - "label": lib_plankton.translate.get("page.member_register.form.field.password_confirmation.label"), - }, - ] - ); - await input.setup(target_element.querySelector(".member_register-form-input") as HTMLElement); - await input.write( - { - "email_address": _espe.conf.get().settings.registration_defaults.email_address, - "email_redirect": _espe.conf.get().settings.registration_defaults.email_redirect, - "password_value": "", - "password_confirmation": "", - } - ); - } - // actions - { - target_element.querySelector(".member_register-form-action-send").textContent = lib_plankton.translate.get("page.member_register.form.submit"); - target_element.querySelector(".member_register-form-action-send").addEventListener( - "click", - async (event) => { - const value : { - email_address : ("none" | "only_veiled" | "both"); - email_redirect : boolean; - password_value : string; - password_confirmation : string; - } = await input.read(); - let flaws : Array<{incident : string; details : Record;}>; - set_state( - "wait", - [ - ] - ); - if (value.password_value !== value.password_confirmation) { - flaws = [ - {"incident": "password_mismatch", "details": {}}, - ]; - } - else { - try { - flaws = await _espe.backend.member_register( - id, - verification, - { - "email_use_veiled_address": (value.email_address !== "none"), - "email_use_nominal_address": (value.email_address === "both"), - "email_redirect_to_private_address": value.email_redirect, - "password": value.password_value, - }, - lib_plankton.zoo_page.encode( - { - "name": "member_view", - "parameters": { - "id": "{{id}}", - } - } - ) - ); - } - catch (error) { - flaws = [ - {"incident": "unhandled_error", "details": {}}, - ]; - } - } - if (flaws.length > 0) { - set_state( - "fill", - flaws.map( - flaw => lib_plankton.string.coin( - lib_plankton.translate.get("page.member_register.flaw." + flaw.incident), - flaw.details - ) - ) - ); - } - else { - set_state( - "done", - [ - lib_plankton.translate.get("page.member_register.success") - ] - ); - } - } - ); - } - } - } - }, -); diff --git a/source/pages/member_register/structure.html b/source/pages/member_register/structure.html deleted file mode 100644 index 8b5bf1e..0000000 --- a/source/pages/member_register/structure.html +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/source/pages/member_register/style.css b/source/pages/member_register/style.css deleted file mode 100644 index b0affdf..0000000 --- a/source/pages/member_register/style.css +++ /dev/null @@ -1,27 +0,0 @@ -/* -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 -. - */ - - -.member_register:not([rel]) .member_register-message {display: none;} -.member_register:not([rel]) .member_register-form {display: none;} - -.member_register[rel="fill"] .member_register-message {} -.member_register[rel="fill"] .member_register-form {} - -.member_register[rel="wait"] .member_register-message {} -.member_register[rel="wait"] .member_register-form {display: none;} - -.member_register[rel="done"] .member_register-message {} -.member_register[rel="done"] .member_register-form {display: none;} diff --git a/source/pages/member_view/logic.ts b/source/pages/member_view/logic.ts index b02ab29..a692629 100644 --- a/source/pages/member_view/logic.ts +++ b/source/pages/member_view/logic.ts @@ -44,7 +44,7 @@ lib_plankton.zoo_page.register( }, { name : string; - groups : Set; + groups : Array; enabled : boolean; email_address : (null | string); password_set : boolean; @@ -52,21 +52,14 @@ lib_plankton.zoo_page.register( >( value => ({ "name": value.name, - "groups": new Set(value.groups.map(group_id => group_id.toFixed(0))), + "groups": value.groups, "enabled": value.enabled, "email_address": value.email_address, "password_set": value.password_set, }), representation => ({ "name": representation.name, - "groups": (() => { - const array : Array = []; - for (const group_id_encoded of representation.groups) - { - array.push(parseInt(group_id_encoded)); - } - return array; - }) (), + "groups": representation.groups, "enabled": representation.enabled, "email_address": representation.email_address, "password_set": representation.password_set, @@ -78,21 +71,6 @@ lib_plankton.zoo_page.register( "input": new lib_plankton.zoo_input.class_input_text({"read_only": true}), "label": lib_plankton.translate.get("domain.member.name.label"), }, - { - "name": "groups", - /* - "input": new lib_plankton.zoo_input.class_input_list( - () => new lib_plankton.zoo_input.class_input_number() - ), - */ - "input": new _espe.class_input_set( - groups_as_array.map( - group_thingy => group_thingy.id.toFixed(0) - ), - group_id_encoded => groups_as_map.get(parseInt(group_id_encoded)).name - ), - "label": lib_plankton.translate.get("domain.member.groups.label"), - }, { "name": "enabled", "input": new lib_plankton.zoo_input.class_input_checkbox(), @@ -108,6 +86,32 @@ lib_plankton.zoo_page.register( "input": new lib_plankton.zoo_input.class_input_text(), "label": lib_plankton.translate.get("domain.member.email_address.label"), }, + { + "name": "groups", + /* + "input": new lib_plankton.zoo_input.class_input_list( + () => new lib_plankton.zoo_input.class_input_number() + ), + */ + "input": new lib_plankton.zoo_input.class_input_wrapped, Array>( + new _espe.class_input_set( + groups_as_array.map( + group_thingy => group_thingy.id.toFixed(0) + ), + group_id_encoded => groups_as_map.get(parseInt(group_id_encoded)).name + ), + (value_inner) => { + const array : Array = []; + for (const group_id_encoded of value_inner) + { + array.push(parseInt(group_id_encoded)); + } + return array; + }, + (value_outer) => new Set(value_outer.map(group_id => group_id.toFixed(0))) + ), + "label": lib_plankton.translate.get("domain.member.groups.label"), + }, ] ), ( diff --git a/tools/makefile b/tools/makefile index af102ae..1aa6e41 100644 --- a/tools/makefile +++ b/tools/makefile @@ -45,10 +45,8 @@ ${dir_temp}/logic-unlinked.js: \ ${dir_source}/pages/group_list/logic.ts \ ${dir_source}/pages/group_view/logic.ts \ ${dir_source}/pages/group_create/logic.ts \ - ${dir_source}/pages/member_create/logic.ts \ ${dir_source}/pages/member_list/logic.ts \ ${dir_source}/pages/member_view/logic.ts \ - ${dir_source}/pages/member_register/logic.ts \ ${dir_source}/pages/password_change_init/logic.ts \ ${dir_source}/pages/password_change_exec/logic.ts \ ${dir_source}/pages/invite_list/logic.ts \ @@ -73,10 +71,8 @@ ${dir_build}/style.css: \ ${dir_source}/pages/group_list/style.css \ ${dir_source}/pages/group_view/style.css \ ${dir_source}/pages/group_create/style.css \ - ${dir_source}/pages/member_create/style.css \ ${dir_source}/pages/member_list/style.css \ ${dir_source}/pages/member_view/style.css \ - ${dir_source}/pages/member_register/style.css \ ${dir_source}/pages/password_change_init/style.css \ ${dir_source}/pages/password_change_exec/style.css \ ${dir_source}/pages/invite_list/style.css \ @@ -95,10 +91,8 @@ ${dir_build}/index.html: \ ${dir_source}/pages/group_list/structure.html \ ${dir_source}/pages/group_view/structure.html \ ${dir_source}/pages/group_create/structure.html \ - ${dir_source}/pages/member_create/structure.html \ ${dir_source}/pages/member_list/structure.html \ ${dir_source}/pages/member_view/structure.html \ - ${dir_source}/pages/member_register/structure.html \ ${dir_source}/pages/password_change_init/structure.html \ ${dir_source}/pages/password_change_exec/structure.html \ ${dir_source}/pages/invite_list/structure.html \