frontend-zackeneule/source/logic/pages/members.ts

219 lines
6.5 KiB
TypeScript

lib_plankton.zoo_page.register(
"members",
(parameters, target_element) => {
const state : (null | any) = (
("state" in parameters)
? lib_plankton.json.decode(lib_plankton.base64.decode(parameters["state"]))
: null
);
const set_state = function (state) {
target_element.querySelector(".members").setAttribute("rel", state);
};
let _id : (null | int) = null;
const editor : lib_plankton.zoo_editor.type_editor<int, any> = lib_plankton.zoo_editor.make<int, any>(
{
"setup": (parameters) => Promise.resolve<void>(undefined),
"search": async (term) => lib_plankton.call.convey(
await _espe.backend.member_list(),
[
// (raw as Array<{id : int; preview : any;}>)
x => x.filter(
(
(term === null)
||
(term === "")
)
? (entry => true)
: (
(term.length < 2)
? (entry => false)
: (
entry => (
entry.preview["membership_number"].includes(term)
||
entry.preview["name_real_value"].toLowerCase().includes(term)
)
)
)
),
x => x.map(
entry => ({
"key": entry.id,
"preview": entry.preview,
})
),
]
),
"read": (key) => _espe.backend.member_get(key),
"create": (value) => /*_espe.backend.member_add(value)*/Promise.reject(new Error("missing")),
"update": (key, value) => _espe.backend.member_modify(key, value),
"delete": (key) => /*_espe.backend.member_remove(key)*/Promise.reject(new Error("missing")),
},
lib_plankton.zoo_form.make<any>(
"GET",
[
{
"name": "membership_number",
"type": "text",
"label": "Mitgliedsnummer",
},
{
"name": "enabled",
"type": "checkbox",
"label": "Für Online-Dienste freischalten",
},
{
"name": "name_real_value",
"type": "text",
"label": "Echter Name",
},
{
"name": "name_real_extension",
"type": "text",
"label": "Zusatz für echten Name (für mögliche Dopplung)",
},
{
"name": "name_display",
"type": "text",
"label": "Anzeigename",
},
{
"name": "name_login",
"type": "text",
"label": "Anmeldename",
},
{
"name": "email_address_private_value",
"type": "text",
"label": "Private E-Mail-Adresse",
},
{
"name": "email_address_numberbased_use",
"type": "checkbox",
"label": "Nummernbasierte E-Mail-Adresse verwenden",
},
{
"name": "email_address_namebased_use",
"type": "checkbox",
"label": "Namensbasierte E-Mail-Adresse verwenden",
},
{
"name": "email_redirect_to_private",
"type": "checkbox",
"label": "E-Mails an private Adresse umleiten",
},
{
"name": "salutation",
"type": "text",
"label": "Anrede/Pronomen",
},
],
value => ({
"enabled": (value.enabled ? "on" : ""),
"membership_number": value.membership_number,
"name_real_value": value.name_real_value,
"name_real_extension": value.name_real_extension,
"name_display": value.name_display,
"name_login": value.name_login,
"email_address_private_value": value.email_address_private_value,
"email_address_numberbased_use": (value.email_address_numberbased_use ? "on" : ""),
"email_address_namebased_use": (value.email_address_namebased_use ? "on" : ""),
"email_redirect_to_private": (value.email_redirect_to_private ? "on" : ""),
"salutation": value.salutation,
}),
raw => ({
"enabled": (raw["enabled"] === "on"),
"membership_number": raw["membership_number"],
"name_real_value": raw["name_real_value"],
"name_real_extension": raw["name_real_extension"],
"name_display": raw["name_display"],
"name_login": raw["name_login"],
"email_address_private_value": raw["email_address_private_value"],
"email_address_numberbased_use": (raw["email_address_numberbased_use"] === "on"),
"email_address_namebased_use": (raw["email_address_namebased_use"] === "on"),
"email_redirect_to_private": (raw["email_redirect_to_private"] === "on"),
"salutation": raw["salutation"],
}),
{
}
),
{
"encode_hit": hit => lib_plankton.string.coin(
"{{number}} | {{name}}",
{
"number": hit.preview["membership_number"],
"name": hit.preview["name_real_value"],
}
),
"hook_switch": (state) => {
_id = state.key;
set_state((_id === null) ? "poor" : "rich");
const state_encoded : string = lib_plankton.base64.encode(lib_plankton.json.encode(state));
lib_plankton.zoo_page.set({"name": "members", "parameters": {"state": state_encoded}});
},
}
);
target_element.appendChild(template_request("members"));
lib_plankton.zoo_editor.render<int, any>(
editor,
target_element.querySelector(".members-editor"),
(
Object.assign(
{
},
((state !== null) ? {"state": state} : {})
)
)
);
target_element.querySelector(".members-urge_for_registration").addEventListener(
"click",
async () => {
const verification : string = await _espe.backend.verification_get(_id);
const location_encoded : string = lib_plankton.zoo_page.encode(
{
"name": "register",
"parameters": {
"id": _id,
"verification": verification,
}
}
);
const url_base : string = window.location.href.split("#")[0];
const url : string = (url_base + location_encoded);
const data : Record<string, any> = await lib_plankton.zoo_form.read(editor.form);
const text_paragraphs : Array<string> = [
lib_plankton.string.coin(
"Hi, {{name}}!",
{
"name": "data.name_real_value",
}
),
"Willkommen bei der Linken!",
"Wir als Landesverband Sachsen stellen für unsere Mitglieder verschiedene Online-Dienste zur Verfügung. Dazu gehört eine E-Mail-Adresse bei der Partei, ein Instant Messenger, eine Cloud, ein Wiki und noch einiges mehr.",
"Wenn du die Dienste nutzen möchtest, rufe bitte folgende Adresse auf:",
url,
"Solidarische Grüße, dein Landesverband Sachsen",
];
_espe.backend.email(
[
data.email_address_private_value,
],
"DIE LINKE. | Landesverband Sachsen | Registierung für Online-Dienste",
text_paragraphs.join("\n\n"),
);
// TODO: statt dessen eine E-Mail an die private Adresse des Neumitglieds senden
// target_element.querySelector(".members-result").setAttribute("href", url);
alert(url);
}
);
}
);