filter on imported
This commit is contained in:
@@ -1388,6 +1388,11 @@
|
||||
|
||||
if (column === "idclient") {
|
||||
data.forEach((row) => {
|
||||
if (
|
||||
window.isTargetGridId &&
|
||||
!window.isTargetGridId(row.iddatadb)
|
||||
)
|
||||
return;
|
||||
const oldClientId = row.idclient || "";
|
||||
|
||||
row.idclient = value;
|
||||
@@ -1421,6 +1426,11 @@
|
||||
|
||||
if (column === "cliente_fornitore_id") {
|
||||
data.forEach((row) => {
|
||||
if (
|
||||
window.isTargetGridId &&
|
||||
!window.isTargetGridId(row.iddatadb)
|
||||
)
|
||||
return;
|
||||
row.cliente_fornitore_id = value;
|
||||
row._dirty = true;
|
||||
});
|
||||
@@ -1434,6 +1444,11 @@
|
||||
const fixedKey = column.replace("fixed_", "");
|
||||
|
||||
data.forEach((row) => {
|
||||
if (
|
||||
window.isTargetGridId &&
|
||||
!window.isTargetGridId(row.iddatadb)
|
||||
)
|
||||
return;
|
||||
if (!row.fixedFields) row.fixedFields = {};
|
||||
row.fixedFields[fixedKey] = value;
|
||||
row._dirty = true;
|
||||
@@ -1446,6 +1461,11 @@
|
||||
|
||||
if (col && (col.type === "detail" || col.type === "main_field")) {
|
||||
data.forEach((row) => {
|
||||
if (
|
||||
window.isTargetGridId &&
|
||||
!window.isTargetGridId(row.iddatadb)
|
||||
)
|
||||
return;
|
||||
if (!row.details) row.details = {};
|
||||
row.details[col.key] = value;
|
||||
|
||||
@@ -1760,3 +1780,127 @@
|
||||
},
|
||||
};
|
||||
})();
|
||||
// ===================
|
||||
// NAVIGAZIONE GRIGLIA CON FRECCE TASTIERA
|
||||
// ===================
|
||||
(function () {
|
||||
// Naviga solo tra input di testo/numero/time e date-picker.
|
||||
// I Select2 (client, fornitore, SceltaMultipla) sono esclusi:
|
||||
// lì le frecce servono al dropdown.
|
||||
function isNavigable(el) {
|
||||
if (!el || !el.classList) return false;
|
||||
if (!el.classList.contains("cell-input")) return false;
|
||||
// Escludi i select (nativi o Select2)
|
||||
if (el.tagName === "SELECT") return false;
|
||||
if (el.classList.contains("select2-hidden-accessible")) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Tutte le celle navigabili della riga, ordinate per data-index
|
||||
function navCellsInRow($row) {
|
||||
return $row.find(".grid-cell[data-index]").filter(function () {
|
||||
const input = this.querySelector(".cell-input");
|
||||
return isNavigable(input);
|
||||
});
|
||||
}
|
||||
|
||||
function focusCellInput($cell) {
|
||||
if (!$cell || !$cell.length) return;
|
||||
const input = $cell.get(0).querySelector(".cell-input");
|
||||
if (!input) return;
|
||||
input.focus();
|
||||
if (input.type !== "date" && typeof input.select === "function") {
|
||||
try {
|
||||
input.select();
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
|
||||
function atStart(el) {
|
||||
if (el.type === "date" || el.type === "number" || el.type === "time")
|
||||
return true;
|
||||
return el.selectionStart === 0 && el.selectionEnd === 0;
|
||||
}
|
||||
|
||||
function atEnd(el) {
|
||||
if (el.type === "date" || el.type === "number" || el.type === "time")
|
||||
return true;
|
||||
const len = (el.value || "").length;
|
||||
return el.selectionStart === len && el.selectionEnd === len;
|
||||
}
|
||||
|
||||
$(document).on("keydown", "#gridRowContainer .cell-input", function (e) {
|
||||
const el = this;
|
||||
if (!isNavigable(el)) return;
|
||||
|
||||
// Ignora se un dropdown Select2 è aperto
|
||||
if ($(".select2-container--open").length) return;
|
||||
|
||||
const key = e.key;
|
||||
if (
|
||||
key !== "ArrowUp" &&
|
||||
key !== "ArrowDown" &&
|
||||
key !== "ArrowLeft" &&
|
||||
key !== "ArrowRight"
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const $cell = $(el).closest(".grid-cell");
|
||||
const $row = $cell.closest(".grid-row");
|
||||
if (!$cell.length || !$row.length) return;
|
||||
|
||||
const colIndex = $cell.attr("data-index");
|
||||
|
||||
// --- SU / GIÙ: stessa colonna (data-index), riga adiacente ---
|
||||
if (key === "ArrowUp" || key === "ArrowDown") {
|
||||
const $targetRow =
|
||||
key === "ArrowUp"
|
||||
? $row.prev(".grid-row")
|
||||
: $row.next(".grid-row");
|
||||
if (!$targetRow.length) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
// Cella stessa colonna nella riga di destinazione
|
||||
let $target = $targetRow.find(
|
||||
`.grid-cell[data-index="${colIndex}"]`,
|
||||
);
|
||||
|
||||
// Se quella colonna non è navigabile (es. è un select),
|
||||
// cerca la più vicina navigabile nella riga
|
||||
if (
|
||||
!$target.length ||
|
||||
!isNavigable($target.get(0).querySelector(".cell-input"))
|
||||
) {
|
||||
const $cells = navCellsInRow($targetRow);
|
||||
if (!$cells.length) return;
|
||||
$target = $cells.first();
|
||||
}
|
||||
|
||||
focusCellInput($target);
|
||||
return;
|
||||
}
|
||||
|
||||
// --- SINISTRA / DESTRA: cella navigabile precedente/successiva nella riga ---
|
||||
const $cells = navCellsInRow($row);
|
||||
const curPos = $cells.index($cell);
|
||||
if (curPos === -1) return;
|
||||
|
||||
if (key === "ArrowLeft") {
|
||||
if (!atStart(el)) return;
|
||||
if (curPos <= 0) return;
|
||||
e.preventDefault();
|
||||
focusCellInput($cells.eq(curPos - 1));
|
||||
return;
|
||||
}
|
||||
|
||||
if (key === "ArrowRight") {
|
||||
if (!atEnd(el)) return;
|
||||
if (curPos >= $cells.length - 1) return;
|
||||
e.preventDefault();
|
||||
focusCellInput($cells.eq(curPos + 1));
|
||||
return;
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user