@@ -81,7 +81,7 @@ class Browser extends DashboardView {
81
81
isUnique : false ,
82
82
uniqueField : null ,
83
83
keepAddingCols : false ,
84
- markRequiredField : false ,
84
+ markRequiredFieldRow : 0 ,
85
85
requiredColumnFields : [ ]
86
86
} ;
87
87
@@ -387,15 +387,15 @@ class Browser extends DashboardView {
387
387
if ( ! obj . get ( name ) ) {
388
388
this . showNote ( "Please enter all required fields" , true ) ;
389
389
this . setState ( {
390
- markRequiredField : true
390
+ markRequiredFieldRow : - 1
391
391
} ) ;
392
392
return ;
393
393
}
394
394
}
395
395
}
396
396
if ( this . state . markRequiredField ) {
397
397
this . setState ( {
398
- markRequiredField : false
398
+ markRequiredFieldRow : 0
399
399
} ) ;
400
400
}
401
401
obj . save ( null , { useMasterKey : true } ) . then (
@@ -462,6 +462,47 @@ class Browser extends DashboardView {
462
462
if ( ! obj ) {
463
463
return ;
464
464
}
465
+
466
+ // check if required fields are missing
467
+ const className = this . props . params . className ;
468
+ let requiredCols = [ ] ;
469
+ if ( className ) {
470
+ let classColumns = this . props . schema . data . get ( 'classes' ) . get ( className ) ;
471
+ classColumns . forEach ( ( { required } , name ) => {
472
+ if ( name === 'objectId' || this . state . isUnique && name !== this . state . uniqueField ) {
473
+ return ;
474
+ }
475
+ if ( ! ! required ) {
476
+ requiredCols . push ( name ) ;
477
+ }
478
+ if ( className === '_User' && ( name === 'username' || name === 'password' ) ) {
479
+ if ( ! obj . get ( 'authData' ) ) {
480
+ requiredCols . push ( name ) ;
481
+ }
482
+ }
483
+ if ( className === '_Role' && ( name === 'name' || name === 'ACL' ) ) {
484
+ requiredCols . push ( name ) ;
485
+ }
486
+ } ) ;
487
+ }
488
+ if ( requiredCols . length ) {
489
+ for ( let idx = 0 ; idx < requiredCols . length ; idx ++ ) {
490
+ const name = requiredCols [ idx ] ;
491
+ if ( ! obj . get ( name ) ) {
492
+ this . showNote ( "Please enter all required fields" , true ) ;
493
+ this . setState ( {
494
+ markRequiredFieldRow : rowIndex
495
+ } ) ;
496
+ return ;
497
+ }
498
+ }
499
+ }
500
+ if ( this . state . markRequiredField ) {
501
+ this . setState ( {
502
+ markRequiredFieldRow : 0
503
+ } ) ;
504
+ }
505
+
465
506
obj . save ( null , { useMasterKey : true } ) . then ( ( objectSaved ) => {
466
507
let msg = objectSaved . className + ' with id \'' + objectSaved . id + '\' ' + 'created' ;
467
508
this . showNote ( msg , false ) ;
@@ -816,7 +857,7 @@ class Browser extends DashboardView {
816
857
obj . set ( attr , value ) ;
817
858
}
818
859
819
- if ( isNewObject ) {
860
+ if ( isNewObject || isEditCloneObj ) {
820
861
// for dynamically changing required placeholder text for _User class new row object
821
862
if ( obj . className === '_User' && attr === 'authData' && value !== undefined ) {
822
863
// username & password are not required
@@ -1175,6 +1216,7 @@ class Browser extends DashboardView {
1175
1216
}
1176
1217
} ) ;
1177
1218
}
1219
+ this . setRequiredColumnFields ( ) ;
1178
1220
this . addEditCloneRows ( failedSaveObj ) ;
1179
1221
}
1180
1222
this . setState ( {
@@ -1366,7 +1408,7 @@ class Browser extends DashboardView {
1366
1408
onAbortEditCloneRow = { this . abortEditCloneRow }
1367
1409
onCancelPendingEditRows = { this . cancelPendingEditRows }
1368
1410
1369
- markRequiredField = { this . state . markRequiredField }
1411
+ markRequiredFieldRow = { this . state . markRequiredFieldRow }
1370
1412
requiredColumnFields = { this . state . requiredColumnFields }
1371
1413
columns = { columns }
1372
1414
className = { className }
0 commit comments