@@ -7,6 +7,7 @@ const sheets_lib = require("./sheets.js");
77
88const IMPORTER_SESSION_KEY = "importer.session" ;
99const IMPORTER_ERROR_KEY = "importer.error" ;
10+ const IMPORTER_ERROR_EXTRA_KEY = "importer.error.extra" ;
1011
1112//--------------------------------------------------------------------
1213// The endpoints used to receive POST requests from importer macros,
@@ -73,6 +74,7 @@ exports.Initialise = (config, router, prototypeKit) => {
7374 const cleanRequest = ( request ) => {
7475 delete request . session . data [ 'reference_number' ] ;
7576 delete request . session . data [ IMPORTER_ERROR_KEY ] ;
77+ delete request . session . data [ IMPORTER_ERROR_EXTRA_KEY ] ;
7678 } ;
7779
7880
@@ -124,7 +126,7 @@ exports.Initialise = (config, router, prototypeKit) => {
124126 "importerError" ,
125127 ( data ) => {
126128 if ( data [ IMPORTER_ERROR_KEY ] ) {
127- return { text : data [ IMPORTER_ERROR_KEY ] } ;
129+ return { text : data [ IMPORTER_ERROR_KEY ] , extra : data [ IMPORTER_ERROR_EXTRA_KEY ] } ;
128130 }
129131
130132 return false ;
@@ -510,9 +512,33 @@ exports.Initialise = (config, router, prototypeKit) => {
510512 return ;
511513 }
512514
515+ request . session . data [ 'reference_number' ] = session . id . match ( / \d + / g) . join ( "" ) . substring ( 0 , 8 ) ;
516+
513517 session . mapping = request . body ;
514518
515- request . session . data [ 'reference_number' ] = session . id . match ( / \d + / g) . join ( "" ) . substring ( 0 , 8 ) ;
519+ const values = new Array ( ) ;
520+
521+ for ( const [ key , value ] of Object . entries ( session . mapping ) ) {
522+ if ( value != '' ) {
523+ values . push ( value )
524+ }
525+ }
526+
527+ // For each key in the config that is required, we need to ensure that the field name is present
528+ // in the values array. If not then we will
529+ const required_fields = plugin_config . fields
530+ . filter ( ( f ) => f . required )
531+ . filter ( ( f ) => ! values . includes ( f . name ) )
532+ . map ( ( f ) => f . name )
533+
534+ // If required_fields has any values left, then they are required fields not present in the
535+ // mapping. In which case we should return an error for the user.
536+ if ( required_fields . length > 0 ) {
537+ request . session . data [ IMPORTER_ERROR_KEY ] = "The following fields are required"
538+ request . session . data [ IMPORTER_ERROR_EXTRA_KEY ] = required_fields
539+ response . redirect ( request . get ( 'Referrer' ) ) ;
540+ return ;
541+ }
516542
517543 // Ensure the session is persisted. Currently in session, eventually another way
518544 request . session . data [ IMPORTER_SESSION_KEY ] = session ;
0 commit comments