From 733a638a99fcd88f25051599e9d973111d57f405 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 17 Aug 2023 12:08:50 +0100 Subject: [PATCH] Remove unnecessary save on first keypress in grids --- .../src/components/grid/cells/DataCell.svelte | 9 +++++++-- .../src/components/grid/layout/NewRow.svelte | 4 ++-- .../components/grid/overlays/KeyboardManager.svelte | 6 ++++-- .../frontend-core/src/components/grid/stores/rows.js | 11 ++++++++--- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/frontend-core/src/components/grid/cells/DataCell.svelte b/packages/frontend-core/src/components/grid/cells/DataCell.svelte index 3a2a5f957f..19bdf1bd74 100644 --- a/packages/frontend-core/src/components/grid/cells/DataCell.svelte +++ b/packages/frontend-core/src/components/grid/cells/DataCell.svelte @@ -58,9 +58,14 @@ isReadonly: () => readonly, getType: () => column.schema.type, getValue: () => row[column.name], - setValue: value => { + setValue: (value, options = { save: true }) => { validation.actions.setError(cellId, null) - updateValue(row._id, column.name, value) + updateValue({ + rowId: row._id, + column: column.name, + value, + save: options?.save, + }) }, } diff --git a/packages/frontend-core/src/components/grid/layout/NewRow.svelte b/packages/frontend-core/src/components/grid/layout/NewRow.svelte index 18acb0e24c..6a926ca02c 100644 --- a/packages/frontend-core/src/components/grid/layout/NewRow.svelte +++ b/packages/frontend-core/src/components/grid/layout/NewRow.svelte @@ -120,8 +120,8 @@ document.addEventListener("keydown", handleKeyPress) } - const updateValue = (rowId, columnName, val) => { - newRow[columnName] = val + const updateValue = ({ column, value }) => { + newRow[column] = value } const addViaModal = () => { diff --git a/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte b/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte index 4f30c3c7db..cd23f154b5 100644 --- a/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte +++ b/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte @@ -215,13 +215,15 @@ if ($focusedCellAPI && !$focusedCellAPI.isReadonly()) { const type = $focusedCellAPI.getType() if (type === "number" && keyCodeIsNumber(keyCode)) { - $focusedCellAPI.setValue(parseInt(key)) + // Update the value locally but don't save it yet + $focusedCellAPI.setValue(parseInt(key), { save: false }) $focusedCellAPI.focus() } else if ( ["string", "barcodeqr", "longform"].includes(type) && (keyCodeIsLetter(keyCode) || keyCodeIsNumber(keyCode)) ) { - $focusedCellAPI.setValue(key) + // Update the value locally but don't save it yet + $focusedCellAPI.setValue(key, { save: false }) $focusedCellAPI.focus() } } diff --git a/packages/frontend-core/src/components/grid/stores/rows.js b/packages/frontend-core/src/components/grid/stores/rows.js index df881eefdd..f595276e73 100644 --- a/packages/frontend-core/src/components/grid/stores/rows.js +++ b/packages/frontend-core/src/components/grid/stores/rows.js @@ -311,7 +311,7 @@ export const createActions = context => { } // Patches a row with some changes - const updateRow = async (rowId, changes) => { + const updateRow = async (rowId, changes, options = { save: true }) => { const $rows = get(rows) const $rowLookupMap = get(rowLookupMap) const index = $rowLookupMap[rowId] @@ -341,6 +341,11 @@ export const createActions = context => { }, })) + // Stop here if we don't want to persist the change + if (!options?.save) { + return + } + // Save change try { inProgressChanges.update(state => ({ @@ -378,8 +383,8 @@ export const createActions = context => { } // Updates a value of a row - const updateValue = async (rowId, column, value) => { - return await updateRow(rowId, { [column]: value }) + const updateValue = async ({ rowId, column, value, save = true }) => { + return await updateRow(rowId, { [column]: value }, { save }) } // Deletes an array of rows