import { RevBehavioredColumnSettings, RevBehavioredGridSettings, RevCellEditor, RevClientGrid, RevFocus, RevViewCell } from '../../client'; import { RevDataServer, RevSchemaField } from '../../common'; /** @public */ export abstract class RevStandardCellEditor< BGS extends RevBehavioredGridSettings, BCS extends RevBehavioredColumnSettings, SF extends RevSchemaField > implements RevCellEditor { cellClosedEventer: RevCellEditor.CellClosedEventer; /** @internal */ private _readonly: boolean; constructor( protected readonly _grid: RevClientGrid, protected readonly _dataServer: RevDataServer, ) { } get readonly() { return this._readonly; } set readonly(value: boolean) { this.setReadonly(value); // defer this to a method which can be safely overridden (cannot override a getter or setter in Javascript without overriding both) } protected setReadonly(value: boolean) { // make sure this is not a setter as overrided and JavaScript cannot override setters only this._readonly = value; } protected isToggleKey(key: string) { return (key as RevFocus.ActionKeyboardKey) === RevFocus.ActionKeyboardKey.enter || key === ' '; } protected tryToggleBoolenValue(field: SF, dataServerRowIndex: number) { const dataServer = this._dataServer; if (dataServer.getEditValue === undefined || dataServer.setEditValue === undefined) { return false; } else { const value = dataServer.getEditValue(field, dataServerRowIndex); let newValue: boolean; if (value === undefined) { newValue = true; } else { if (typeof value !== 'boolean') { newValue = true; } else { newValue = !value; } } dataServer.setEditValue(field, dataServerRowIndex, newValue); return true; } } abstract tryOpenCell(viewCell: RevViewCell, openingKeyDownEvent: KeyboardEvent | undefined, openingClickEvent: MouseEvent | undefined): boolean; abstract closeCell(field: SF, dataServerRowIndex: number, cancel: boolean): void; abstract processGridKeyDownEvent(event: KeyboardEvent, fromEditor: boolean, field: SF, dataServerRowIndex: number): boolean; }