SoftwareBrothers / adminjs-prisma

MIT License
48 stars 28 forks source link

Explore form validation options #1

Open dziraf opened 3 years ago

dziraf commented 3 years ago

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

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.

nikolasburk commented 3 years ago

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 🙂