2024-04-22 10:02:43 +02:00
lib_plankton . zoo_page . register (
"register" ,
async ( parameters , target_element ) = > {
2024-04-30 01:32:40 +02:00
function set_state (
state : ( "load" | "fill" | "wait" | "done" ) ,
2024-04-30 14:05:40 +02:00
messages : Array < string > = [ ]
2024-04-30 01:32:40 +02:00
) : void
{
2024-04-22 10:02:43 +02:00
target_element . querySelector ( ".register" ) . setAttribute ( "rel" , state ) ;
2024-04-30 14:05:40 +02:00
target_element . querySelector ( ".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 ( ".register-message" ) . appendChild ( dom_list ) ;
2024-04-30 01:32:40 +02:00
}
2024-04-22 10:02:43 +02:00
const id : int = parseInt ( parameters [ "id" ] ) ;
const verification : string = parameters [ "verification" ] ;
2024-04-23 17:44:55 +02:00
// const verification : string = (new URLSearchParams(location.search)).get("verification");
2024-04-22 10:02:43 +02:00
update_nav ( { "mode" : null } ) ;
2024-04-29 00:15:48 +02:00
const member_data : {
2024-04-30 01:32:40 +02:00
name_real_value : string ;
name_real_index : int ;
2024-04-29 00:15:48 +02:00
name_login : string ;
2024-04-30 01:32:40 +02:00
email_address_veiled : string ;
email_address_nominal : string ;
2024-04-30 08:46:19 +02:00
} = await _espe . backend . member_info ( id , verification ) ;
2024-04-30 01:32:40 +02:00
target_element . appendChild ( template_request ( "register" ) ) ;
set_state ( "load" ) ;
2024-04-29 00:15:48 +02:00
2024-04-30 01:32:40 +02:00
// info
2024-04-29 00:15:48 +02:00
{
2024-04-30 01:32:40 +02:00
}
// 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 (
2024-04-29 00:15:48 +02:00
[
{
2024-04-30 01:32:40 +02:00
"name" : "email_address" ,
2024-04-29 00:15:48 +02:00
"input" : new lib_plankton . zoo_input . class_input_enumeration (
[
{ "value" : "none" , "label" : "keine" } ,
2024-04-30 01:32:40 +02:00
{ "value" : "only_veiled" , "label" : "nur pseudonymisiert" } ,
{ "value" : "both" , "label" : "pseudonymisiert und namentlich" } ,
2024-04-29 00:15:48 +02:00
]
) ,
"label" : "Partei-E-Mail-Adresse einrichten" ,
2024-04-30 01:32:40 +02:00
"help" : (
[
"Für Partei-Angelegenheiten möchten wir dir anbieten gesonderte E-Mail-Adressen zu verwenden." ,
lib_plankton . string . coin (
"Deine namentliche E-Mail-Adresse würde lauten »{{email_address_nominal}}« und die pseudonymisierte »{{email_address_veiled}}«." ,
{
"email_address_veiled" : member_data . email_address_veiled ,
"email_address_nominal" : member_data . email_address_nominal ,
}
) ,
"Die Partei-E-Mail-Adressen können zum Empfangen von E-Mails verwendet werden. Falls es nötig werden sollte, dass du auch E-Mails mit über die Partei-Adresse verschicken kannst, wende dich bitte an den/die Mitgliederbeauftragte:n!" ,
]
. join ( "\n\n" )
)
2024-04-29 00:15:48 +02:00
} ,
{
"name" : "email_redirect" ,
2024-04-30 01:32:40 +02:00
"input" : new lib_plankton . zoo_input . class_input_checkbox (
2024-04-29 00:15:48 +02:00
) ,
2024-04-30 01:32:40 +02:00
"label" : "eingehende E-Mails an private Adresse leiten" ,
2024-04-29 00:15:48 +02:00
} ,
{
2024-04-30 01:32:40 +02:00
"name" : "password_value" ,
"input" : new lib_plankton . zoo_input . class_input_password (
) ,
"label" : "Passwort für Netz-Dienste" ,
"help" : "Das Passwort für die Anmeldung bei den Netz-Diensten.\n\nDu solltest dir merken oder geeignet abspeichern, was du hier einträgst.\n\nSolltest du dieses Passwort mal vergessen oder verlieren, hast du die Möglichkeit ein neues zu setzen." ,
2024-04-29 00:15:48 +02:00
} ,
{
"name" : "password_confirmation" ,
2024-04-30 01:32:40 +02:00
"input" : new lib_plankton . zoo_input . class_input_password (
) ,
2024-04-29 00:15:48 +02:00
"label" : "Passwort wiederholen" ,
} ,
]
2024-04-30 01:32:40 +02:00
) ;
await input . setup ( target_element . querySelector ( ".register-form-input" ) as HTMLElement ) ;
await input . write (
2024-04-22 10:02:43 +02:00
{
2024-04-30 01:32:40 +02:00
"email_address" : "both" ,
"email_redirect" : true ,
"password_value" : "" ,
"password_confirmation" : "" ,
}
) ;
}
// actions
{
target_element . querySelector ( ".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 ( ) ;
if ( value . password_value !== value . password_confirmation ) {
2024-04-30 14:05:40 +02:00
set_state ( "fill" , [ "Die Passwörter stimmen nicht überein" ] ) ;
2024-04-30 01:32:40 +02:00
}
else {
2024-04-29 00:15:48 +02:00
set_state ( "wait" ) ;
2024-04-30 14:05:40 +02:00
let flaws : Array < { incident : string ; details : Record < string , any > ; } > ;
2024-04-30 01:32:40 +02:00
try {
2024-04-30 14:05:40 +02:00
flaws = await _espe . backend . member_register (
2024-04-30 01:32:40 +02:00
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 ,
}
) ;
2024-04-29 00:15:48 +02:00
}
2024-04-30 01:32:40 +02:00
catch ( error ) {
2024-04-30 14:05:40 +02:00
flaws = [
{ "incident" : "unhandled_error" , "details" : { } } ,
] ;
}
if ( flaws . length > 0 ) {
set_state (
"fill" ,
flaws . map (
flaw = > lib_plankton . string . coin (
"{{incident}} | {{details}}" ,
{
"incident" : flaw . incident ,
"details" : JSON . stringify ( flaw . details ) ,
}
)
)
) ;
}
else {
set_state ( "done" , [ "Danke!" ] ) ;
2024-04-22 10:02:43 +02:00
}
2024-04-30 01:32:40 +02:00
}
2024-04-29 00:15:48 +02:00
}
2024-04-30 01:32:40 +02:00
) ;
2024-04-22 10:02:43 +02:00
}
2024-04-25 23:30:16 +02:00
}
2024-04-22 10:02:43 +02:00
} ,
) ;