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