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