react-native-ui-lib
Version:
UI Components Library for React Native ###### Lateset version support RN44
206 lines (116 loc) • 8.51 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 _get=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null){return undefined;}else{return get(parent,property,receiver);}}else if("value"in desc){return desc.value;}else{var getter=desc.get;if(getter===undefined){return undefined;}return getter.call(receiver);}};var _react=require('react');var _react2=_interopRequireDefault(_react);
var _reactNative=require('react-native');
var _propTypes=require('prop-types');var _propTypes2=_interopRequireDefault(_propTypes);
var _lodash=require('lodash');var _lodash2=_interopRequireDefault(_lodash);
var _style=require('../../style');
var _inputs=require('../inputs');
var _PickerModal=require('./PickerModal');var _PickerModal2=_interopRequireDefault(_PickerModal);
var _PickerItem=require('./PickerItem');var _PickerItem2=_interopRequireDefault(_PickerItem);
var _PickerPresenter=require('./PickerPresenter');var PickerPresenter=_interopRequireWildcard(_PickerPresenter);
var _button=require('../../components/button');var _button2=_interopRequireDefault(_button);
var _view=require('../../components/view');var _view2=_interopRequireDefault(_view);
var _modal=require('../../screensComponents/modal');var _modal2=_interopRequireDefault(_modal);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}}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 PICKER_MODES={
SINGLE:'SINGLE',
MULTI:'MULTI'};
var ItemType=_propTypes2.default.shape({value:_propTypes2.default.any,label:_propTypes2.default.string});var
Picker=function(_TextInput){_inherits(Picker,_TextInput);
function Picker(props){_classCallCheck(this,Picker);var _this=_possibleConstructorReturn(this,(Picker.__proto__||Object.getPrototypeOf(Picker)).call(this,
props));
_this.onDoneSelecting=_this.onDoneSelecting.bind(_this);
_this.toggleItemSelection=_this.toggleItemSelection.bind(_this);
_this.appendPropsToChildren=_this.appendPropsToChildren.bind(_this);
_this.cancelSelect=_this.cancelSelect.bind(_this);
_this.handlePickerOnPress=_this.handlePickerOnPress.bind(_this);
_this.state=_extends({},
_this.state,{
showModal:false});
if(props.mode===Picker.modes.SINGLE&&Array.isArray(props.value)){
console.warn('Picker in SINGLE mode cannot accpet an array for value');
}
if(props.mode===Picker.modes.MULTI&&!Array.isArray(props.value)){
console.warn('Picker in MULTI mode must accpet an array for value');
}return _this;
}_createClass(Picker,[{key:'componentWillReceiveProps',value:function componentWillReceiveProps(
nexProps){
this.setState({
value:nexProps.value});
}},{key:'toggleItemSelection',value:function toggleItemSelection(
item){var
value=this.state.value;
var newValue=_lodash2.default.xorBy(value,[item],'value');
this.setState({
value:newValue});
}},{key:'onDoneSelecting',value:function onDoneSelecting(
item){
this.onChangeText(item);
this.toggleExpandableModal(false);
_lodash2.default.invoke(this.props,'onChange',item);
}},{key:'cancelSelect',value:function cancelSelect()
{
this.setState({
value:this.props.value});
this.toggleExpandableModal(false);
}},{key:'appendPropsToChildren',value:function appendPropsToChildren()
{var _this2=this;var _props=
this.props,children=_props.children,mode=_props.mode,getItemValue=_props.getItemValue;var
value=this.state.value;
var childrenWithProps=_react2.default.Children.map(children,function(child){
var childValue=PickerPresenter.getItemValue(_extends({getItemValue:getItemValue},child.props));
var selectedValue=PickerPresenter.getItemValue({value:value,getItemValue:getItemValue});
return _react2.default.cloneElement(child,{
isSelected:PickerPresenter.isItemSelected(childValue,selectedValue),
onPress:mode===Picker.modes.MULTI?_this2.toggleItemSelection:_this2.onDoneSelecting,
getItemValue:child.props.getItemValue||getItemValue});
});
return childrenWithProps;
}},{key:'getLabel',value:function getLabel()
{var
value=this.state.value;
if(_lodash2.default.isArray(value)){
return _lodash2.default.chain(value).map('label').join(', ').value();
}
return _lodash2.default.get(value,'label');
}},{key:'handlePickerOnPress',value:function handlePickerOnPress()
{
this.toggleExpandableModal(true);
_lodash2.default.invoke(this.props,'onPress');
}},{key:'renderExpandableInput',value:function renderExpandableInput()
{
var typography=this.getTypography();
var color=this.extractColorValue()||_style.Colors.dark10;
var label=this.getLabel();
return(
_react2.default.createElement(_reactNative.Text,{
style:[this.styles.input,typography,{color:color}],
numberOfLines:3,
onPress:this.handlePickerOnPress},
label));
}},{key:'renderExpandableModal',value:function renderExpandableModal()
{var _this3=this;var _props2=
this.props,mode=_props2.mode,enableModalBlur=_props2.enableModalBlur,topBarProps=_props2.topBarProps;var
showExpandableModal=this.state.showExpandableModal;
return(
_react2.default.createElement(_PickerModal2.default,{
visible:showExpandableModal,
enableModalBlur:enableModalBlur,
topBarProps:_extends({},
topBarProps,{
onCancel:this.cancelSelect,
onDone:mode===Picker.modes.MULTI?function(){return _this3.onDoneSelecting(_this3.state.value);}:undefined})},
this.appendPropsToChildren(this.props.children)));
}},{key:'render',value:function render()
{var _props3=
this.props,renderPicker=_props3.renderPicker,testID=_props3.testID;
if(_lodash2.default.isFunction(renderPicker)){var
value=this.state.value;
return(
_react2.default.createElement(_view2.default,{left:true},
_react2.default.createElement(_button2.default,{link:true,onPress:this.handlePickerOnPress,testID:testID},
renderPicker(value)),
this.renderExpandableModal()));
}
return _get(Picker.prototype.__proto__||Object.getPrototypeOf(Picker.prototype),'render',this).call(this);
}}]);return Picker;}(_inputs.TextInput);Picker.displayName='Picker';Picker.modes=PICKER_MODES;Picker.propTypes=_extends({},_inputs.TextInput.propTypes,{value:_propTypes2.default.oneOfType([ItemType,_propTypes2.default.arrayOf(ItemType),_propTypes2.default.object]),onChange:_propTypes2.default.func,mode:_propTypes2.default.oneOf(Object.keys(PICKER_MODES)),enableModalBlur:_propTypes2.default.bool,renderPicker:_propTypes2.default.func,onPress:_propTypes2.default.func,getItemValue:_propTypes2.default.func,topBarProps:_propTypes2.default.shape(_modal2.default.TopBar.propTypes)});Picker.defaultProps=_extends({},_inputs.TextInput.defaultProps,{mode:PICKER_MODES.SINGLE,enableModalBlur:true,expandable:true,text70:true,floatingPlaceholder:true});
Picker.Item=_PickerItem2.default;exports.default=
Picker;