react-input-message
Advanced tools
Comparing version 0.10.2 to 0.11.0
@@ -19,5 +19,29 @@ 'use strict'; | ||
function resolveNames(container, props) { | ||
var group = props.group; | ||
var forNames = props['for']; | ||
if (!forNames && container) forNames = container.namesForGroup(group); | ||
return forNames ? [].concat(forNames) : []; | ||
} | ||
function defaultMapMessages(messages, props, container) { | ||
var names = resolveNames(container, props); | ||
if (!names.length) return messages; | ||
var messagesForNames = {}; | ||
names.forEach(function (name) { | ||
if (messages[name]) messagesForNames[name] = messages[name]; | ||
}); | ||
return messagesForNames; | ||
} | ||
exports.default = function (Component) { | ||
var _class, _temp; | ||
var mapMessages = arguments.length <= 1 || arguments[1] === undefined ? defaultMapMessages : arguments[1]; | ||
return _temp = _class = function (_React$Component) { | ||
@@ -39,2 +63,4 @@ _inherits(MessageListener, _React$Component); | ||
this.unsubscribe = container.subscribe(function (messages) { | ||
if (mapMessages) messages = mapMessages(messages, _this2.props, container); | ||
_this2.setState({ messages: messages }); | ||
@@ -45,2 +71,11 @@ }); | ||
MessageListener.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps, nextContext) { | ||
if (mapMessages && mapMessages.length >= 2) { | ||
var container = nextContext.messageContainer; | ||
this.setState({ | ||
messages: mapMessages(this.state.messages, nextProps, container) | ||
}); | ||
} | ||
}; | ||
MessageListener.prototype.componentWillUnmount = function componentWillUnmount() { | ||
@@ -47,0 +82,0 @@ this.unsubscribe && this.unsubscribe(); |
@@ -30,12 +30,2 @@ 'use strict'; | ||
function messagesForNames(names, messages) { | ||
var messagesForNames = {}; | ||
names.forEach(function (name) { | ||
if (messages[name]) messagesForNames[name] = messages[name]; | ||
}); | ||
return messagesForNames; | ||
} | ||
var stringOrArrayOfStrings = _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.arrayOf(_react.PropTypes.string)]); | ||
@@ -52,59 +42,22 @@ | ||
Message.prototype.componentWillMount = function componentWillMount() { | ||
this.setState(this.getMessageState(this.props, this.context)); | ||
}; | ||
Message.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps, nextContext) { | ||
this.setState(this.getMessageState(nextProps, nextContext)); | ||
}; | ||
Message.prototype.getMessageState = function getMessageState(props, context) { | ||
var messagesForNames = props.messagesForNames; | ||
var messages = props.messages; | ||
var args = _objectWithoutProperties(props, ['messagesForNames', 'messages']); | ||
var names = this.resolveNames(props, context); | ||
messages = names == null ? messages : messagesForNames(names, messages, args); | ||
return { messages: messages }; | ||
}; | ||
Message.prototype.render = function render() { | ||
var _props = this.props; | ||
var fieldFor = _props.for; | ||
var | ||
/* eslint-disable no-unused-vars */ | ||
/* eslint-enable no-unused-vars */ | ||
messages = _props.messages; | ||
var fieldFor = _props.for; | ||
var Component = _props.component; | ||
var children = _props.children; | ||
var props = _objectWithoutProperties(_props, ['messages', 'for', 'component', 'children']); | ||
var props = _objectWithoutProperties(_props, ['for', 'messages', 'component', 'children']); | ||
var activeMessages = this.state.messages; | ||
if (!Object.keys(messages || {}).length) return null; | ||
if (!Object.keys(activeMessages || {}).length) return null; | ||
return _react2.default.createElement( | ||
Component, | ||
props, | ||
children(values(activeMessages).reduce(flatten, [])) | ||
children(values(messages).reduce(flatten, [])) | ||
); | ||
}; | ||
Message.prototype.resolveNames = function resolveNames(props, context) { | ||
var messageContainer = context.messageContainer; | ||
var forNames = props['for']; | ||
var group = props.group; | ||
if (!forNames) { | ||
if (!group || !messageContainer) return null; | ||
forNames = messageContainer.namesForGroup(group); | ||
} | ||
return forNames ? [].concat(forNames) : []; | ||
}; | ||
return Message; | ||
@@ -121,3 +74,2 @@ }(_react2.default.Component); | ||
Message.defaultProps = { | ||
messagesForNames: messagesForNames, | ||
component: 'span', | ||
@@ -124,0 +76,0 @@ children: function children(messages) { |
@@ -33,2 +33,4 @@ 'use strict'; | ||
var ALL_FIELDS = '@all'; | ||
var MessageContainer = function (_React$Component) { | ||
@@ -105,4 +107,8 @@ _inherits(MessageContainer, _React$Component); | ||
this.namesForGroup = function (groups) { | ||
groups = groups || Object.keys(_this2._groups); | ||
groups = [].concat(groups); | ||
groups = groups ? [].concat(groups) : []; | ||
if (groups.indexOf(ALL_FIELDS) !== -1) { | ||
groups = Object.keys(_this2._groups); | ||
} | ||
return uniq(groups.reduce(function (fields, group) { | ||
@@ -114,3 +120,6 @@ return fields.concat(_this2._groups[group]); | ||
this.addToGroup = function (grpName, names) { | ||
if (grpName === ALL_FIELDS) return; | ||
grpName = grpName || '@@unassigned-group'; | ||
names = names && [].concat(names); | ||
@@ -117,0 +126,0 @@ |
@@ -19,4 +19,2 @@ 'use strict'; | ||
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
@@ -30,8 +28,2 @@ | ||
function isActive(names, messages) { | ||
return names.some(function (name) { | ||
return !!messages[name]; | ||
}); | ||
} | ||
var MessageTrigger = function (_React$Component) { | ||
@@ -56,24 +48,7 @@ _inherits(MessageTrigger, _React$Component); | ||
MessageTrigger.prototype.componentWillMount = function componentWillMount() { | ||
var _props = this.props; | ||
var isActive = _props.isActive; | ||
var messages = _props.messages; | ||
var props = _objectWithoutProperties(_props, ['isActive', 'messages']); | ||
this.addToGroup(); | ||
this.setState({ | ||
isActive: isActive.apply(undefined, [this.resolveNames(), messages].concat(props)) | ||
}); | ||
}; | ||
MessageTrigger.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps, nextContext) { | ||
var isActive = nextProps.isActive; | ||
var messages = nextProps.messages; | ||
var props = _objectWithoutProperties(nextProps, ['isActive', 'messages']); | ||
this.addToGroup(nextProps, nextContext); | ||
this.setState({ | ||
isActive: isActive(this.resolveNames(nextProps, nextContext), messages, props) | ||
}); | ||
}; | ||
@@ -119,3 +94,2 @@ | ||
// falsy groups will return all form fields | ||
@@ -133,6 +107,12 @@ if (!forNames && messageContainer) forNames = messageContainer.namesForGroup(group); | ||
inject: _react2.default.PropTypes.func, | ||
isActive: _react2.default.PropTypes.func.isRequired, | ||
for: stringOrArrayOfStrings, | ||
group: stringOrArrayOfStrings | ||
group: function group(props, name, compName) { | ||
if (!props[name] && (!props.for || !props.for.length)) { | ||
return new Error('A `group` prop is required when no `for` prop is provided' + ('for component ' + compName)); | ||
} | ||
return stringOrArrayOfStrings(props, name, compName); | ||
} | ||
}; | ||
@@ -143,3 +123,2 @@ MessageTrigger.contextTypes = { | ||
MessageTrigger.defaultProps = { | ||
isActive: isActive, | ||
events: 'onChange' | ||
@@ -167,12 +146,10 @@ }; | ||
this.inject = function (child) { | ||
var _props2 = _this2.props; | ||
var messages = _props2.messages; | ||
var inject = _props2.inject; | ||
var isActive = _props2.isActive; | ||
var _props = _this2.props; | ||
var messages = _props.messages; | ||
var inject = _props.inject; | ||
if (!inject) return false; | ||
var names = _this2.resolveNames(); | ||
return inject(child, isActive(names, messages)); | ||
return inject(child, messages); | ||
}; | ||
@@ -179,0 +156,0 @@ }; |
{ | ||
"name": "react-input-message", | ||
"description": "unopinionated form input annotation", | ||
"version": "0.10.2", | ||
"version": "0.11.0", | ||
"repository": { | ||
@@ -6,0 +6,0 @@ "url": "git://github.com/jquense/react-input-message.git" |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
23915
502