MessageBox
An NPM package for defining and getting validation error messages in JavaScript. Meteor apps can pass in Tracker
to get reactive language selection.
Installation
$ npm i --save message-box
Usage
Defining Messages
You can define global defaults if necessary:
MessageBox
Otherwise create your MessageBox
instance like this:
const messageBox = initialLanguage: 'en' // optional; default is 'en' messages: en: errorType: '{{name}} is invalid' || ;
And update the messages
object as necessary (for example if different packages are adding their own messages for different languages):
messageBox
messages
does a deep extend on the existing messages.
For any of the ways you can set messages, the message can be either a string or a function that returns a string. If it's a string, it may contain handlebars placeholders for anything in the error object or anything passed in the context
option of the message
function. If it's a function, it will receive a single context
argument that has all the same properties that are available as handlebars variables.
Example
MessageBox;
Getting a Message
To get a message, you pass a single ValidationError
error to the message
function.
Here is a Meteor-specific example:
Templatefoo;
See [https://github.com/meteor/validation-error] for details about the ValidationError
type.
By default, this function returns the message for the current language as set with initialLanguage
or setLanguage
. However, you can instead specify a particular language:
const message = messageBox;
Context
In the "Defining Messages" example, the placeholders like label
and min
must be in the error object or provided in the context option when calling messages
:
const message = messageBox;
Changing the Message Language
messageBox;
Reactivity in Meteor
If you use this in a Meteor app, you can make the messages reactive. Pass Tracker
into the constructor:
const messageBox = messages: ... tracker: Tracker;
Then when you change the language, any call to messageBox.message()
that does not specify a language and is in a reactive context will rerun.
Template
By default (and historically) the substitution of strings is made using {{}}
, you can change this by passing the interpolate
andescape
options:
const messageBox = messages: ... interpolate: /{{{}}}/g // default escape: /{{}}/g; // default;
It is also possible (but I would not recommend) to use logic within messages by using the evaluate
option:
var SUGGESTED_EVALUATE = SUGGESTED_EVALUATE// or; const messageBox = messages: en: conditional: '{{# if (value) { }}true{{# } else { }}false{{# } }}' evaluate: SUGGESTED_EVALUATE;