fix(Gridler): correct row index calculation logic

* Update row index checks to handle negative values correctly
* Simplify logic for determining row index from API
This commit is contained in:
Hein
2026-02-11 14:22:51 +02:00
parent b43072f1cf
commit 3887d08fca
2 changed files with 6 additions and 29 deletions

View File

@@ -72,12 +72,9 @@ export const Computer = React.memo(() => {
//When values change, update selection //When values change, update selection
useEffect(() => { useEffect(() => {
const searchSelection = async (values: Array<Record<string, unknown>>) => { const searchSelection = async (values: Array<Record<string, unknown>>) => {
const page_data = getState('_page_data');
const pageSize = getState('pageSize');
const keyField = getState('keyField') ?? 'id'; const keyField = getState('keyField') ?? 'id';
const rowIndexes = []; const rowIndexes = [];
for (const vi in values as Array<Record<string, unknown>>) { for (const vi in values as Array<Record<string, unknown>>) {
let rowIndex = -1;
const key = String( const key = String(
typeof values?.[vi] === 'object' typeof values?.[vi] === 'object'
? values?.[vi]?.[keyField] ? values?.[vi]?.[keyField]
@@ -88,29 +85,9 @@ export const Computer = React.memo(() => {
if (!key) { if (!key) {
continue; continue;
} }
for (const p in page_data) { const idx = await getRowIndexByKey(key);
for (const r in page_data[p]) { if (idx !== null && idx !== undefined) {
const idx = Number(p) * pageSize + Number(r); rowIndexes.push(idx);
if (String(page_data[p][r]?.[keyField]) === key) {
//console.log('Found row S', idx, page_data[p][r], page_data[p][r]?.[keyField], key);
rowIndex = idx;
break;
}
}
if (rowIndex >= 0) {
rowIndexes.push(rowIndex);
break;
}
}
if (rowIndex >= 0) {
rowIndexes.push(rowIndex);
} else {
const idx = await getRowIndexByKey(key);
if (idx !== null) {
rowIndexes.push(idx);
}
} }
} }

View File

@@ -350,17 +350,17 @@ const { Provider, useStore: useGridlerStore } = createSyncStore<GridlerStoreStat
//console.log('Found row', idx, page_data[p][r]?.[keyField], scrollToRowKey); //console.log('Found row', idx, page_data[p][r]?.[keyField], scrollToRowKey);
if (String(page_data[p][r]?.[keyField]) === String(key)) { if (String(page_data[p][r]?.[keyField]) === String(key)) {
rowIndex = rowIndex =
page_data[p][r]?._rownumber > 0 ? page_data[p][r]?._rownumber : idx > 0 ? idx : -1; page_data[p][r]?._rownumber > 0 ? page_data[p][r]?._rownumber : idx >= 0 ? idx : -1;
break; break;
} }
} }
if (rowIndex > 0) { if (rowIndex >= 0) {
//console.log('Local row index', rowIndex, key); //console.log('Local row index', rowIndex, key);
return rowIndex; return rowIndex;
} }
} }
if (rowIndex > 0) { if (rowIndex >= 0) {
return rowIndex; return rowIndex;
} else if (typeof state.askAPIRowNumber === 'function') { } else if (typeof state.askAPIRowNumber === 'function') {
const rn = await state.askAPIRowNumber(String(key)); const rn = await state.askAPIRowNumber(String(key));