node package manager
Easy sharing. Manage teams and permissions with one click. Create a free org »

react-entity

react-entity - Create entities base on React propTypes

Build Status

This package let you create entities with schema validator like React PropTypes.

Installing

$ npm install react-entity

Using

Sample Entities

import { PropTypes } from 'react';
 
class MyEntity extends ReactEntity {
  static SCHEMA = {
    field: PropTypes.string,
    otherField: {
      type: PropTypes.number,
      defaultValue: 10
    }
  }
}
 
class FatherEntity extends ReactEntity {
  static SCHEMA = {
    children: {
      validator: PropTypes.arrayOf(PropTypes.instanceOf(MyEntity)),
      type: MyEntity
    }
  }
}

Get default values

const niceInstance = new MyEntity();
console.log(niceInstance.fetch()); // { field: undefined, otherField: 10 } 
console.log(niceInstance.errors); // {} 

Validations

const buggedInstance = new MyEntity({ field: 10, otherField: 'value' });
console.log(buggedInstance.fetch()); // { field: 10, otherField: 'value' } 
console.log(buggedInstance.errors); /* or buggedInstance.getErrors() -- but... getErrors also includes children errors
  {
    field: {
      errors: [ 'Invalid undefined `field` of type `number` supplied to `MyEntityEntity`, expected `string`.' ]
    },
    otherField: {
      errors: [ 'Invalid undefined `otherField` of type `string` supplied to `MyEntityEntity`, expected `number`.' ]
    }
  }
*/

Validate on change value

const otherInstance = new MyEntity({ field: 'myString' });
console.log(otherInstance.errors); // {} 
console.log(otherInstance.valid); // true 
 
otherInstance.field = 1;
console.log(otherInstance.errors); // {field: { errors: [ 'Invalid undefined `field` of type `number` supplied to `MyEntityEntity`, expected `string`.' ] }} 
console.log(otherInstance.valid); // false 

Parse children to Entity

const fatherInstance = new FatherEntity({
  children: [{
    field: 'A',
    otherField: 2
  }, {
    field: 'B',
    otherField: 3
  }]  
})
console.log(fatherInstance.children[0]); //An instance of MyEntity 
console.log(fatherInstance.children[1].fetch());
//{ field: 'B', otherField: 3 } 

Clean unexpected values

const anotherInstance = new MyEntity({ field: 'myString', fake: 'fake' });
console.log(anotherInstance.fetch()); // { field: 'myString', otherField: 10 } 

To understand the validators React PropTypes

Well known issues

  • Create helpers for relationships validations(Like, mininum, maximum)
  • Create identifier and equal comparison