First Working version. I can add table
This commit is contained in:
98
src/assets/DrawerLayout.js
Normal file
98
src/assets/DrawerLayout.js
Normal file
@@ -0,0 +1,98 @@
|
||||
// ===============================================================
|
||||
// SEND INPUT BEFORE AJAX
|
||||
// ===============================================================
|
||||
// Select all elements with id starting with 'navItem-' within the #sidebar div
|
||||
var navItems = document.querySelectorAll('[name="sidebar"] [id^="navItem-"]');
|
||||
|
||||
navItems.forEach(function (navItem) {
|
||||
navItem.addEventListener("htmx:confirm", function (event) {
|
||||
event.preventDefault();
|
||||
|
||||
// Get the page id
|
||||
var layout_id = navItem.getAttribute("hx-target");
|
||||
var pageDiv = document.querySelector(layout_id);
|
||||
var current_page = pageDiv.querySelector('[name="current_page"]');
|
||||
var current_page_id = current_page.id;
|
||||
|
||||
if (pageDiv) {
|
||||
var elementsWithId = current_page.querySelectorAll("[id]");
|
||||
var elementsInfo = [];
|
||||
|
||||
elementsWithId.forEach(function (element) {
|
||||
// Skip elements with id starting with 'datagrid-'
|
||||
if (element.id.startsWith("datagrid-")) {
|
||||
return;
|
||||
}
|
||||
|
||||
let value = "";
|
||||
let method = "";
|
||||
|
||||
switch (element.tagName) {
|
||||
case "INPUT":
|
||||
if (element.type === "checkbox") {
|
||||
value = element.checked; // For checkboxes
|
||||
method = "checked";
|
||||
} else if (element.type === "radio") {
|
||||
value = element.checked;
|
||||
method = "checked";
|
||||
} else if (element.type === "file") {
|
||||
value = element.files.length > 0 ? Array.from(element.files).map((file) => file.name) : []; // Array of file names
|
||||
method = "files";
|
||||
} else {
|
||||
value = element.value; // For other input types
|
||||
method = "value";
|
||||
}
|
||||
break;
|
||||
case "TEXTAREA":
|
||||
value = element.value; // For textareas
|
||||
method = "value";
|
||||
break;
|
||||
case "SELECT":
|
||||
value = element.multiple
|
||||
? Array.from(element.selectedOptions).map((option) => option.value) // Multiple selections
|
||||
: element.value; // Single selection
|
||||
method = "value";
|
||||
break;
|
||||
default:
|
||||
if (element.isContentEditable) {
|
||||
value = element.innerText.trim(); // For contenteditable elements
|
||||
method = "innerText";
|
||||
} else {
|
||||
value = element.textContent; // For other elements
|
||||
method = "textContent";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
elementsInfo.push({
|
||||
id: element.id,
|
||||
type: element.tagName.toLowerCase(), // Element type in lowercase
|
||||
value: value,
|
||||
method: method,
|
||||
});
|
||||
});
|
||||
|
||||
var result = {
|
||||
dl_id: layout_id.replace("#page_", ""),
|
||||
page_id: current_page_id,
|
||||
state: elementsInfo,
|
||||
};
|
||||
|
||||
// Post the elementInfo to the specified URL
|
||||
fetch("/pages/store_state", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(result),
|
||||
})
|
||||
.then((response) => {
|
||||
event.detail.issueRequest(true);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error:", error); // Handle errors if any occur
|
||||
event.detail.issueRequest(true);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user