91 lines
2.3 KiB
TypeScript
91 lines
2.3 KiB
TypeScript
|
/*
|
||
|
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
|
||
|
<https://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
lib_plankton.zoo_page.register(
|
||
|
"group_list",
|
||
|
(parameters, target_element) => {
|
||
|
type type_item = {
|
||
|
id : int;
|
||
|
name : string;
|
||
|
};
|
||
|
const term : (null | string) = (parameters["term"] ?? "");
|
||
|
|
||
|
target_element.appendChild(template_request("group_list"));
|
||
|
|
||
|
target_element.querySelector(".group_list-title").textContent = lib_plankton.translate.get("page.group_list.title");
|
||
|
|
||
|
// create link
|
||
|
{
|
||
|
const element : HTMLElement = target_element.querySelector(".group_list-create");
|
||
|
element.setAttribute(
|
||
|
"href",
|
||
|
lib_plankton.zoo_page.encode(
|
||
|
{
|
||
|
"name": "group_create",
|
||
|
"parameters": {
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
element.textContent = lib_plankton.translate.get("page.group_create.title");
|
||
|
}
|
||
|
|
||
|
const search : lib_plankton.zoo_search.type_search<type_item> = lib_plankton.zoo_search.make<type_item>(
|
||
|
(term) => _espe.backend.group_list(),
|
||
|
{
|
||
|
"encode_item": (item) => lib_plankton.string.coin(
|
||
|
"{{name}}",
|
||
|
{
|
||
|
"name": item.name,
|
||
|
}
|
||
|
),
|
||
|
"hooks_begin": [
|
||
|
(term) => {
|
||
|
lib_plankton.zoo_page.set(
|
||
|
{
|
||
|
"name": "group_list",
|
||
|
"parameters": {
|
||
|
"term": term,
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
],
|
||
|
"hooks_select": [
|
||
|
(item) => {
|
||
|
lib_plankton.zoo_page.set(
|
||
|
{
|
||
|
"name": "group_view",
|
||
|
"parameters": {
|
||
|
"id": item.id.toFixed(0),
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
);
|
||
|
lib_plankton.zoo_search.render(
|
||
|
search,
|
||
|
target_element.querySelector(".group_list-search"),
|
||
|
{
|
||
|
"state": {
|
||
|
"term": term,
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
);
|