feat: Sort relations on more than 1 field
parent
6a05393c11
commit
8abf651a46
|
@ -99,18 +99,22 @@ const ConfigType = class ConfigType {
|
|||
const entity = await queryAPI.update({ where: combinedUidWhereFilter, data: query });
|
||||
|
||||
// Delete/create relations.
|
||||
await Promise.all(this.relations.map(async ({ queryString, relationName, parentName, relationSortField }) => {
|
||||
await Promise.all(this.relations.map(async ({ queryString, relationName, parentName, relationSortFields }) => {
|
||||
const relationQueryApi = strapi.query(queryString);
|
||||
existingConfig = sanitizeConfig(existingConfig, relationName, relationSortField);
|
||||
configContent = sanitizeConfig(configContent, relationName, relationSortField);
|
||||
existingConfig = sanitizeConfig(existingConfig, relationName, relationSortFields);
|
||||
configContent = sanitizeConfig(configContent, relationName, relationSortFields);
|
||||
|
||||
const configToAdd = difference(configContent[relationName], existingConfig[relationName], relationSortField);
|
||||
const configToDelete = difference(existingConfig[relationName], configContent[relationName], relationSortField);
|
||||
const configToAdd = difference(configContent[relationName], existingConfig[relationName], relationSortFields[0]);
|
||||
const configToDelete = difference(existingConfig[relationName], configContent[relationName], relationSortFields[0]);
|
||||
|
||||
await Promise.all(configToDelete.map(async (config) => {
|
||||
const whereClause = {};
|
||||
relationSortFields.map((sortField) => {
|
||||
whereClause[sortField] = config[sortField];
|
||||
});
|
||||
await relationQueryApi.delete({
|
||||
where: {
|
||||
[relationSortField]: config[relationSortField],
|
||||
...whereClause,
|
||||
[parentName]: entity.id,
|
||||
},
|
||||
});
|
||||
|
@ -168,13 +172,15 @@ const ConfigType = class ConfigType {
|
|||
if (shouldExclude) return;
|
||||
|
||||
const formattedConfig = { ...sanitizeConfig(config) };
|
||||
await Promise.all(this.relations.map(async ({ queryString, relationName, relationSortField, parentName }) => {
|
||||
await Promise.all(this.relations.map(async ({ queryString, relationName, relationSortFields, parentName }) => {
|
||||
const relations = await noLimit(strapi.query(queryString), {
|
||||
where: { [parentName]: combinedUidWhereFilter },
|
||||
});
|
||||
|
||||
relations.map((relation) => sanitizeConfig(relation));
|
||||
relations.sort(dynamicSort(relationSortField));
|
||||
relationSortFields.map((sortField) => {
|
||||
relations.sort(dynamicSort(sortField));
|
||||
});
|
||||
formattedConfig[relationName] = relations;
|
||||
}));
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ const types = (strapi) => {
|
|||
queryString: 'admin::permission',
|
||||
relationName: 'permissions',
|
||||
parentName: 'role',
|
||||
relationSortField: 'action',
|
||||
relationSortFields: ['action', 'subject'],
|
||||
}],
|
||||
},
|
||||
];
|
||||
|
@ -32,7 +32,7 @@ const types = (strapi) => {
|
|||
queryString: 'plugin::users-permissions.permission',
|
||||
relationName: 'permissions',
|
||||
parentName: 'role',
|
||||
relationSortField: 'action',
|
||||
relationSortFields: ['action'],
|
||||
}],
|
||||
});
|
||||
}
|
||||
|
|
|
@ -37,14 +37,16 @@ const dynamicSort = (property) => {
|
|||
|
||||
return (a, b) => {
|
||||
if (sortOrder === -1) {
|
||||
if (b[property]) {
|
||||
return b[property].localeCompare(a[property]);
|
||||
} else {
|
||||
}
|
||||
} else if (a[property]) {
|
||||
return a[property].localeCompare(b[property]);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
const sanitizeConfig = (config, relation, relationSortField) => {
|
||||
const sanitizeConfig = (config, relation, relationSortFields) => {
|
||||
delete config._id;
|
||||
delete config.id;
|
||||
delete config.updatedAt;
|
||||
|
@ -63,8 +65,10 @@ const sanitizeConfig = (config, relation, relationSortField) => {
|
|||
formattedRelations.push(relationEntity);
|
||||
});
|
||||
|
||||
if (relationSortField) {
|
||||
formattedRelations.sort(dynamicSort(relationSortField));
|
||||
if (relationSortFields) {
|
||||
relationSortFields.map((sortField) => {
|
||||
formattedRelations.sort(dynamicSort(sortField));
|
||||
});
|
||||
}
|
||||
|
||||
config[relation] = formattedRelations;
|
||||
|
|
Loading…
Reference in New Issue