feat: vendor edit with name/website/mont_page in admin panel
This commit is contained in:
+35
-22
@@ -4,12 +4,29 @@
|
||||
const matrixTable = document.getElementById("matrixTable");
|
||||
const topScroll = document.getElementById("matrixHScroll");
|
||||
const topScrollInner = document.getElementById("matrixHScrollInner");
|
||||
document.addEventListener("click", async (event) => {
|
||||
const button = event.target.closest("[data-copy-target]");
|
||||
if (!button) return;
|
||||
const field = document.getElementById(button.dataset.copyTarget);
|
||||
if (!field) return;
|
||||
field.select();
|
||||
field.setSelectionRange(0, field.value.length);
|
||||
try {
|
||||
await navigator.clipboard.writeText(field.value);
|
||||
} catch (error) {
|
||||
document.execCommand("copy");
|
||||
}
|
||||
const originalText = button.textContent;
|
||||
button.textContent = "Скопировано";
|
||||
setTimeout(() => {
|
||||
button.textContent = originalText;
|
||||
}, 1600);
|
||||
});
|
||||
|
||||
if (!matrixForm || !matrixScroll || !matrixTable || !topScroll || !topScrollInner) return;
|
||||
|
||||
let isDirty = false;
|
||||
let syncing = false;
|
||||
let saveTimer = null;
|
||||
let saveInFlight = false;
|
||||
|
||||
function markDirty() {
|
||||
isDirty = true;
|
||||
@@ -33,29 +50,9 @@
|
||||
syncing = false;
|
||||
}
|
||||
|
||||
async function autoSaveMatrix() {
|
||||
if (saveInFlight) return;
|
||||
saveInFlight = true;
|
||||
try {
|
||||
const formData = new FormData(matrixForm);
|
||||
const response = await fetch(window.location.href, {
|
||||
method: "POST",
|
||||
body: formData,
|
||||
credentials: "same-origin",
|
||||
});
|
||||
if (!response.ok) throw new Error("save failed");
|
||||
isDirty = false;
|
||||
} catch (error) {
|
||||
} finally {
|
||||
saveInFlight = false;
|
||||
}
|
||||
}
|
||||
|
||||
matrixForm.addEventListener("change", (event) => {
|
||||
if (!(event.target && event.target.matches('input[type="checkbox"]'))) return;
|
||||
markDirty();
|
||||
if (saveTimer) clearTimeout(saveTimer);
|
||||
saveTimer = setTimeout(autoSaveMatrix, 250);
|
||||
});
|
||||
|
||||
matrixForm.addEventListener("submit", () => {
|
||||
@@ -89,4 +86,20 @@
|
||||
window.addEventListener("resize", updateTopScrollWidth);
|
||||
updateTopScrollWidth();
|
||||
syncScrollFromMatrix();
|
||||
|
||||
document.addEventListener("click", (event) => {
|
||||
const button = event.target.closest("[data-edit-product]");
|
||||
if (!button) return;
|
||||
const form = document.querySelector(`[data-product-edit="${button.dataset.editProduct}"]`);
|
||||
if (!form) return;
|
||||
form.hidden = !form.hidden;
|
||||
});
|
||||
|
||||
document.addEventListener("click", (event) => {
|
||||
const button = event.target.closest("[data-edit-vendor]");
|
||||
if (!button) return;
|
||||
const form = document.querySelector(`[data-vendor-edit="${button.dataset.editVendor}"]`);
|
||||
if (!form) return;
|
||||
form.hidden = !form.hidden;
|
||||
});
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user