fix: scope browse param sync to browse form and sync genres
This commit is contained in:
@@ -46,21 +46,38 @@ const getTriggerFromHtmxEvent = (event: Event): Element | null => {
|
|||||||
return detail.detail?.elt ?? null;
|
return detail.detail?.elt ?? null;
|
||||||
};
|
};
|
||||||
|
|
||||||
const syncSFWRequestParameter = (event: Event): void => {
|
const isBrowseForm = (form: HTMLFormElement): boolean =>
|
||||||
|
form.getAttribute("action") === "/browse" || form.getAttribute("hx-get") === "/browse";
|
||||||
|
|
||||||
|
const selectedGenreValues = (): string[] =>
|
||||||
|
Array.from(document.querySelectorAll<HTMLInputElement>("[data-genre-visual]:checked"))
|
||||||
|
.map((input) => input.value)
|
||||||
|
.filter((value) => value !== "");
|
||||||
|
|
||||||
|
const syncBrowseRequestParameters = (event: Event): void => {
|
||||||
const detail = (event as CustomEvent<HtmxConfigRequestDetail>).detail;
|
const detail = (event as CustomEvent<HtmxConfigRequestDetail>).detail;
|
||||||
if (!detail.parameters) return;
|
if (!detail.parameters) return;
|
||||||
|
|
||||||
const form = detail.elt instanceof HTMLFormElement ? detail.elt : detail.elt?.closest("form");
|
const form = detail.elt instanceof HTMLFormElement ? detail.elt : detail.elt?.closest("form");
|
||||||
if (!(form instanceof HTMLFormElement)) return;
|
if (!(form instanceof HTMLFormElement)) return;
|
||||||
|
if (!isBrowseForm(form)) return;
|
||||||
|
|
||||||
const checkbox = form.querySelector<HTMLInputElement>("[data-sfw-checkbox]");
|
const checkbox = document.querySelector<HTMLInputElement>("[data-sfw-checkbox]");
|
||||||
if (!checkbox) return;
|
if (checkbox) {
|
||||||
|
detail.parameters.sfw = String(checkbox.checked);
|
||||||
|
}
|
||||||
|
|
||||||
detail.parameters.sfw = String(checkbox.checked);
|
const genres = selectedGenreValues();
|
||||||
|
if (genres.length > 0) {
|
||||||
|
detail.parameters.genres = genres;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete detail.parameters.genres;
|
||||||
};
|
};
|
||||||
|
|
||||||
onReady(() => {
|
onReady(() => {
|
||||||
document.addEventListener("htmx:configRequest", syncSFWRequestParameter);
|
document.addEventListener("htmx:configRequest", syncBrowseRequestParameters);
|
||||||
|
|
||||||
document.addEventListener("htmx:beforeRequest", (event) => {
|
document.addEventListener("htmx:beforeRequest", (event) => {
|
||||||
setBusy(getTriggerFromHtmxEvent(event), true);
|
setBusy(getTriggerFromHtmxEvent(event), true);
|
||||||
|
|||||||
Reference in New Issue
Block a user