use transformLoadParamsToQuery instead of transformParamsToQuery to fix ordering being ignored in loadPages()

This commit is contained in:
Pierre Noël 2022-10-07 18:49:15 +02:00
parent 34ecc496e1
commit 98e8bc61e0
3 changed files with 36 additions and 36 deletions

View File

@ -192,12 +192,19 @@ module.exports = {
};
if (isAnyToMany(attribute)) {
const res = await strapi.entityService.loadPages(sourceModelUid, { id }, targetField, {
...queryParams,
page: query.page,
pageSize: query.pageSize,
ordering: 'desc',
});
const res = await strapi.entityService.loadPages(
sourceModelUid,
{ id },
targetField,
{
...queryParams,
ordering: 'desc',
},
{
page: query.page,
pageSize: query.pageSize,
}
);
ctx.body = res;
} else {

View File

@ -24,6 +24,13 @@ const {
const { pickSelectionParams } = require('./params');
const { applyTransforms } = require('./attributes');
const transformLoadParamsToQuery = (uid, field, params = {}, pagination = {}) => {
return {
...transformParamsToQuery(uid, { populate: { [field]: params } }).populate[field],
...pagination,
};
};
// TODO: those should be strapi events used by the webhooks not the other way arround
const { ENTRY_CREATE, ENTRY_UPDATE, ENTRY_DELETE } = webhookUtils.webhookEvents;
@ -246,38 +253,14 @@ const createDefaultImplementation = ({ strapi, db, eventHub, entityValidator })
},
load(uid, entity, field, params = {}) {
const { attributes } = strapi.getModel(uid);
const attribute = attributes[field];
const loadParams = {};
switch (attribute.type) {
case 'relation': {
Object.assign(loadParams, transformParamsToQuery(attribute.target, params));
break;
}
case 'component': {
Object.assign(loadParams, transformParamsToQuery(attribute.component, params));
break;
}
case 'dynamiczone': {
Object.assign(loadParams, transformParamsToQuery(null, params));
break;
}
case 'media': {
Object.assign(loadParams, transformParamsToQuery('plugin::upload.file', params));
break;
}
default: {
break;
}
if (!_.isString(field)) {
throw new Error(`Invalid load. Expected "${field}" to be a string`);
}
return db.query(uid).load(entity, field, loadParams);
return db.query(uid).load(entity, field, transformLoadParamsToQuery(uid, field, params));
},
loadPages(uid, entity, field, params = {}) {
loadPages(uid, entity, field, params = {}, pagination = {}) {
if (!_.isString(field)) {
throw new Error(`Invalid load. Expected "${field}" to be a string`);
}
@ -289,7 +272,9 @@ const createDefaultImplementation = ({ strapi, db, eventHub, entityValidator })
throw new Error(`Invalid load. Expected "${field}" to be an anyToMany relational attribute`);
}
return db.query(uid).loadPages(entity, field, transformParamsToQuery(attribute.target, params));
const query = transformLoadParamsToQuery(uid, field, params, pagination);
return db.query(uid).loadPages(entity, field, query);
},
});

View File

@ -49,6 +49,10 @@ const convertCountQueryParams = (countQuery) => {
return parseType({ type: 'boolean', value: countQuery });
};
const convertOrderingQueryParams = (ordering) => {
return ordering;
};
/**
* Sort query parser
* @param {string} sortQuery - ex: id:asc,price:desc
@ -248,7 +252,7 @@ const convertNestedPopulate = (subPopulate, schema) => {
}
// TODO: We will need to consider a way to add limitation / pagination
const { sort, filters, fields, populate, count } = subPopulate;
const { sort, filters, fields, populate, count, ordering } = subPopulate;
const query = {};
@ -272,6 +276,10 @@ const convertNestedPopulate = (subPopulate, schema) => {
query.count = convertCountQueryParams(count);
}
if (ordering) {
query.ordering = convertOrderingQueryParams(ordering);
}
return query;
};