@@ -5,6 +5,7 @@ import ComponentCell from './ComponentCell';
55
66const TAB_KEY = 9 ;
77const ENTER_KEY = 13 ;
8+ const ESCAPE_KEY = 27 ;
89const LEFT_KEY = 37 ;
910const UP_KEY = 38 ;
1011const RIGHT_KEY = 39 ;
@@ -46,6 +47,7 @@ export default class DataSheet extends PureComponent {
4647 selecting : false ,
4748 forceEdit : false ,
4849 editing : { } ,
50+ reverting : { } ,
4951 clear : { }
5052 } ;
5153 this . state = this . defaultState ;
@@ -96,7 +98,7 @@ export default class DataSheet extends PureComponent {
9698 handlePaste ( e ) {
9799 if ( isEmpty ( this . state . editing ) ) {
98100 const start = this . state . start ;
99-
101+
100102 const pastedMap = [ ] ;
101103 const pasteData = e . clipboardData
102104 . getData ( 'text/plain' )
@@ -113,7 +115,7 @@ export default class DataSheet extends PureComponent {
113115 this . onChange ( start . i + i , start . j + j , pastedData ) ;
114116 end = { i : start . i + i , j : start . j + j } ;
115117 }
116-
118+
117119 } ) ;
118120 pastedMap . push ( rowData ) ;
119121 } ) ;
@@ -176,6 +178,7 @@ export default class DataSheet extends PureComponent {
176178 const ctrlKeyPressed = e . ctrlKey || e . metaKey ;
177179 const deleteKeysPressed = ( e . keyCode === DELETE_KEY || e . keyCode === BACKSPACE_KEY ) ;
178180 const enterKeyPressed = e . keyCode === ENTER_KEY ;
181+ const escapeKeyPressed = e . keyCode === ESCAPE_KEY ;
179182 const numbersPressed = ( e . keyCode >= 48 && e . keyCode <= 57 ) ;
180183 const lettersPressed = ( e . keyCode >= 65 && e . keyCode <= 90 ) ;
181184 const numPadKeysPressed = ( e . keyCode >= 96 && e . keyCode <= 105 ) ;
@@ -200,9 +203,11 @@ export default class DataSheet extends PureComponent {
200203 ) ;
201204 e . preventDefault ( ) ;
202205 } else if ( enterKeyPressed && isEditing ) {
203- this . setState ( { editing : { } } ) ;
206+ this . setState ( { editing : { } , reverting : { } } ) ;
207+ } else if ( escapeKeyPressed && isEditing ) {
208+ this . setState ( { editing : { } , reverting : editing } ) ;
204209 } else if ( enterKeyPressed && ! isEditing && ! cell . readOnly ) {
205- this . setState ( { editing : start , clear : { } , forceEdit : true } ) ;
210+ this . setState ( { editing : start , clear : { } , reverting : { } , forceEdit : true } ) ;
206211 } else if ( numbersPressed
207212 || numPadKeysPressed
208213 || lettersPressed
@@ -214,6 +219,7 @@ export default class DataSheet extends PureComponent {
214219 this . setState ( {
215220 editing : start ,
216221 clear : start ,
222+ reverting : { } ,
217223 forceEdit : false
218224 } ) ;
219225 }
@@ -288,6 +294,7 @@ export default class DataSheet extends PureComponent {
288294 } ;
289295
290296 const isEditing = ( i , j ) => this . state . editing . i === i && this . state . editing . j === j ;
297+ const isReverting = ( i , j ) => this . state . reverting . i === i && this . state . reverting . j === j ;
291298 const shouldClear = ( i , j ) => this . state . clear . i === i && this . state . clear . j === j ;
292299
293300 return < table ref = { ( r ) => this . dgDom = r } className = { 'data-grid ' + ( className ? className : '' ) } >
@@ -305,7 +312,9 @@ export default class DataSheet extends PureComponent {
305312 onMouseDown : cell . disableEvents ? nullFtn : this . onMouseDown ,
306313 onDoubleClick : cell . disableEvents ? nullFtn : this . onDoubleClick ,
307314 onMouseOver : cell . disableEvents ? nullFtn : this . onMouseOver ,
308- onContextMenu : cell . disableEvents ? nullFtn : this . onContextMenu , editing : isEditing ( i , j ) ,
315+ onContextMenu : cell . disableEvents ? nullFtn : this . onContextMenu ,
316+ editing : isEditing ( i , j ) ,
317+ reverting : isReverting ( i , j ) ,
309318 colSpan : cell . colSpan ,
310319 value : valueRenderer ( cell ) ,
311320 } ;
0 commit comments