diff --git a/packages/frontend-core/src/components/sheet/AddRowButton.svelte b/packages/frontend-core/src/components/sheet/AddRowButton.svelte index 25a721e8f1..aa3dd407b1 100644 --- a/packages/frontend-core/src/components/sheet/AddRowButton.svelte +++ b/packages/frontend-core/src/components/sheet/AddRowButton.svelte @@ -2,11 +2,16 @@ import { Icon } from "@budibase/bbui" import { getContext } from "svelte" - const { dispatch, columns } = getContext("sheet") + const { dispatch, columns, ui } = getContext("sheet") + + const addRow = () => { + ui.actions.blur() + dispatch("add-row") + } {#if $columns.length} -
dispatch("add-row")}> +
{/if} diff --git a/packages/frontend-core/src/components/sheet/DeleteButton.svelte b/packages/frontend-core/src/components/sheet/DeleteButton.svelte index 2be379e21b..a5146b0ecd 100644 --- a/packages/frontend-core/src/components/sheet/DeleteButton.svelte +++ b/packages/frontend-core/src/components/sheet/DeleteButton.svelte @@ -31,8 +31,8 @@ {#if selectedRowCount} -
- +
+ Delete {selectedRowCount} row{selectedRowCount === 1 ? "" : "s"}
diff --git a/packages/frontend-core/src/components/sheet/HeaderRow.svelte b/packages/frontend-core/src/components/sheet/HeaderRow.svelte index ad33e9945c..bcd1393f73 100644 --- a/packages/frontend-core/src/components/sheet/HeaderRow.svelte +++ b/packages/frontend-core/src/components/sheet/HeaderRow.svelte @@ -4,7 +4,12 @@ import HeaderCell from "./cells/HeaderCell.svelte" import { Icon } from "@budibase/bbui" - const { renderedColumns, dispatch, config } = getContext("sheet") + const { renderedColumns, dispatch, config, ui } = getContext("sheet") + + const addColumn = () => { + ui.actions.blur() + dispatch("add-column") + }
@@ -16,7 +21,7 @@
{#if $config.allowAddColumns} -
dispatch("add-column")}> +
{/if} diff --git a/packages/frontend-core/src/components/sheet/KeyboardManager.svelte b/packages/frontend-core/src/components/sheet/KeyboardManager.svelte index 5254928004..bb3e9410e4 100644 --- a/packages/frontend-core/src/components/sheet/KeyboardManager.svelte +++ b/packages/frontend-core/src/components/sheet/KeyboardManager.svelte @@ -1,10 +1,26 @@ + + selectedCellId.set(cellId)} + on:contextmenu={e => menu.actions.open(cellId, e)} + width={column.width} +> + rows.actions.updateRow(row._id, column.name, val)} + readonly={column.schema.autocolumn} + /> + \ No newline at end of file diff --git a/packages/frontend-core/src/components/sheet/cells/HeaderCell.svelte b/packages/frontend-core/src/components/sheet/cells/HeaderCell.svelte index 6957f391df..155a287df2 100644 --- a/packages/frontend-core/src/components/sheet/cells/HeaderCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/HeaderCell.svelte @@ -17,6 +17,7 @@ renderedColumns, dispatch, config, + ui } = getContext("sheet") let anchor @@ -48,6 +49,7 @@ const onContextMenu = e => { e.preventDefault() + ui.actions.blur() open = !open } @@ -81,7 +83,7 @@
import OptionsCell from "./OptionsCell.svelte" + + export let api - + diff --git a/packages/frontend-core/src/components/sheet/cells/NumberCell.svelte b/packages/frontend-core/src/components/sheet/cells/NumberCell.svelte index 2e0ef27c39..ac5f8d8cb7 100644 --- a/packages/frontend-core/src/components/sheet/cells/NumberCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/NumberCell.svelte @@ -1,5 +1,7 @@ - + diff --git a/packages/frontend-core/src/components/sheet/cells/OptionsCell.svelte b/packages/frontend-core/src/components/sheet/cells/OptionsCell.svelte index e8117312dd..1c96eab83c 100644 --- a/packages/frontend-core/src/components/sheet/cells/OptionsCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/OptionsCell.svelte @@ -1,6 +1,7 @@ -
-
+
+
{#each values as val} {@const color = getOptionColor(val)} {#if color} @@ -74,11 +97,15 @@
{/if} - {#if open} + {#if isOpen}
e.stopPropagation()}> - {#each values as val} + {#each values as val, idx} {@const color = getOptionColor(val)} -
toggleOption(val)}> +
toggleOption(val)} + class:focused={focusedOptionIdx === idx} + >
{val}
@@ -88,8 +115,12 @@ />
{/each} - {#each unselectedOptions as option} -
toggleOption(option)}> + {#each unselectedOptions as option, idx} +
toggleOption(option)} + class:focused={focusedOptionIdx === values.length + idx} + >
{option}
@@ -177,7 +208,8 @@ .option:first-child { flex: 0 0 calc(var(--cell-height) - 1px); } - .option:hover { + .option:hover, + .option.focused { background-color: var(--spectrum-global-color-gray-200); } diff --git a/packages/frontend-core/src/components/sheet/cells/TextCell.svelte b/packages/frontend-core/src/components/sheet/cells/TextCell.svelte index 40d15818f8..ed26dffceb 100644 --- a/packages/frontend-core/src/components/sheet/cells/TextCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/TextCell.svelte @@ -1,19 +1,52 @@ {#if editable} - + (focused = true)} + on:blur={() => (focused = false)} + {type} + value={value || ""} + on:change={handleChange} + /> {:else}
{value || ""} diff --git a/packages/frontend-core/src/components/sheet/stores/reorder.js b/packages/frontend-core/src/components/sheet/stores/reorder.js index 243ab68e3c..2200707682 100644 --- a/packages/frontend-core/src/components/sheet/stores/reorder.js +++ b/packages/frontend-core/src/components/sheet/stores/reorder.js @@ -1,7 +1,7 @@ import { get, writable, derived } from "svelte/store" export const createReorderStores = context => { - const { columns, scroll, bounds, stickyColumn } = context + const { columns, scroll, bounds, stickyColumn, ui } = context const reorderInitialState = { sourceColumn: null, targetColumn: null, @@ -23,6 +23,7 @@ export const createReorderStores = context => { const $bounds = get(bounds) const $scroll = get(scroll) const $stickyColumn = get(stickyColumn) + ui.actions.blur() // Generate new breakpoints for the current columns let breakpoints = $columns.map(col => ({ diff --git a/packages/frontend-core/src/components/sheet/stores/resize.js b/packages/frontend-core/src/components/sheet/stores/resize.js index 56a63f7bb3..50d544a1ee 100644 --- a/packages/frontend-core/src/components/sheet/stores/resize.js +++ b/packages/frontend-core/src/components/sheet/stores/resize.js @@ -4,7 +4,7 @@ import { DefaultColumnWidth } from "./columns" export const MinColumnWidth = 100 export const createResizeStores = context => { - const { columns, stickyColumn } = context + const { columns, stickyColumn, ui } = context const initialState = { initialMouseX: null, initialWidth: null, @@ -20,6 +20,7 @@ export const createResizeStores = context => { const startResizing = (column, e) => { // Prevent propagation to stop reordering triggering e.stopPropagation() + ui.actions.blur() // Find and cache index let columnIdx = get(columns).findIndex(col => col.name === column.name) diff --git a/packages/frontend-core/src/components/sheet/stores/ui.js b/packages/frontend-core/src/components/sheet/stores/ui.js index fb1bf213ec..cf6f6ee4c3 100644 --- a/packages/frontend-core/src/components/sheet/stores/ui.js +++ b/packages/frontend-core/src/components/sheet/stores/ui.js @@ -72,6 +72,13 @@ export const createUIStores = context => { hoveredRowId.set(null) } + // Remove selected cell API when no selected cell is present + selectedCellId.subscribe(cell => { + if (!cell && get(selectedCellAPI)) { + selectedCellAPI.set(null) + } + }) + return { selectedCellId, selectedRows,