longshotlabs / simpl-schema

A JavaScript schema validation package that supports direct validation of MongoDB update modifier objects
https://www.npmjs.com/package/simpl-schema
MIT License
560 stars 115 forks source link

Override error messages in simpl-schema v3 #478

Closed ivan133 closed 1 year ago

ivan133 commented 1 year ago

Hi I'm trying to add custom translations to "simpl-schema": "^3.4.1", SimpleSchema.setDefaultMessages does not work anymore So I've implemetned it like this

new SimpleSchema({
    companyName: {
      type: String
    },
    clientIds: {
      type: Array,
      optional: true,
    },
    'clientIds.$': {
      type: String,
    }
  }, {
    getErrorMessage(errorInfo, label) {
      const msgFn = defaultMessages[errorInfo.type];
      return typeof msgFn === 'function' ? msgFn(errorInfo, label) : `${errorInfo.type} ${errorInfo.name}`;
    }
  })

And it works but I have to redefine it for every new simple schema Is there a way to set it up on default level?

I saw this part in readme:

globalThis.simpleSchemaGlobalConfig = {
  getErrorMessage(error, label) {
    if (error.type === 'too_long') return `${label} is too long!`
    // Returning undefined will fall back to using defaults
  }
};

But I can't figure out what's globalThis

github-actions[bot] commented 1 year ago

Thank you for submitting an issue!

If this is a bug report, please be sure to include, at minimum, example code showing a small schema and any necessary calls with all their arguments, which will reproduce the issue. Even better, you can link to a saved online code editor example, where anyone can immediately run the code and see the issue.

If you are requesting a feature, include a code example of how you imagine it working if it were implemented.

If you need to edit your issue description, click the [...] and choose Edit.

Be patient. This is a free and freely licensed package that I maintain in my spare time. You may get a response in a day, but it could also take a month. If you benefit from this package and would like to see more of my time devoted to it, you can help by sponsoring.

ivan133 commented 1 year ago

Ok, this code works (put it on the server startup)

const registerSchemaMessages = () => {
  this.simpleSchemaGlobalConfig = {
    getErrorMessage(errorInfo, label) {
      const msgFn = defaultMessages[errorInfo.type];
      return typeof msgFn === 'function' ? msgFn(errorInfo, label) : `${errorInfo.type} ${errorInfo.name}`;
    }
  };
};
registerSchemaMessages();