diff --git a/packages/iris-grid/src/IrisGrid.tsx b/packages/iris-grid/src/IrisGrid.tsx index b91d8e544..408ed2ab7 100644 --- a/packages/iris-grid/src/IrisGrid.tsx +++ b/packages/iris-grid/src/IrisGrid.tsx @@ -3723,13 +3723,15 @@ class IrisGrid extends Component { */ deleteRanges(ranges: readonly GridRange[]): void { const { model } = this.props; - if (isDeletableGridModel(model) && model.isDeletable) { - this.pending.add(model.delete(ranges)).catch(e => { - if (!PromiseUtils.isCanceled(e)) { - log.error('Unable to delete ranges', ranges, e); - } - }); + if (!isDeletableGridModel(model) || !model.isDeletable) { + throw new Error('Model does not support deleting ranges'); } + + this.pending.add(model.delete(ranges)).catch(e => { + if (!PromiseUtils.isCanceled(e)) { + log.error('Unable to delete ranges', ranges, e); + } + }); } resetColumnSelection(): void { diff --git a/packages/iris-grid/src/IrisGridTableModelTemplate.ts b/packages/iris-grid/src/IrisGridTableModelTemplate.ts index 1ea7f7acc..11e2ebf16 100644 --- a/packages/iris-grid/src/IrisGridTableModelTemplate.ts +++ b/packages/iris-grid/src/IrisGridTableModelTemplate.ts @@ -3,6 +3,8 @@ import memoize from 'memoize-one'; import throttle from 'lodash.throttle'; import { + DeletableGridModel, + EditableGridModel, EditOperation, GridRange, GridUtils, @@ -52,9 +54,12 @@ export function isIrisGridTableModelTemplate( */ class IrisGridTableModelTemplate< - T extends DhType.Table | DhType.TreeTable = DhType.Table, - R extends UIRow = UIRow, -> extends IrisGridModel { + T extends DhType.Table | DhType.TreeTable = DhType.Table, + R extends UIRow = UIRow, + > + extends IrisGridModel + implements DeletableGridModel, EditableGridModel +{ static ROW_BUFFER_PAGES = 1; seekRow( @@ -1722,8 +1727,11 @@ class IrisGridTableModelTemplate< * @param value The values to set * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error */ - async setValueForRanges(ranges: GridRange[], text: string): Promise { - if (!this.isEditableRanges(ranges)) { + async setValueForRanges( + ranges: readonly GridRange[], + text: string + ): Promise { + if (!this.isEditableRanges(ranges as GridRange[])) { throw new Error(`Uneditable ranges ${ranges}`); } @@ -1860,7 +1868,7 @@ class IrisGridTableModelTemplate< } } - async setValues(edits: EditOperation[] = []): Promise { + async setValues(edits: readonly EditOperation[] = []): Promise { log.debug('setValues(', edits, ')'); if ( !edits.every(edit => @@ -2054,11 +2062,11 @@ class IrisGridTableModelTemplate< } } - editValueForCell(x: ModelIndex, y: ModelIndex): string | null | undefined { - return this.textValueForCell(x, y); + editValueForCell(column: ModelIndex, row: ModelIndex): string { + return this.textValueForCell(column, row) as string; } - async delete(ranges: GridRange[]): Promise { + async delete(ranges: readonly GridRange[]): Promise { throw new Error('Delete not implemented'); }