Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions mathesar_ui/src/components/cell-fabric/CellFabric.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
| ((recordId: string, recordSummary: string) => void)
| undefined = undefined;
export let isActive = false;
export let isEditMode = false;
export let disabled = false;
export let showAsSkeleton = false;
export let horizontalAlignment: HorizontalAlignment | undefined = undefined;
Expand Down Expand Up @@ -47,6 +48,7 @@
{...props}
{columnFabric}
{isActive}
{isEditMode}
{disabled}
{isIndependentOfSheet}
{horizontalAlignment}
Expand All @@ -61,6 +63,8 @@
bind:value
on:movementKeyDown
on:update
on:enterEditMode
on:exitEditMode
/>

<div class="loader">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
export let isActive: Props['isActive'];
export let value: Props['value'];
export let disabled: Props['disabled'];
export let isEditMode = false;
export let multiLineTruncate = false;
export let formatValue: CellValueFormatter<Value> | undefined = undefined;
export let horizontalAlignment: HorizontalAlignment | undefined = undefined;
Expand All @@ -34,7 +35,6 @@
export let useTabularNumbers = false;

let cellRef: HTMLElement;
let isEditMode = false;
let lastSavedValue: Value | undefined | null = undefined;

$: formattedValue = formatValue?.(value) ?? value;
Expand All @@ -59,12 +59,12 @@

function setModeToEdit() {
if (!disabled) {
isEditMode = true;
dispatch('enterEditMode');
}
}

function resetEditMode() {
isEditMode = false;
dispatch('exitEditMode');
}

