adminjs-prisma icon indicating copy to clipboard operation
adminjs-prisma copied to clipboard

Explore form validation options

Open dziraf opened this issue 4 years ago • 1 comments

Ideally, we would like to be able to validate forms like we do in other adapters:

  • Sequelize allows to define validators on field level in model specification
  • TypeORM allows to validate fields using class-validator

We need to find out if we are able to define such validations in Prisma as well and if yes, check whether error data contains enough information to display such error to the end user.

Currently, the adapter attempts to save whatever is sent from the form and the query can fail against SQL constraints, but the error displayed to the user is generic and says only that there were errors when saving the record.

Before this is fully researched and implemented, form validations have to be custom-made, example:

const validateForm = (request, context) => {
  if (request.method !== 'post') return request;

  const { translateMessage: tm, resource } = context;
  
  if (!request.payload?.someRequiredInput?.trim?.().length) }
    throw new ValidationError({
      someRequiredInput: { message: tm('someRequiredInputIsRequired', resource.id()) },
    });
  }

  return request;
};

With this, there will be a proper error message displayed under someRequiredInput field in the form if it isn't defined. This is a before hook which should be used in new and edit actions.

dziraf avatar Oct 18 '21 08:10 dziraf

Prisma doesn't provide a similar validation mechanism as Sequelize and TypeORM at the moment, but we have several issues that are related to this. It would be great if you could add a comment to the issues that seem most relevant to your use case and I'll try to draw attention to them internally 🙂

nikolasburk avatar Oct 19 '21 11:10 nikolasburk