i-react-utils
Version:
1 lines • 4.22 kB
JavaScript
Object.defineProperty(exports,'__esModule',{value:true});var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _react=require('react');var _react2=_interopRequireDefault(_react);var _iJsUtils=require('i-js-utils');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called')}return call&&(typeof call==='object'||typeof call==='function')?call:self}function _inherits(subClass,superClass){if(typeof superClass!=='function'&&superClass!==null){throw new TypeError('Super expression must either be null or a function, not '+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var PasswordStrengthMeter=function(_React$Component){_inherits(PasswordStrengthMeter,_React$Component);function PasswordStrengthMeter(props){_classCallCheck(this,PasswordStrengthMeter);var _this=_possibleConstructorReturn(this,(PasswordStrengthMeter.__proto__||Object.getPrototypeOf(PasswordStrengthMeter)).call(this));_this.state={level:0,length:0};_this.props=props;_this._calculate=_this._calculate.bind(_this);_this._prepare(props);return _this}_createClass(PasswordStrengthMeter,[{key:'_prepare',value:function _prepare(props){this.divProps=(0,_iJsUtils.shallowCopyExcept)({},props,['rules','password','strengthThreshold','minLength'])}},{key:'_calculate',value:function _calculate(password){if(password===undefined||password===null){password=''}var level=0;if(password.length>0&&password.length>=this.props.minLength){this.props.rules.forEach(function(r){if(r.test(password)){level++}})}this.setState({level:level,length:password.length});return level}},{key:'componentDidMount',value:function componentDidMount(){this._calculate(this.props.password)}},{key:'componentWillReceiveProps',value:function componentWillReceiveProps(nextProps){this.props=nextProps;this._prepare(nextProps);this._calculate(nextProps.password)}},{key:'render',value:function render(){var _state=this.state,length=_state.length,level=_state.level;var max=this.props.rules.length+1;var step=100/max;var prc=step*(level+(length>0?1:0))+'%';var cl='progress-bar-danger';if(level>=this.props.strengthThreshold){cl='progress-bar-warning'}var i=Math.floor((max-1-this.props.strengthThreshold)/2)+this.props.strengthThreshold;if(level==max-1||level>=i){cl='progress-bar-success'}return _react2.default.createElement('div',_extends({},this.divProps,{className:'password-strength-meter progress'}),_react2.default.createElement('div',{className:'progress-bar '+cl+' password-strength-meter-bar',style:{width:prc}},this.props.children))}}]);return PasswordStrengthMeter}(_react2.default.Component);PasswordStrengthMeter.propTypes={minLength:_react2.default.PropTypes.number,strengthThreshold:_react2.default.PropTypes.number.isRequired,password:_react2.default.PropTypes.string.isRequired,rules:_react2.default.PropTypes.array};PasswordStrengthMeter.defaultProps={minLength:0,rules:[new RegExp('[a-z]'),new RegExp('[A-Z]'),new RegExp('[0-9]'),new RegExp('[\\W]'),new RegExp('.{9,}')]};exports.default=PasswordStrengthMeter;module.exports=exports.default;
;