function revertValue() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
export let isActive: $$Props['isActive'];
export let value: $$Props['value'];
export let disabled: $$Props['disabled'];
export let isEditMode = false;
export let isIndependentOfSheet: $$Props['isIndependentOfSheet'];
export let showTruncationPopover: $$Props['showTruncationPopover'] = false;
export let type: $$Props['type'];
Expand All @@ -22,6 +23,7 @@
<SteppedInputCell
bind:value
{isActive}
{isEditMode}
{disabled}
highlightSubstringMatches={false}
{isIndependentOfSheet}
Expand All @@ -33,6 +35,8 @@
on:movementKeyDown
on:mouseenter
on:update
on:enterEditMode
on:exitEditMode
>
<DateTimeInput
focusOnMount={true}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
export let isActive: $$Props['isActive'];
export let value: $$Props['value'];
export let disabled: $$Props['disabled'];
export let isEditMode = false;
export let isIndependentOfSheet: $$Props['isIndependentOfSheet'];
export let showTruncationPopover: $$Props['showTruncationPopover'] = false;
export let formatter: $$Props['formatter'];
Expand All @@ -19,6 +20,7 @@
<SteppedInputCell
bind:value
{isActive}
{isEditMode}
{disabled}
{isIndependentOfSheet}
{showTruncationPopover}
Expand All @@ -30,6 +32,8 @@
on:movementKeyDown
on:mouseenter
on:update
on:enterEditMode
on:exitEditMode
>
<FormattedInput
focusOnMount={true}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
export let isActive: $$Props['isActive'];
export let value: $$Props['value'];
export let disabled: $$Props['disabled'];
export let isEditMode = false;
export let searchValue: $$Props['searchValue'] = undefined;
export let formatterOptions: $$Props['formatterOptions'];
export let formatForDisplay: $$Props['formatForDisplay'];
Expand All @@ -19,6 +20,7 @@
<SteppedInputCell
bind:value
{isActive}
{isEditMode}
{disabled}
{searchValue}
{isIndependentOfSheet}
Expand All @@ -31,6 +33,8 @@
on:movementKeyDown
on:mouseenter
on:update
on:enterEditMode
on:exitEditMode
>
<MoneyCellInput
focusOnMount={true}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
export let isActive: $$Props['isActive'];
export let value: $$Props['value'];
export let disabled: $$Props['disabled'];
export let isEditMode = false;
export let searchValue: $$Props['searchValue'] = undefined;
export let formatterOptions: $$Props['formatterOptions'];
export let horizontalAlignment: HorizontalAlignment = 'right';
Expand All @@ -23,6 +24,7 @@
<SteppedInputCell
bind:value
{isActive}
{isEditMode}
{disabled}
{isIndependentOfSheet}
{showTruncationPopover}
Expand All @@ -35,6 +37,8 @@
on:movementKeyDown
on:mouseenter
on:update
on:enterEditMode
on:exitEditMode
>
<NumberCellInput
focusOnMount={true}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
export let isActive: $$Props['isActive'];
export let value: $$Props['value'] = undefined;
export let disabled: $$Props['disabled'];
export let isEditMode = false;
export let searchValue: $$Props['searchValue'] = undefined;
export let isIndependentOfSheet: $$Props['isIndependentOfSheet'];
export let showTruncationPopover: $$Props['showTruncationPopover'] = false;
Expand All @@ -33,6 +34,7 @@
<SteppedInputCell
bind:value
{isActive}
{isEditMode}
{disabled}
{searchValue}
{isIndependentOfSheet}
Expand All @@ -43,6 +45,8 @@
on:movementKeyDown
on:mouseenter
on:update
on:enterEditMode
on:exitEditMode
>
<TextArea
focusOnMount={true}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
export let isActive: $$Props['isActive'];
export let value: $$Props['value'] = undefined;
export let disabled: $$Props['disabled'];
export let isEditMode = false;
export let searchValue: $$Props['searchValue'] = undefined;
export let isIndependentOfSheet: $$Props['isIndependentOfSheet'];
export let showTruncationPopover: $$Props['showTruncationPopover'] = false;
Expand All @@ -20,6 +21,7 @@
<SteppedInputCell
bind:value
{isActive}
{isEditMode}
{disabled}
{searchValue}
{isIndependentOfSheet}
Expand All @@ -29,6 +31,8 @@
on:movementKeyDown
on:mouseenter
on:update
on:enterEditMode
on:exitEditMode
>
<TextInput
focusOnMount={true}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export type CellValueFormatter<T> = (
export interface CellTypeProps<Value> {
value: Value | null | undefined;
isActive: boolean;
isEditMode?: boolean;
disabled: boolean;
searchValue?: unknown;
isProcessing: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
export let isActive: $$Props['isActive'];
export let value: $$Props['value'] = undefined;
export let disabled: $$Props['disabled'];
export let isEditMode = false;
export let searchValue: $$Props['searchValue'] = undefined;
export let isIndependentOfSheet: $$Props['isIndependentOfSheet'];
export let showTruncationPopover: $$Props['showTruncationPopover'] = false;
Expand All @@ -23,6 +24,7 @@
<SteppedInputCell
bind:value
{isActive}
{isEditMode}
{disabled}
{searchValue}
{isIndependentOfSheet}
Expand All @@ -32,6 +34,8 @@
on:movementKeyDown
on:mouseenter
on:update
on:enterEditMode
on:exitEditMode
>
<span slot="content" let:matchParts>
<CellValue {value}>
Expand Down
5 changes: 5 additions & 0 deletions mathesar_ui/src/components/sheet/Sheet.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,15 @@
));

const selectionInProgress = writable(false);
const editingCellId = writable<string | undefined>(undefined);
const stores = {
columnStyleMap: writable(columnStyleMap),
rowWidth: writable(rowWidth),
horizontalScrollOffset: writable(horizontalScrollOffset),
scrollOffset: writable(scrollOffset),
paddingRight: writable(paddingRight),
selectionInProgress,
editingCellId,
};

// Setting these values in stores for reactivity in context
Expand All @@ -97,6 +99,9 @@
setScrollOffset: (offset) => {
scrollOffset = offset;
},
setEditingCellId: (cellId) => {
editingCellId.set(cellId);
},
},
});

