@@ -124,6 +124,7 @@ class Browser extends DashboardView {
124
124
this . onDialogToggle = this . onDialogToggle . bind ( this ) ;
125
125
this . addEditCloneRows = this . addEditCloneRows . bind ( this ) ;
126
126
this . abortAddRow = this . abortAddRow . bind ( this ) ;
127
+ this . saveNewRow = this . saveNewRow . bind ( this ) ;
127
128
}
128
129
129
130
componentWillMount ( ) {
@@ -305,6 +306,66 @@ class Browser extends DashboardView {
305
306
}
306
307
}
307
308
309
+ saveNewRow ( ) {
310
+ const obj = this . state . newObject ;
311
+ if ( ! obj ) {
312
+ return ;
313
+ }
314
+
315
+ obj . save ( null , { useMasterKey : true } ) . then (
316
+ objectSaved => {
317
+ let msg = objectSaved . className + ' with id \'' + objectSaved . id + '\' created' ;
318
+ this . showNote ( msg , false ) ;
319
+
320
+ const state = { data : this . state . data } ;
321
+ const relation = this . state . relation ;
322
+ if ( relation ) {
323
+ const parent = relation . parent ;
324
+ const parentRelation = parent . relation ( relation . key ) ;
325
+ parentRelation . add ( obj ) ;
326
+ const targetClassName = relation . targetClassName ;
327
+ parent . save ( null , { useMasterKey : true } ) . then (
328
+ ( ) => {
329
+ this . setState ( {
330
+ newObject : null ,
331
+ data : [ obj , ...this . state . data ] ,
332
+ relationCount : this . state . relationCount + 1 ,
333
+ counts : {
334
+ ...this . state . counts ,
335
+ [ targetClassName ] : this . state . counts [ targetClassName ] + 1
336
+ }
337
+ } ) ;
338
+ } ,
339
+ error => {
340
+ let msg = typeof error === "string" ? error : error . message ;
341
+ if ( msg ) {
342
+ msg = msg [ 0 ] . toUpperCase ( ) + msg . substr ( 1 ) ;
343
+ }
344
+ obj . set ( attr , prev ) ;
345
+ this . setState ( { data : this . state . data } ) ;
346
+ this . showNote ( msg , true ) ;
347
+ }
348
+ ) ;
349
+ } else {
350
+ state . newObject = null ;
351
+ if ( this . props . params . className === obj . className ) {
352
+ this . state . data . unshift ( obj ) ;
353
+ }
354
+ this . state . counts [ obj . className ] += 1 ;
355
+ }
356
+
357
+ this . setState ( state ) ;
358
+ } ,
359
+ error => {
360
+ let msg = typeof error === "string" ? error : error . message ;
361
+ if ( msg ) {
362
+ msg = msg [ 0 ] . toUpperCase ( ) + msg . substr ( 1 ) ;
363
+ }
364
+ this . showNote ( msg , true ) ;
365
+ }
366
+ ) ;
367
+ }
368
+
308
369
addRowWithModal ( ) {
309
370
this . addRow ( ) ;
310
371
this . selectRow ( undefined , true ) ;
@@ -372,6 +433,14 @@ class Browser extends DashboardView {
372
433
query . ascending ( field )
373
434
}
374
435
436
+ if ( field !== 'objectId' ) {
437
+ if ( sortDir === '-' ) {
438
+ query . addDescending ( 'objectId' ) ;
439
+ } else {
440
+ query . addAscending ( 'objectId' ) ;
441
+ }
442
+ }
443
+
375
444
query . limit ( MAX_ROWS_FETCHED ) ;
376
445
this . excludeFields ( query , source ) ;
377
446
@@ -447,37 +516,38 @@ class Browser extends DashboardView {
447
516
let className = this . props . params . className ;
448
517
let source = this . state . relation || className ;
449
518
let query = queryFromFilters ( source , this . state . filters ) ;
450
- if ( this . state . ordering !== '-createdAt' ) {
519
+ let field = this . state . ordering ;
520
+ let sortDir = field [ 0 ] === '-' ? '-' : '+' ;
521
+ field = field [ 0 ] === '-' ? field . slice ( 1 ) : field ;
522
+ if ( this . state . ordering !== '-objectId' && this . state . ordering !== 'objectId' ) {
451
523
// Construct complex pagination query
452
524
let equalityQuery = queryFromFilters ( source , this . state . filters ) ;
453
- let field = this . state . ordering ;
454
- let ascending = true ;
455
525
let comp = this . state . data [ this . state . data . length - 1 ] . get ( field ) ;
456
- if ( field === 'objectId' || field === '-objectId' ) {
457
- comp = this . state . data [ this . state . data . length - 1 ] . id ;
458
- }
459
- if ( field [ 0 ] === '-' ) {
460
- field = field . substr ( 1 ) ;
526
+
527
+ if ( sortDir === '-' ) {
461
528
query . lessThan ( field , comp ) ;
462
- ascending = false ;
529
+ equalityQuery . lessThan ( 'objectId' , this . state . data [ this . state . data . length - 1 ] . id ) ;
463
530
} else {
464
531
query . greaterThan ( field , comp ) ;
532
+ equalityQuery . greaterThan ( 'objectId' , this . state . data [ this . state . data . length - 1 ] . id ) ;
465
533
}
466
- if ( field === 'createdAt' ) {
467
- equalityQuery . greaterThan ( 'createdAt' , this . state . data [ this . state . data . length - 1 ] . get ( 'createdAt' ) ) ;
468
- } else {
469
- equalityQuery . lessThan ( 'createdAt' , this . state . data [ this . state . data . length - 1 ] . get ( 'createdAt' ) ) ;
470
- equalityQuery . equalTo ( field , comp ) ;
471
- }
534
+ equalityQuery . equalTo ( field , comp ) ;
472
535
query = Parse . Query . or ( query , equalityQuery ) ;
473
- if ( ascending ) {
474
- query . ascending ( this . state . ordering ) ;
536
+ if ( sortDir === '-' ) {
537
+ query . descending ( field ) ;
538
+ query . addDescending ( 'objectId' ) ;
475
539
} else {
476
- query . descending ( this . state . ordering . substr ( 1 ) ) ;
540
+ query . ascending ( field ) ;
541
+ query . addAscending ( 'objectId' ) ;
477
542
}
478
543
} else {
479
- query . lessThan ( 'createdAt' , this . state . data [ this . state . data . length - 1 ] . get ( 'createdAt' ) ) ;
480
- query . addDescending ( 'createdAt' ) ;
544
+ if ( sortDir === '-' ) {
545
+ query . lessThan ( 'objectId' , this . state . data [ this . state . data . length - 1 ] . id ) ;
546
+ query . addDescending ( 'objectId' ) ;
547
+ } else {
548
+ query . greaterThan ( 'objectId' , this . state . data [ this . state . data . length - 1 ] . id ) ;
549
+ query . addAscending ( 'objectId' ) ;
550
+ }
481
551
}
482
552
query . limit ( MAX_ROWS_FETCHED ) ;
483
553
this . excludeFields ( query , source ) ;
@@ -577,6 +647,12 @@ class Browser extends DashboardView {
577
647
} else {
578
648
obj . set ( attr , value ) ;
579
649
}
650
+ if ( isNewObject ) {
651
+ this . setState ( {
652
+ isNewObject : obj
653
+ } ) ;
654
+ return ;
655
+ }
580
656
obj . save ( null , { useMasterKey : true } ) . then ( ( objectSaved ) => {
581
657
const createdOrUpdated = isNewObject || isEditCloneObj ? 'created' : 'updated' ;
582
658
let msg = objectSaved . className + ' with id \'' + objectSaved . id + '\' ' + createdOrUpdated ;
@@ -1065,6 +1141,7 @@ class Browser extends DashboardView {
1065
1141
onCloneSelectedRows = { this . showCloneSelectedRowsDialog }
1066
1142
onEditSelectedRow = { this . showEditRowDialog }
1067
1143
onEditPermissions = { this . onDialogToggle }
1144
+ onSaveNewRow = { this . saveNewRow }
1068
1145
onAbortAddRow = { this . abortAddRow }
1069
1146
1070
1147
columns = { columns }
@@ -1085,6 +1162,7 @@ class Browser extends DashboardView {
1085
1162
setRelation = { this . setRelation }
1086
1163
onAddColumn = { this . showAddColumn }
1087
1164
onAddRow = { this . addRow }
1165
+ onAbortAddRow = { this . abortAddRow }
1088
1166
onAddRowWithModal = { this . addRowWithModal }
1089
1167
onAddClass = { this . showCreateClass }
1090
1168
showNote = { this . showNote } />
0 commit comments