A React Proptype Validator to check if passed prop is a moment.js construct
var momentPropTypes = require('react-moment-proptypes');
var TestClass = React.createClass({
propTypes : {
dateThing : momentPropTypes.momentObj,
dateThingWithPredicate : momentPropTypes.momentObj.withPredicate(
function isUTC(momentObject) {
return momentObject.isUTC();
}
),
stringThing : momentPropTypes.momentString,
durationThing: momentPropTypes.momentDurationObj,
},
render : function() {
return null
},
});
// Class Use
<TestClass dateThing={moment()}
dateThingWithPredicate={moment.utc()}
stringThing={'12-12-2014'}
durationThing={moment.duration(3, 'hours')}/>
Moment provides a moment.createFromInputFallback
method you can define to create additional parsing rules.
With some versions of moment you may receive the following console warning:
Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: not a date, _f: undefined, _strict: undefined, _locale: [object Object]
Error
at [... stack trace]
Example implementations can be found at the given documentation link.
Tests were approached with enzyme
and React's test utility renderer
npm test
for running unit and integration testsnpm run coverage
for current test coverage
npm run test-all
to test against tested moment version (1.6.0, 1.7.0, current)
If there is a desire for varying moment legacy support I'm willing to add it, but will stick to YAGNI until then.