Expand Down
4 changes: 3 additions & 1 deletion mathesar_ui/src/components/sheet/utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { getContext, setContext } from 'svelte';
import type { Readable } from 'svelte/store';
import type { Readable, Writable } from 'svelte/store';

import {
DEFAULT_COLUMN_WIDTH_PX,
Expand All @@ -21,6 +21,7 @@ export interface SheetContextStores<SheetColumnIdentifierKey> {
scrollOffset: Readable<number>;
paddingRight: Readable<number>;
selectionInProgress: Readable<boolean>;
editingCellId: Writable<string | undefined>;
}

export interface SheetContext<SheetColumnIdentifierKey> {
Expand All @@ -34,6 +35,7 @@ export interface SheetContext<SheetColumnIdentifierKey> {
resetColumnWidth: (columnIdentifierKey: SheetColumnIdentifierKey) => void;
setHorizontalScrollOffset: (offset: number) => void;
setScrollOffset: (offset: number) => void;
setEditingCellId: (cellId: string | undefined) => void;
};
}

Expand Down
1 change: 1 addition & 0 deletions mathesar_ui/src/components/sheet/virtual-list/listUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ function getItemStyle(props: Props, index: number): Item['style'] {

function getItemsInfo(props: Props): ItemInfo {
const { itemKey, itemCount, isScrolling } = props;

const [startIndex, stopIndex] = getRangeToRender(props);
const items: Item[] = [];
if (itemCount > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@
itemSize={() => ROW_HEIGHT_PX}
let:items
>
{#each items as item (item.key)}
{#each items as item, i (i)}
{@const row = arrayIndex(rows, item.index)}
{@const rowSelectionId = (row && getRowSelectionId(row)) ?? ''}
{@const isSelected = $selection.rowIds.has(rowSelectionId)}
Expand Down
2 changes: 1 addition & 1 deletion mathesar_ui/src/systems/table-view/Body.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
let:api
>
<ScrollAndRowHeightHandler {api} />
{#each items as item (item.key)}
{#each items as item, i (i)}
{@const shouldRender = !(
isPlaceholderRecordRow($displayRowDescriptors[item.index].row) &&
!$canInsertRecords
Expand Down
15 changes: 15 additions & 0 deletions mathesar_ui/src/systems/table-view/row/RowCell.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import { makeCellId } from '@mathesar/components/sheet/cellIds';
import type SheetSelection from '@mathesar/components/sheet/selection/SheetSelection';
import { handleKeyboardEventOnCell } from '@mathesar/components/sheet/sheetKeyboardUtils';
import { getSheetContext } from '@mathesar/components/sheet/utils';
import type { RpcError } from '@mathesar/packages/json-rpc-client-builder';
import {
type CellKey,
Expand Down Expand Up @@ -42,6 +43,9 @@
export let value: unknown = undefined;
export let canUpdateRecords: boolean;

const { stores, api } = getSheetContext();
const { editingCellId } = stores;

$: effectiveProcessedColumn = isProvisionalRecordRow(row)
? processedColumn.withoutEnhancedPkCell()
: processedColumn;
Expand Down Expand Up @@ -100,6 +104,14 @@
await setValue(e.detail.value);
focus();
}

function handleEnterEditMode() {
api.setEditingCellId(cellId);
}

function handleExitEditMode() {
api.setEditingCellId(undefined);
}
</script>

<SheetDataCell
Expand All @@ -126,6 +138,7 @@
<CellFabric
columnFabric={effectiveProcessedColumn}
{isActive}
isEditMode={cellId === $editingCellId}
{value}
{isProcessing}
{canViewLinkedEntities}
Expand All @@ -149,6 +162,8 @@
on:movementKeyDown={({ detail }) =>
handleKeyboardEventOnCell(detail.originalEvent, selection)}
on:update={valueUpdated}
on:enterEditMode={handleEnterEditMode}
on:exitEditMode={handleExitEditMode}
horizontalAlignment={column.primary_key ? 'left' : undefined}
lightText={hasError || isProcessing}
/>
Expand Down
Loading