@@ -63,7 +63,11 @@ const customServices = () => ({
6363
6464 typedEntries ( relation . attributes ) . forEach ( ( [ subFieldName , subField ] ) => {
6565 if ( subField . type === fieldType || subFieldName === fieldType ) {
66- fields . push ( `${ fieldName } .${ subFieldName } ` ) ;
66+ if ( field . relation . endsWith ( 'ToMany' ) ) {
67+ fields . push ( `${ fieldName } [0].${ subFieldName } ` ) ;
68+ } else {
69+ fields . push ( `${ fieldName } .${ subFieldName } ` ) ;
70+ }
6771 }
6872 } ) ;
6973 } else if (
@@ -105,7 +109,7 @@ const customServices = () => ({
105109 * @returns {string[] } The extracted fields.
106110 */
107111 getFieldsFromPattern : ( pattern : string ) : string [ ] => {
108- const fields = pattern . match ( / [ [ \w \d . ] + ] / g) ; // Get all substrings between [] as array.
112+ const fields = pattern . match ( / \[ . * ? \] / g) ;
109113
110114 if ( ! fields ) {
111115 return [ ] ;
@@ -130,7 +134,7 @@ const customServices = () => ({
130134 fields = fields . filter ( ( field ) => field ) ;
131135
132136 // For fields containing dots, extract the first part (relation)
133- const relations = fields . filter ( ( field ) => field . includes ( '.' ) ) . map ( ( field ) => field . split ( '.' ) [ 0 ] ) ;
137+ const relations = fields . filter ( ( field ) => field . includes ( '.' ) ) . map ( ( field ) => field . split ( '.' ) [ 0 ] . replace ( / \[ \d + \] / , '' ) ) ;
134138
135139 return relations ;
136140 } ,
@@ -171,6 +175,17 @@ const customServices = () => ({
171175 } else if ( ! relationalField ) {
172176 const fieldValue = slugify ( String ( entity [ field ] ) ) ;
173177 resolvedPattern = resolvedPattern . replace ( `[${ field } ]` , fieldValue || '' ) ;
178+ } else if ( relationalField [ 0 ] . match ( / \[ \d + \] / ) ) {
179+ const relationName = relationalField [ 0 ] . split ( '[' ) [ 0 ] ;
180+ const index = parseInt ( relationalField [ 0 ] . split ( '[' ) [ 1 ] . split ( ']' ) [ 0 ] , 10 ) ;
181+
182+ if ( Array . isArray ( entity [ relationName ] ) && entity [ relationName ] [ index ] ) {
183+ const relation = entity [ relationName ] [ index ] ;
184+ const fieldValue = slugify ( String ( relation [ relationalField [ 1 ] ] ) ) ;
185+ resolvedPattern = resolvedPattern . replace ( `[${ field } ]` , fieldValue || '' ) ;
186+ } else {
187+ resolvedPattern = resolvedPattern . replace ( `[${ field } ]` , '' ) ;
188+ }
174189 } else if ( Array . isArray ( entity [ relationalField [ 0 ] ] ) ) {
175190 // If the relation is a one-to-many or many-to-many, we use the first one.
176191 const relation = entity [ relationalField [ 0 ] ] [ 0 ] ;
0 commit comments