From e032c51185ffe921e36ff8c7c5cd31cca4915024 Mon Sep 17 00:00:00 2001 From: Corban-Lee Date: Tue, 4 Mar 2025 23:59:04 +0000 Subject: [PATCH] edit filter via modal --- src/client/public/js/guild/filters.js | 37 ++++++++++++++++--- .../guild/filter.api.controller.ts | 27 +++++++++++++- src/server/routes/guild.api.routes.ts | 2 +- 3 files changed, 58 insertions(+), 8 deletions(-) diff --git a/src/client/public/js/guild/filters.js b/src/client/public/js/guild/filters.js index 946d20d..b4c996b 100644 --- a/src/client/public/js/guild/filters.js +++ b/src/client/public/js/guild/filters.js @@ -12,7 +12,7 @@ const emptyTableHtml = `

- @@ -87,12 +87,12 @@ const defineTable = () => { data: "name", orderable: true, searchable: true, - render: data => { + render: (data, _type, row) => { return ` - + ${data} - + `; } @@ -210,8 +210,31 @@ $("input[name='filterType']").on("change", () => { table.dataTable.draw(); }); -const openFilterForm = () => { +const openFilterForm = async id => { $("#filterForm").removeClass("submitted"); + + HSSelect.getInstance("#formAlgorithm", true).element.setValue([]); + + if (id === -1) { + $("#formName").val(""); + $("#formMatch").val(""); + $("#formWhitelist").prop("checked", false); + $("#formInsensitive").prop("checked", false); + } + else { + const data = await $.ajax({ + url: `/guild/${guildId}/filters/api?id=${id}`, + method: "get" + }); + + $("#formName").val(data.name); + $("#formMatch").val(data.match); + $("#formWhitelist").prop("checked", data.is_whitelist); + $("#formInsensitive").prop("checked", data.is_insensitive); + + HSSelect.getInstance("#formAlgorithm", true) //setValue(data.algorithm); + } + HSOverlay.open($("#filterModal").get(0)); } @@ -220,7 +243,9 @@ const closeFilterForm = () => { HSOverlay.close($("#filterModal").get(0)); } -$(document).on("click", ".openfilterModal-js", openFilterForm); +$(document).on("click", ".openFilterModal-js", event => { + openFilterForm($(event.target).data("id") || -1); +}); const submitForm = async event => { event.preventDefault(); diff --git a/src/server/controllers/guild/filter.api.controller.ts b/src/server/controllers/guild/filter.api.controller.ts index ba76131..3ef95a1 100644 --- a/src/server/controllers/guild/filter.api.controller.ts +++ b/src/server/controllers/guild/filter.api.controller.ts @@ -29,6 +29,31 @@ export const datatable = async (request: Request, response: Response) => { } } +export const get = async (request: Request, response: Response) => { + try { + if (!request.query.id) { + response.status(400).json({ error: "missing 'id' query" }); + return; + } + + const data = await db("filters") + .select("filters.*") + .where({ "filters.id": request.query.id }) + .first(); + + if (!data) { + response.status(404).json({ message: "no result found" }); + return; + } + + response.json(data); + } + catch (error) { + console.error(error); + response.status(500).json({ error: "Failed to fetch filter" }); + } +} + export const post = async (request: Request, response: Response) => { try { console.debug(JSON.stringify(request.body, null, 4)); @@ -60,4 +85,4 @@ export const post = async (request: Request, response: Response) => { } } -export default { datatable, post } +export default { datatable, get, post } diff --git a/src/server/routes/guild.api.routes.ts b/src/server/routes/guild.api.routes.ts index e908c63..295f0ad 100644 --- a/src/server/routes/guild.api.routes.ts +++ b/src/server/routes/guild.api.routes.ts @@ -11,7 +11,7 @@ router.post("/:guildId/subscriptions/api", subApiController.post); router.delete("/:guildId/subscriptions/api", subApiController.del); router.get("/:guildId/filters/api/datatable", filterApiController.datatable); -// router.get("/:guildId/filters/api", filterApiController.get); +router.get("/:guildId/filters/api", filterApiController.get); router.post("/:guildId/filters/api", filterApiController.post); // router.delete("/:guildId/filters/api", filterApiController.del);