@@ -330,6 +330,25 @@ export default class ConfigValidator implements IConfigValidator {
330330 return showInTransformedToObject as ShowIn ;
331331 }
332332
333+ validateFieldGroups ( fieldGroups : {
334+ groupName : string ;
335+ columns : string [ ] ;
336+ } [ ] , resourceColumns : string [ ] ) : void {
337+ if ( ! fieldGroups ) return ;
338+
339+ fieldGroups . forEach ( ( group ) => {
340+ group . columns . forEach ( ( col ) => {
341+ if ( ! resourceColumns . includes ( col ) ) {
342+ const similar = suggestIfTypo ( resourceColumns , col ) ;
343+ throw new Error (
344+ `Group '${ group . groupName } ' has an unknown column '${ col } '. ${ similar ? `Did you mean '${ similar } '?` : ''
345+ } `
346+ ) ;
347+ }
348+ } ) ;
349+ } ) ;
350+ }
351+
333352 validateAndNormalizeCustomActions ( resInput : AdminForthResourceInput , res : Partial < AdminForthResource > , errors : string [ ] ) : any [ ] {
334353 if ( ! resInput . options ?. actions ) {
335354 return [ ] ;
@@ -671,6 +690,12 @@ export default class ConfigValidator implements IConfigValidator {
671690 options . bulkActions = this . validateAndNormalizeBulkActions ( resInput , res , errors ) ;
672691 options . actions = this . validateAndNormalizeCustomActions ( resInput , res , errors ) ;
673692
693+ const allColumnsList = res . columns . map ( ( col ) => col . name ) ;
694+ this . validateFieldGroups ( options . fieldGroups , allColumnsList ) ;
695+ this . validateFieldGroups ( options . showFieldGroups , allColumnsList ) ;
696+ this . validateFieldGroups ( options . createFieldGroups , allColumnsList ) ;
697+ this . validateFieldGroups ( options . editFieldGroups , allColumnsList ) ;
698+
674699 // if pageInjection is a string, make array with one element. Also check file exists
675700 const possibleInjections = [ 'beforeBreadcrumbs' , 'afterBreadcrumbs' , 'bottom' , 'threeDotsDropdownItems' , 'customActionIcons' ] ;
676701 const possiblePages = [ 'list' , 'show' , 'create' , 'edit' ] ;
0 commit comments