frontend-zackeneule/source/logic/pages/members.ts
2024-04-23 23:01:49 +02:00

174 lines
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} : {})
)
)
);
}
);