11const { isEmpty } = require ( 'lodash' ) ;
22const { logMessage, sanitizeConfig, dynamicSort, noLimit, getCombinedUid, getCombinedUidWhereFilter, getUidParamsFromName } = require ( '../utils' ) ;
3- const difference = require ( '../utils/getArrayDiff' ) ;
3+ const { difference, same } = require ( '../utils/getArrayDiff' ) ;
44
55const ConfigType = class ConfigType {
66 constructor ( { queryString, configName, uid, jsonFields, relations } ) {
@@ -99,18 +99,23 @@ const ConfigType = class ConfigType {
9999 const entity = await queryAPI . update ( { where : combinedUidWhereFilter , data : query } ) ;
100100
101101 // Delete/create relations.
102- await Promise . all ( this . relations . map ( async ( { queryString, relationName, parentName, relationSortField } ) => {
102+ await Promise . all ( this . relations . map ( async ( { queryString, relationName, parentName, relationSortFields } ) => {
103103 const relationQueryApi = strapi . query ( queryString ) ;
104- existingConfig = sanitizeConfig ( existingConfig , relationName , relationSortField ) ;
105- configContent = sanitizeConfig ( configContent , relationName , relationSortField ) ;
104+ existingConfig = sanitizeConfig ( existingConfig , relationName , relationSortFields ) ;
105+ configContent = sanitizeConfig ( configContent , relationName , relationSortFields ) ;
106106
107- const configToAdd = difference ( configContent [ relationName ] , existingConfig [ relationName ] , relationSortField ) ;
108- const configToDelete = difference ( existingConfig [ relationName ] , configContent [ relationName ] , relationSortField ) ;
107+ const configToAdd = difference ( configContent [ relationName ] , existingConfig [ relationName ] , relationSortFields ) ;
108+ const configToDelete = difference ( existingConfig [ relationName ] , configContent [ relationName ] , relationSortFields ) ;
109+ const configToUpdate = same ( configContent [ relationName ] , existingConfig [ relationName ] , relationSortFields ) ;
109110
110111 await Promise . all ( configToDelete . map ( async ( config ) => {
112+ const whereClause = { } ;
113+ relationSortFields . map ( ( sortField ) => {
114+ whereClause [ sortField ] = config [ sortField ] ;
115+ } ) ;
111116 await relationQueryApi . delete ( {
112117 where : {
113- [ relationSortField ] : config [ relationSortField ] ,
118+ ... whereClause ,
114119 [ parentName ] : entity . id ,
115120 } ,
116121 } ) ;
@@ -121,6 +126,21 @@ const ConfigType = class ConfigType {
121126 data : { ...config , [ parentName ] : entity . id } ,
122127 } ) ;
123128 } ) ) ;
129+
130+ await Promise . all ( configToUpdate . map ( async ( config , index ) => {
131+ const whereClause = { } ;
132+ relationSortFields . map ( ( sortField ) => {
133+ whereClause [ sortField ] = config [ sortField ] ;
134+ } ) ;
135+
136+ await relationQueryApi . update ( {
137+ where : {
138+ ...whereClause ,
139+ [ parentName ] : entity . id ,
140+ } ,
141+ data : { ...config , [ parentName ] : entity . id } ,
142+ } ) ;
143+ } ) ) ;
124144 } ) ) ;
125145 }
126146 }
@@ -168,13 +188,15 @@ const ConfigType = class ConfigType {
168188 if ( shouldExclude ) return ;
169189
170190 const formattedConfig = { ...sanitizeConfig ( config ) } ;
171- await Promise . all ( this . relations . map ( async ( { queryString, relationName, relationSortField , parentName } ) => {
191+ await Promise . all ( this . relations . map ( async ( { queryString, relationName, relationSortFields , parentName } ) => {
172192 const relations = await noLimit ( strapi . query ( queryString ) , {
173193 where : { [ parentName ] : combinedUidWhereFilter } ,
174194 } ) ;
175195
176196 relations . map ( ( relation ) => sanitizeConfig ( relation ) ) ;
177- relations . sort ( dynamicSort ( relationSortField ) ) ;
197+ relationSortFields . map ( ( sortField ) => {
198+ relations . sort ( dynamicSort ( sortField ) ) ;
199+ } ) ;
178200 formattedConfig [ relationName ] = relations ;
179201 } ) ) ;
180202
0 commit comments