# create-prop-types
A lightweight helper library to create custom React prop types.

## Getting started
### Install
```bash
npm install create-prop-types --save-dev
```

### Create a custom prop type
```js
// ./prop-types/Iterable.js

import createPropType from 'create-prop-types';
import { Iterable } from 'immutable';

const IterablePropType = createPropType({
  predicate: propValue => Iterable.isIterable(propValue)
});

export default IterablePropType;
```

### Use the custom prop type
```jsx
import Iterable from './prop-types/Iterable';

export default class MyComponent extends React.Component {
  static propTypes = {
    propA: Iterable,
    propB: Iterable.isRequired
  }
}
```

## API
### `predicate: (propValue: any) => boolean`
A predicate function to satisfy in order to consider the prop value as valid.

#### Example
```js
import createPropType from 'create-prop-types';

const CustomPropType = createPropType({
  predicate: propValue => (propValue !== 'foo')
});

export default CustomPropType;
```

### `warnings?: Warnings`
Optional custom warning messages.

```ts
type Warnings = {
  missing?: WarningResolver,
  invalid?: WarningResolver
}

type WarningResolver = (propName: string, propValue: any, componentName: string) => string
```

#### Example
```js
import createPropType from 'create-prop-types';

const CustomPropType = createPropType({
  predicate: propValue => ...,
  warnings: {
    missing: (propName, propValue, componentName) => {
      return `Required prop "${propName}" is missing in "${componentName}" component.`;
    }
  }
});

export default CustomPropType;
```

## License
This project is licensed under [MIT License](./LICENSE.md). See the license file for more details.