Sort by smart field
Please be sure of your agent type and version and pick the right documentation accordingly.
This is the documentation of the forest-express-sequelize
and forest-express-mongoose
Node.js agents that will soon reach end-of-support.
forest-express-sequelize
v9 and forest-express-mongoose
v9 are replaced by @forestadmin/agent
v1.
Please check your agent type and version and read on or switch to the right documentation.
Sort by smart field
Context: as a user, I want to be able to sort a collection based on a smart field. This example is based on the one provided in the documentation with a simple concatenation of 2 fields existing in the collection.
We have a customers
collection with a field firstname
and field lastname
. We create a smart field fullname
that is a concatenation of the two fields.
Smart field definition
In order to make the field sortable, you need to add the isSortable
attribute.
forest/customers.js
{
field: 'fullname',
type: 'String',
isSortable: true,
get: (customer) => {
return customer.firstname + ' ' + customer.lastname;
},
},
Route definition
At the level of the route, you need to catch the query and redirect the sort field from one that does not exist in the database (fullname
) to the relevant one (firstname
)
routes/customers.js
router.get(
'/customers',
permissionMiddlewareCreator.list(),
(request, response, next) => {
// Learn what this route does here: https://docs.forestadmin.com/documentation/v/v6/reference-guide/routes/default-routes#get-a-list-of-records
let sort;
switch (request.query.sort) {
case '-fullname':
sort = '-firstname';
break;
case 'fullname':
sort = 'firstname';
break;
default:
sort = request.query.sort;
}
request.query.sort = sort;
next();
}
);
Last updated
Was this helpful?