Advanced search on members

This commit is contained in:
William Bouzourène 2025-03-26 18:13:00 +01:00
parent e53ace830a
commit 8044cb975a
Signed by: bouzoure
SSH key fingerprint: SHA256:19MbXpLua4rUtk8tunMesD8KUKb91LXLHg8E/qTooww
4 changed files with 396 additions and 176 deletions

View file

@ -17,40 +17,27 @@ $(document).ready(function() {
}
});
var json = $("#search-json").val();
if (json.length > 0) {
var searchData = JSON.parse(json);
for (const [key, value] of Object.entries(searchData)) {
if (key === "advanced") {
if (value) $("#advanced").trigger("click");
continue;
}
$("#reset-search").on("click", function() {
$("#search-json").val("");
$("#search-page").val("1");
$("#search-form").submit();
});
if (key === "fields") {
// TODO: gérer les champs suppl.
continue
}
$("#search-container").on("change", ".field-select", function() {
var lastField = $(this).attr("data-last-field");
var isInitial = $(this).attr("data-is-initial");
var initialValue = $(this).attr("data-initial-value");
if (typeof value === "boolean") {
$("[data-search-field=" + key + "]").prop("checked", value);
} else {
$("[data-search-field=" + key + "]").val(value);
}
}
}
createFieldSelection();
$("body").on("change", ".search-fields-count .field-select", function() {
var lastfield = $(this).attr("data-last-field");
var field = $(this).val();
if (field == "") {
$(this).parents(".row").remove();
return;
}
if (lastfield.length === 0) {
if ((lastField === undefined || lastField.length === 0) && (isInitial === undefined || isInitial !== "yes")) {
createFieldSelection();
}
$(this).attr("data-last-field", field);
$(this).parents(".row").find(".end-col").find("input").remove();
@ -69,7 +56,8 @@ $(document).ready(function() {
if (data.FieldType === "list") {
var select = $("<select>", {
class: "form-select",
"data-optional-field": field
"data-optional-field": field,
"data-search-type": "int"
});
$(elem).parents(".row").find(".end-col").append(select);
@ -83,7 +71,8 @@ $(document).ready(function() {
$(elem).parents(".row").find(".end-col").append($("<input>", {
class: "form-control",
type: "number",
"data-optional-field": field
"data-optional-field": field,
"data-search-type": "int"
}));
} else if (data.FieldType === "date") {
$(elem).parents(".row").find(".end-col").append($("<input>", {
@ -98,21 +87,62 @@ $(document).ready(function() {
"data-optional-field": field
}));
}
if (initialValue !== undefined && initialValue.length > 0) {
$(elem).parents(".row").find("[data-optional-field]").val(initialValue);
$(elem).attr("data-initial-value", null);
}
});
});
$("#search-container").on("keyup", "input[type=text]", function(e) {
if (e.keyCode === 13) {
search();
}
});
var json = $("#search-json").val();
if (json.length > 0) {
var searchData = JSON.parse(json);
for (const [key, value] of Object.entries(searchData)) {
if (key === "advanced") {
if (value) $("#advanced").trigger("click");
continue;
}
if (key === "fields") {
for (const [field_id, field_values] of Object.entries(value)) {
for (const field_value of field_values) {
createFieldSelection(field_id, field_value);
}
}
continue
}
if (typeof value === "boolean") {
$("[data-search-field=" + key + "]").prop("checked", value);
} else {
$("[data-search-field=" + key + "]").val(value);
}
}
}
createFieldSelection();
});
function createFieldSelection() {
const uuid = crypto.randomUUID();
function createFieldSelection(field, value) {
var elem = $("#search-fields-model").clone().appendTo("#search-fields");
$(elem).attr("id", "search-field-" + uuid);
//$(elem).find(".start-col").find("label").attr("for", "search-field-field-" + uuid);
//$(elem).find(".start-col").find("select").attr("id", "search-field-field-" + uuid);
//$(elem).find(".end-col").find("label").attr("for", "search-field-value-" + uuid);
//$(elem).find(".end-col").find("input").attr("id", "search-field-value-" + uuid);
$(elem).attr("id", null);
$(elem).removeClass("d-none");
$(elem).addClass("search-fields-count");
if (field !== undefined && field.length > 0) {
$(elem).find(".field-select").attr("data-initial-value", value);
$(elem).find(".field-select").attr("data-is-initial", "yes");
$(elem).find(".field-select").val(field);
$(elem).find(".field-select").trigger("change");
}
}
function search() {
@ -130,7 +160,10 @@ function search() {
var index = $(this).data("search-field");
var value = $(this).val();
if ($(this).attr("type") == "checkbox") {
if ($(this).data("search-type") === "int") {
value = parseInt(value);
if (isNaN(value)) return;
} else if ($(this).attr("type") === "checkbox") {
value = $(this).prop("checked");
}
@ -142,12 +175,21 @@ function search() {
var index = $(this).attr("data-optional-field");
var value = $(this).val();
fields[index] = value;
if ($(this).data("search-type") === "int") {
value = parseInt(value);
if (isNaN(value)) return;
}
if (fields[index] !== undefined) {
fields[index].push(value);
} else {
fields[index] = [value];
}
});
searchData["fields"] = fields;
var json = JSON.stringify(searchData);
$("#search-json").val(json);
console.log(searchData);
//$("#search-form").submit();
$("#search-page").val("1");
$("#search-form").submit();
}