Search code examples
javascriptmeteormeteor-autoformmeteor-collection2simple-schema

How to check if boolean is true in custom validation simple-schema in Meteor


I have the following Schema:

Games.attachSchema(new SimpleSchema({
    title: {
        type: String,
        label: "Title",
        max: 30
    },
    multiplayer: {
        type: Boolean,
        label: "Multiplayer",
        denyUpdate: true
    },
    description: {
        type: String,
        label: "Description",
        custom: function() {
            var multiplayer = this.field("multiplayer");
            if (multiplayer.isSet && multiplayer.value && !this.isSet) return "Description is empty!";
            return true;
        }
    }
}));

My goal is to check if description is empty, but only if the checkbox multiplayer has been checked. If the checkbox has not been checked, the description should not be mandatory to fill in.

I tried the code above, but it does not validate. Even if I do not have an description and I checked the checkbox, I am able to submit the form.


Solution

  • I found the proper documentation and I solved it like this:

    {
      description: {
        type: String,
        optional: true,
        custom: function () {
          var shouldBeRequired = this.field('multiplayer').value;
    
          if (shouldBeRequired) {
            // inserts
            if (!this.operator) {
              if (!this.isSet || this.value === null || this.value === "") return "required";
            }
    
            // updates
            else if (this.isSet) {
              if (this.operator === "$set" && this.value === null || this.value === "") return "required";
              if (this.operator === "$unset") return "required";
              if (this.operator === "$rename") return "required";
            }
          }
        }
      }
    }