From fafb8ec9384d340054060c1d81f4d0f6f9abb4e5 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 24 Nov 2022 20:06:31 +0000 Subject: [PATCH] Add row deletion and fix sizing --- .../app/spreadsheet/OptionsCell.svelte | 3 +- .../app/spreadsheet/Spreadsheet.svelte | 90 +++++++++++++------ packages/client/src/sdk.js | 2 + 3 files changed, 64 insertions(+), 31 deletions(-) diff --git a/packages/client/src/components/app/spreadsheet/OptionsCell.svelte b/packages/client/src/components/app/spreadsheet/OptionsCell.svelte index 859a02461f..eda93cc9c8 100644 --- a/packages/client/src/components/app/spreadsheet/OptionsCell.svelte +++ b/packages/client/src/components/app/spreadsheet/OptionsCell.svelte @@ -115,8 +115,7 @@ justify-content: flex-start; align-items: stretch; box-shadow: 0 0 8px 4px rgba(0, 0, 0, 0.15); - border-radius: 4px; - max-height: 192px; + max-height: 191px; overflow-y: auto; } .option { diff --git a/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte b/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte index 7e5813b301..06db8e7f9c 100644 --- a/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte +++ b/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte @@ -11,7 +11,8 @@ export let sortColumn export let sortOrder - const { styleable, API } = getContext("sdk") + const { styleable, API, confirmationStore, notificationStore } = + getContext("sdk") const component = getContext("component") const limit = 100 const defaultWidth = 200 @@ -121,6 +122,47 @@ await fetch.refresh() delete changeCache[rowId] } + + const deleteRows = () => { + // Fetch full row objects to be deleted + const rows = Object.entries(selectedRows) + .map(entry => { + if (entry[1] === true) { + return $fetch.rows.find(x => x._id === entry[0]) + } else { + return null + } + }) + .filter(x => x != null) + + // Deletion callback when confirmed + const performDeletion = async () => { + await API.deleteRows({ + tableId: table.tableId, + rows, + }) + await fetch.refresh() + notificationStore.actions.success( + `${selectedRowCount} row${ + selectedRowCount === 1 ? "" : "s" + } deleted successfully` + ) + + // Refresh state + selectedCell = null + hoveredRow = null + selectedRows = {} + } + + // Show confirmation + confirmationStore.actions.showConfirmation( + "Delete rows", + `Are you sure you want to delete ${selectedRowCount} row${ + selectedRowCount === 1 ? "" : "s" + }?`, + performDeletion + ) + }
@@ -133,12 +175,14 @@ Hide fields
Sales Records
-
@@ -221,13 +265,6 @@ /> {/each}
- @@ -247,9 +284,9 @@ justify-content: flex-start; align-items: stretch; overflow: auto; - height: 800px; + max-height: 800px; position: relative; - padding-bottom: 100px; + padding-bottom: 80px; padding-right: 100px; } @@ -277,11 +314,18 @@ align-items: center; gap: 4px; } - .search { + .delete { display: flex; flex-direction: row; justify-content: flex-end; align-items: center; + color: var(--spectrum-global-color-gray-700); + } + .delete :global(.spectrum-ActionButton) { + color: var(--spectrum-global-color-red-600); + } + .delete :global(.spectrum-Icon) { + fill: var(--spectrum-global-color-red-600); } .cell { @@ -360,16 +404,4 @@ input[type="checkbox"] { margin: 0; } - - .footer { - height: 32px; - width: 100%; - border-top: 1px solid var(--spectrum-global-color-gray-400); - padding: 0 12px; - display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: center; - background: var(--spectrum-global-color-gray-50); - } diff --git a/packages/client/src/sdk.js b/packages/client/src/sdk.js index 264cc85626..c9ff1eba36 100644 --- a/packages/client/src/sdk.js +++ b/packages/client/src/sdk.js @@ -12,6 +12,7 @@ import { environmentStore, sidePanelStore, dndIsDragging, + confirmationStore, } from "stores" import { styleable } from "utils/styleable" import { linkable } from "utils/linkable" @@ -35,6 +36,7 @@ export default { sidePanelStore, dndIsDragging, currentRole, + confirmationStore, styleable, linkable, getAction,