fix(grid): discard pending edits when result set changes

Pending changes (dirty cells, new rows, deleted rows) are tracked by
sourceIndex into the current result array. When the query re-executes
(e.g. different WHERE clause or pagination), stale indices silently
point to different rows, causing wrong-row deletions on commit.

Closes #336 (partial)
This commit is contained in:
t8y2
2026-05-19 17:56:32 +08:00
parent 3719d60dbc
commit d1ad53a6ca
@@ -1,4 +1,4 @@
import { ref, computed, nextTick, type ComputedRef, type Ref } from "vue";
import { ref, computed, nextTick, watch, type ComputedRef, type Ref } from "vue";
import * as api from "@/lib/api";
import {
buildDataGridRollbackStatements,
@@ -704,6 +704,15 @@ export function useDataGridEditor(options: UseDataGridEditorOptions) {
exitTransaction();
}
// Pending changes reference rows by sourceIndex. When the result set changes
// (e.g. different WHERE clause, pagination), stale indices point to wrong rows.
watch(
() => result.value.rows,
() => {
discardChanges();
},
);
return {
editingCell,
editValue,