@@ -81,7 +81,7 @@ class Browser extends DashboardView {
8181 isUnique : false ,
8282 uniqueField : null ,
8383 keepAddingCols : false ,
84- markRequiredField : false ,
84+ markRequiredFieldRow : 0 ,
8585 requiredColumnFields : [ ]
8686 } ;
8787
@@ -387,15 +387,15 @@ class Browser extends DashboardView {
387387 if ( ! obj . get ( name ) ) {
388388 this . showNote ( "Please enter all required fields" , true ) ;
389389 this . setState ( {
390- markRequiredField : true
390+ markRequiredFieldRow : - 1
391391 } ) ;
392392 return ;
393393 }
394394 }
395395 }
396396 if ( this . state . markRequiredField ) {
397397 this . setState ( {
398- markRequiredField : false
398+ markRequiredFieldRow : 0
399399 } ) ;
400400 }
401401 obj . save ( null , { useMasterKey : true } ) . then (
@@ -462,6 +462,47 @@ class Browser extends DashboardView {
462462 if ( ! obj ) {
463463 return ;
464464 }
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+
465506 obj . save ( null , { useMasterKey : true } ) . then ( ( objectSaved ) => {
466507 let msg = objectSaved . className + ' with id \'' + objectSaved . id + '\' ' + 'created' ;
467508 this . showNote ( msg , false ) ;
@@ -816,7 +857,7 @@ class Browser extends DashboardView {
816857 obj . set ( attr , value ) ;
817858 }
818859
819- if ( isNewObject ) {
860+ if ( isNewObject || isEditCloneObj ) {
820861 // for dynamically changing required placeholder text for _User class new row object
821862 if ( obj . className === '_User' && attr === 'authData' && value !== undefined ) {
822863 // username & password are not required
@@ -1175,6 +1216,7 @@ class Browser extends DashboardView {
11751216 }
11761217 } ) ;
11771218 }
1219+ this . setRequiredColumnFields ( ) ;
11781220 this . addEditCloneRows ( failedSaveObj ) ;
11791221 }
11801222 this . setState ( {
@@ -1366,7 +1408,7 @@ class Browser extends DashboardView {
13661408 onAbortEditCloneRow = { this . abortEditCloneRow }
13671409 onCancelPendingEditRows = { this . cancelPendingEditRows }
13681410
1369- markRequiredField = { this . state . markRequiredField }
1411+ markRequiredFieldRow = { this . state . markRequiredFieldRow }
13701412 requiredColumnFields = { this . state . requiredColumnFields }
13711413 columns = { columns }
13721414 className = { className }
0 commit comments