@bigbinary/neetoui-rn 0.0.113 → 0.0.116
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/MultiSelect.js +1 -1
- package/lib/components/OtpInputs.js +1 -1
- package/lib/components/Select.js +1 -1
- package/lib/contexts/index.js +1 -0
- package/package.json +1 -1
- package/src/components/MultiSelect.js +201 -125
- package/src/components/OtpInputs.js +1 -0
- package/src/components/Select.js +133 -89
- package/src/contexts/index.js +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.MultiSelect=void 0;var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireWildcard(require("react"));var _reactNativeRemixIcon=_interopRequireDefault(require("react-native-remix-icon"));var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNative=require("react-native");var _native=require("styled-components/native");var _=require("./");var _excluded=["options","label","value","placeholder","onSelect","isLoading","isSearchable","labelStyle","containerStyle","dropdownContainerStyle","itemContainerStyle","itemTextStyle","multiSelectedItemContainerStyle","multiSelectedItemTextStyle"];var _this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/MultiSelect.js";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var MultiSelectItem=function MultiSelectItem(_ref){var item=_ref.item,onUnselect=_ref.onUnselect,multiSelectedItemContainerStyle=_ref.multiSelectedItemContainerStyle,multiSelectedItemTextStyle=_ref.multiSelectedItemTextStyle;return _react.default.createElement(_.Container,(0,_extends2.default)({borderWidth:1,borderColor:"border.base",bg:"background.grey100",borderRadius:2,flexDirection:"row",alignItems:"center",p:1,m:1},multiSelectedItemContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:20,columnNumber:3}}),_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",fontSize:"s",mr:2},multiSelectedItemTextStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:31,columnNumber:5}}),item==null?void 0:item.label),_react.default.createElement(_.Touchable,{onPress:onUnselect,__self:_this,__source:{fileName:_jsxFileName,lineNumber:39,columnNumber:5}},_react.default.createElement(_reactNativeRemixIcon.default,{name:"ri-close-line",size:"20",color:"grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:40,columnNumber:7}})));};MultiSelectItem.propTypes={item:_propTypes.default.object,onUnselect:_propTypes.default.func,multiSelectedItemContainerStyle:_propTypes.default.object,multiSelectedItemTextStyle:_propTypes.default.object};var DropdownItem=function DropdownItem(_ref2){var item=_ref2.item,index=_ref2.index,onPress=_ref2.onPress,defaultDropdownItemHeight=_ref2.defaultDropdownItemHeight,itemContainerStyle=_ref2.itemContainerStyle,itemTextStyle=_ref2.itemTextStyle;return _react.default.createElement(_.Touchable,{key:index,bg:"background.white",onPress:onPress,__self:_this,__source:{fileName:_jsxFileName,lineNumber:61,columnNumber:5}},_react.default.createElement(_.Container,(0,_extends2.default)({height:defaultDropdownItemHeight,p:2},itemContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:62,columnNumber:7}}),_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",fontSize:"s",color:"font.grey"},itemTextStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:67,columnNumber:9}}),item==null?void 0:item.label)));};DropdownItem.propTypes={item:_propTypes.default.object,index:_propTypes.default.number,onPress:_propTypes.default.func,defaultDropdownItemHeight:_propTypes.default.number,itemContainerStyle:_propTypes.default.object,itemTextStyle:_propTypes.default.object};var MultiSelect=function MultiSelect(_ref3){var options=_ref3.options,label=_ref3.label,value=_ref3.value,placeholder=_ref3.placeholder,onSelect=_ref3.onSelect,isLoading=_ref3.isLoading,isSearchable=_ref3.isSearchable,labelStyle=_ref3.labelStyle,containerStyle=_ref3.containerStyle,dropdownContainerStyle=_ref3.dropdownContainerStyle,itemContainerStyle=_ref3.itemContainerStyle,itemTextStyle=_ref3.itemTextStyle,multiSelectedItemContainerStyle=_ref3.multiSelectedItemContainerStyle,multiSelectedItemTextStyle=_ref3.multiSelectedItemTextStyle,rest=(0,_objectWithoutProperties2.default)(_ref3,_excluded);var theme=(0,_react.useContext)(_native.ThemeContext);var _useState=(0,_react.useState)(false),_useState2=(0,_slicedToArray2.default)(_useState,2),showDropdown=_useState2[0],setShowDropdown=_useState2[1];var _useState3=(0,_react.useState)(""),_useState4=(0,_slicedToArray2.default)(_useState3,2),searchQuery=_useState4[0],setSearchQuery=_useState4[1];var multipleOptionsSelected=(value==null?void 0:value.length)>0;var defaultDropdownItemHeight=(itemContainerStyle==null?void 0:itemContainerStyle.height)||32;var formatStr=function formatStr(str){var _str$toLowerCase;return str==null?void 0:(_str$toLowerCase=str.toLowerCase())==null?void 0:_str$toLowerCase.trim();};var handleUnselection=function handleUnselection(item){var newValue=value.filter(function(selectedItem){return selectedItem.value!==item.value;});onSelect(newValue);};return _react.default.createElement(_.Container,{elevation:0,__self:_this,__source:{fileName:_jsxFileName,lineNumber:165,columnNumber:5}},_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",mb:1,fontSize:"s",color:"font.base"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:166,columnNumber:7}}),label),_react.default.createElement(_reactNative.TouchableWithoutFeedback,{disabled:isLoading,onPress:function onPress(){setShowDropdown(!showDropdown);setSearchQuery("");},__self:_this,__source:{fileName:_jsxFileName,lineNumber:175,columnNumber:7}},_react.default.createElement(_reactNative.View,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:182,columnNumber:9}},_react.default.createElement(_.Container,(0,_extends2.default)({borderWidth:1,borderColor:"border.grey400",p:multipleOptionsSelected?1:2,pr:2,flexDirection:"row",justifyContent:"space-between",alignItems:"center"},containerStyle,rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:183,columnNumber:11}}),!multipleOptionsSelected&&_react.default.createElement(_.Typography,{fontFamily:"inter400",fontSize:"s",color:"font.grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:195,columnNumber:15}},!multipleOptionsSelected&&placeholder),multipleOptionsSelected&&_react.default.createElement(_.Container,{flexWrap:"wrap",flexDirection:"row",maxWidth:"85%",__self:_this,__source:{fileName:_jsxFileName,lineNumber:200,columnNumber:15}},value==null?void 0:value.map(function(item,index){return _react.default.createElement(MultiSelectItem,{key:index,item:item,index:index,onUnselect:function onUnselect(){return handleUnselection(item);},multiSelectedItemContainerStyle:multiSelectedItemContainerStyle,multiSelectedItemTextStyle:multiSelectedItemTextStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:202,columnNumber:19}});})),isLoading?_react.default.createElement(_reactNative.ActivityIndicator,{size:"small",color:theme.colors.background.base,__self:_this,__source:{fileName:_jsxFileName,lineNumber:216,columnNumber:15}}):_react.default.createElement(_reactNativeRemixIcon.default,{name:"arrow-"+(showDropdown?"up":"down")+"-s-line",size:"20",color:"grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:221,columnNumber:15}})))),showDropdown&&_react.default.createElement(_.Card,(0,_extends2.default)({bg:"background.white",borderWidth:1,borderColor:"border.grey400",position:"absolute",left:0,right:0,top:"100%",maxHeight:defaultDropdownItemHeight*6,elevation:5},dropdownContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:232,columnNumber:9}}),isSearchable&&_react.default.createElement(_.Container,{p:1,__self:_this,__source:{fileName:_jsxFileName,lineNumber:245,columnNumber:13}},_react.default.createElement(_.Input,{placeholder:"Search",onChangeText:setSearchQuery,fontSize:"s",__self:_this,__source:{fileName:_jsxFileName,lineNumber:246,columnNumber:15}})),_react.default.createElement(_reactNative.ScrollView,{nestedScrollEnabled:true,__self:_this,__source:{fileName:_jsxFileName,lineNumber:253,columnNumber:11}},options.filter(function(item){var isItemAlreadySelected=Boolean(value.find(function(selectedItem){return selectedItem.value===item.value;}));return!isItemAlreadySelected;}).filter(function(item){if(searchQuery.length===0)return true;return formatStr(item.label).includes(formatStr(searchQuery));}).map(function(item,index){return _react.default.createElement(DropdownItem,{key:index,item:item,index:index,onPress:function onPress(){return onSelect([].concat((0,_toConsumableArray2.default)(value),[item]));},itemContainerStyle:itemContainerStyle,defaultDropdownItemHeight:defaultDropdownItemHeight,itemTextStyle:itemTextStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:266,columnNumber:17}});}))));};exports.MultiSelect=MultiSelect;MultiSelect.propTypes={label:_propTypes.default.string,options:_propTypes.default.arrayOf(_propTypes.default.shape({label:_propTypes.default.string.isRequired,value:_propTypes.default.string.isRequired})).isRequired,placeholder:_propTypes.default.string,value:_propTypes.default.oneOfType([_propTypes.default.string,_propTypes.default.array]),onSelect:_propTypes.default.func,isLoading:_propTypes.default.bool,isSearchable:_propTypes.default.bool,labelStyle:_propTypes.default.object,containerStyle:_propTypes.default.object,dropdownContainerStyle:_propTypes.default.object,itemContainerStyle:_propTypes.default.object,itemTextStyle:_propTypes.default.object,multiSelectedItemContainerStyle:_propTypes.default.object,multiSelectedItemTextStyle:_propTypes.default.object};MultiSelect.defaultProps={label:null,placeholder:"Select Option",value:null,onSelect:function onSelect(){},isLoading:false,isSearchable:false};
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.MultiSelect=void 0;var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireWildcard(require("react"));var _reactNativeRemixIcon=_interopRequireDefault(require("react-native-remix-icon"));var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _reactNative=require("react-native");var _native=require("styled-components/native");var _reactNativeGestureHandler=require("react-native-gesture-handler");var _=require("./");var _excluded=["options","label","value","placeholder","labelExtractor","valueExtractor","onSelect","selectedValue","deletedValue","isLoading","isSearchable","labelStyle","containerStyle","inputContainerStyle","dropdownContainerStyle","itemContainerStyle","itemTextStyle","multiSelectedItemContainerStyle","multiSelectedItemTextStyle"];var _this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/MultiSelect.js";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var MultiSelectItem=function MultiSelectItem(_ref){var label=_ref.label,onUnselect=_ref.onUnselect,multiSelectedItemContainerStyle=_ref.multiSelectedItemContainerStyle,multiSelectedItemTextStyle=_ref.multiSelectedItemTextStyle;return _react.default.createElement(_.Container,(0,_extends2.default)({borderWidth:1,borderColor:"border.base",bg:"background.grey100",borderRadius:2,flexDirection:"row",alignItems:"center",justifyContent:"space-between",p:1,m:1},multiSelectedItemContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:26,columnNumber:3}}),_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",fontSize:"s",mr:2,maxWidth:"90%"},multiSelectedItemTextStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:38,columnNumber:5}}),label),_react.default.createElement(_reactNative.TouchableWithoutFeedback,{onPress:onUnselect,__self:_this,__source:{fileName:_jsxFileName,lineNumber:47,columnNumber:5}},_react.default.createElement(_reactNativeRemixIcon.default,{name:"ri-close-line",size:"20",color:"grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:48,columnNumber:7}})));};MultiSelectItem.propTypes={label:_propTypes.default.string,onUnselect:_propTypes.default.func,multiSelectedItemContainerStyle:_propTypes.default.object,multiSelectedItemTextStyle:_propTypes.default.object};var DropdownItem=function DropdownItem(_ref2){var label=_ref2.label,onPress=_ref2.onPress,defaultDropdownItemHeight=_ref2.defaultDropdownItemHeight,itemContainerStyle=_ref2.itemContainerStyle,itemTextStyle=_ref2.itemTextStyle;return _react.default.createElement(_.Touchable,{bg:"background.white",onPress:onPress,__self:_this,__source:{fileName:_jsxFileName,lineNumber:68,columnNumber:5}},_react.default.createElement(_.Container,(0,_extends2.default)({height:defaultDropdownItemHeight,p:2},itemContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:69,columnNumber:7}}),_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",fontSize:"s",color:"font.grey"},itemTextStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:74,columnNumber:9}}),label)));};DropdownItem.propTypes={label:_propTypes.default.string,onPress:_propTypes.default.func,defaultDropdownItemHeight:_propTypes.default.number,itemContainerStyle:_propTypes.default.object,itemTextStyle:_propTypes.default.object};var MultiSelect=function MultiSelect(_ref3){var options=_ref3.options,label=_ref3.label,value=_ref3.value,placeholder=_ref3.placeholder,labelExtractor=_ref3.labelExtractor,valueExtractor=_ref3.valueExtractor,onSelect=_ref3.onSelect,selectedValue=_ref3.selectedValue,deletedValue=_ref3.deletedValue,isLoading=_ref3.isLoading,isSearchable=_ref3.isSearchable,labelStyle=_ref3.labelStyle,containerStyle=_ref3.containerStyle,inputContainerStyle=_ref3.inputContainerStyle,dropdownContainerStyle=_ref3.dropdownContainerStyle,itemContainerStyle=_ref3.itemContainerStyle,itemTextStyle=_ref3.itemTextStyle,multiSelectedItemContainerStyle=_ref3.multiSelectedItemContainerStyle,multiSelectedItemTextStyle=_ref3.multiSelectedItemTextStyle,rest=(0,_objectWithoutProperties2.default)(_ref3,_excluded);var theme=(0,_react.useContext)(_native.ThemeContext);var _useState=(0,_react.useState)(false),_useState2=(0,_slicedToArray2.default)(_useState,2),showDropdown=_useState2[0],setShowDropdown=_useState2[1];var _useState3=(0,_react.useState)(""),_useState4=(0,_slicedToArray2.default)(_useState3,2),searchQuery=_useState4[0],setSearchQuery=_useState4[1];var dropdownAnimatedHeight=(0,_reactNativeReanimated.useSharedValue)(0);var multipleOptionsSelected=(value==null?void 0:value.length)>0;var defaultDropdownItemHeight=(itemContainerStyle==null?void 0:itemContainerStyle.height)||32;var dropdownHeight=(dropdownContainerStyle==null?void 0:dropdownContainerStyle.height)||(dropdownContainerStyle==null?void 0:dropdownContainerStyle.maxHeight)||defaultDropdownItemHeight*6;var formatStr=function formatStr(str){var _str$toLowerCase;return str==null?void 0:(_str$toLowerCase=str.toLowerCase())==null?void 0:_str$toLowerCase.trim();};var animatedStyles=(0,_reactNativeReanimated.useAnimatedStyle)(function(){var _f=function _f(){return{height:(0,_reactNativeReanimated.withTiming)(dropdownAnimatedHeight.value,{duration:100,easing:_reactNativeReanimated.Easing.ease})};};_f._closure={withTiming:_reactNativeReanimated.withTiming,dropdownAnimatedHeight:dropdownAnimatedHeight,Easing:{ease:_reactNativeReanimated.Easing.ease}};_f.asString="function _f(){const{withTiming,dropdownAnimatedHeight,Easing}=jsThis._closure;{return{height:withTiming(dropdownAnimatedHeight.value,{duration:100,easing:Easing.ease})};}}";_f.__workletHash=10836038512691;_f.__location="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/MultiSelect.js (172:42)";_f.__optimalization=2;return _f;}());var toggleAnimation=function toggleAnimation(){dropdownAnimatedHeight.value=dropdownAnimatedHeight.value===0?dropdownHeight:0;};var handleOpenDropdown=function handleOpenDropdown(){_reactNative.Keyboard.dismiss();setSearchQuery("");setShowDropdown(!showDropdown);toggleAnimation();};var handleUnselection=function handleUnselection(item){var newValue=value.filter(function(selectedItem){return valueExtractor(selectedItem)!==valueExtractor(item);});onSelect(newValue);deletedValue(item);};var handleSelection=function handleSelection(item){onSelect([].concat((0,_toConsumableArray2.default)(value),[item]));selectedValue(item);};return _react.default.createElement(_.Container,(0,_extends2.default)({},containerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:207,columnNumber:5}}),_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",mb:1,fontSize:"s",color:"font.base"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:208,columnNumber:7}}),label),_react.default.createElement(_reactNative.TouchableWithoutFeedback,{disabled:isLoading,onPress:handleOpenDropdown,__self:_this,__source:{fileName:_jsxFileName,lineNumber:217,columnNumber:7}},_react.default.createElement(_.Container,(0,_extends2.default)({borderWidth:1,borderColor:"border.grey400",flexDirection:"row",justifyContent:"space-between",alignItems:"center",p:multipleOptionsSelected?1:2,pr:2,maxHeight:120},inputContainerStyle,rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:221,columnNumber:9}}),!multipleOptionsSelected&&_react.default.createElement(_.Typography,{fontFamily:"inter400",fontSize:"s",color:"font.grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:234,columnNumber:13}},!multipleOptionsSelected&&placeholder),multipleOptionsSelected&&_react.default.createElement(_reactNativeGestureHandler.ScrollView,{showsVerticalScrollIndicator:false,__self:_this,__source:{fileName:_jsxFileName,lineNumber:239,columnNumber:13}},_react.default.createElement(_.Container,{flexWrap:"wrap",flexDirection:"row",maxWidth:"85%",onStartShouldSetResponder:function onStartShouldSetResponder(){return true;},__self:_this,__source:{fileName:_jsxFileName,lineNumber:240,columnNumber:15}},value==null?void 0:value.map(function(item,index){var optionLabel=labelExtractor(item,index);return _react.default.createElement(MultiSelectItem,{key:index,label:optionLabel,onUnselect:function onUnselect(){return handleUnselection(item);},multiSelectedItemContainerStyle:multiSelectedItemContainerStyle,multiSelectedItemTextStyle:multiSelectedItemTextStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:249,columnNumber:21}});}))),isLoading?_react.default.createElement(_reactNative.ActivityIndicator,{size:"small",color:theme.colors.background.base,__self:_this,__source:{fileName:_jsxFileName,lineNumber:264,columnNumber:13}}):_react.default.createElement(_reactNativeRemixIcon.default,{name:"arrow-"+(showDropdown?"up":"down")+"-s-line",size:"20",color:"grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:269,columnNumber:13}}))),_react.default.createElement(_.Container,{overflow:"hidden",__self:_this,__source:{fileName:_jsxFileName,lineNumber:277,columnNumber:7}},_react.default.createElement(_reactNativeReanimated.default.View,{style:animatedStyles,__self:_this,__source:{fileName:_jsxFileName,lineNumber:278,columnNumber:9}},_react.default.createElement(_.Card,(0,_extends2.default)({bg:"background.white",borderWidth:1,borderColor:"border.grey400",maxHeight:dropdownHeight},dropdownContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:279,columnNumber:11}}),isSearchable&&_react.default.createElement(_.Container,{p:1,__self:_this,__source:{fileName:_jsxFileName,lineNumber:287,columnNumber:15}},_react.default.createElement(_.Input,{placeholder:"Search",onChangeText:setSearchQuery,fontSize:"s",__self:_this,__source:{fileName:_jsxFileName,lineNumber:288,columnNumber:17}})),_react.default.createElement(_reactNativeGestureHandler.ScrollView,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:295,columnNumber:13}},options.filter(function(item,index){var optionValue=valueExtractor(item,index);var isItemAlreadySelected=Boolean(value==null?void 0:value.find(function(selectedItem){return valueExtractor(selectedItem)===optionValue;}));return!isItemAlreadySelected;}).filter(function(item,index){var optionLabel=labelExtractor(item,index);if(searchQuery.length===0)return true;return formatStr(optionLabel).includes(formatStr(searchQuery));}).map(function(item,index){var optionLabel=labelExtractor(item,index);return _react.default.createElement(DropdownItem,{key:index,label:optionLabel,onPress:function onPress(){return handleSelection(item);},itemContainerStyle:itemContainerStyle,defaultDropdownItemHeight:defaultDropdownItemHeight,itemTextStyle:itemTextStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:317,columnNumber:21}});}))))));};exports.MultiSelect=MultiSelect;MultiSelect.propTypes={label:_propTypes.default.string,options:_propTypes.default.arrayOf(_propTypes.default.shape({label:_propTypes.default.string,value:_propTypes.default.string})).isRequired,placeholder:_propTypes.default.string,labelExtractor:_propTypes.default.func,valueExtractor:_propTypes.default.func,value:_propTypes.default.oneOfType([_propTypes.default.string,_propTypes.default.array]),onSelect:_propTypes.default.func,selectedValue:_propTypes.default.func,deletedValue:_propTypes.default.func,isLoading:_propTypes.default.bool,isSearchable:_propTypes.default.bool,labelStyle:_propTypes.default.object,containerStyle:_propTypes.default.object,inputContainerStyle:_propTypes.default.object,dropdownContainerStyle:_propTypes.default.object,itemContainerStyle:_propTypes.default.object,itemTextStyle:_propTypes.default.object,multiSelectedItemContainerStyle:_propTypes.default.object,multiSelectedItemTextStyle:_propTypes.default.object};MultiSelect.defaultProps={label:null,placeholder:"Select Option",labelExtractor:function labelExtractor(option){return option==null?void 0:option.label;},valueExtractor:function valueExtractor(option){return option==null?void 0:option.value;},value:null,onSelect:function onSelect(){},selectedValue:function selectedValue(){},deletedValue:function deletedValue(){},isLoading:false,isSearchable:false};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.OtpInputs=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _theme=require("../theme");var _=require("./");var _this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/OtpInputs.js";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var styles={inputStyles:{fontSize:0,backgroundColor:"transparent",color:"transparent",width:"100%",height:"100%",position:"absolute"},defaultContainerStyles:{margin:2,borderRadius:6,borderWidth:1,borderColor:_theme.theme.colors.background.secondary,backgroundColor:_theme.theme.colors.background.white,justifyContent:"center",alignItems:"center",minHeight:45,minWidth:45},defaultTextStyles:{fontSize:_theme.theme.fontSizes.xl,fontFamily:_theme.theme.fonts.inter700}};var OtpInputs=function OtpInputs(_ref){var _ref$handleChange=_ref.handleChange,handleChange=_ref$handleChange===void 0?function(){}:_ref$handleChange,_ref$numberOfInputs=_ref.numberOfInputs,numberOfInputs=_ref$numberOfInputs===void 0?4:_ref$numberOfInputs,_ref$error=_ref.error,error=_ref$error===void 0?false:_ref$error,_ref$code=_ref.code,code=_ref$code===void 0?"":_ref$code,containerStyles=_ref.containerStyles,textStyles=_ref.textStyles;var inputRef=_react.default.useRef();(0,_react.useEffect)(function(){_reactNative.InteractionManager.runAfterInteractions(function(){if(inputRef!=null&&inputRef.current){inputRef.current.focus();}});},[inputRef]);return _react.default.createElement(_.Container,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:79,columnNumber:5}},_react.default.createElement(_.Touchable,{onPress:function onPress(){inputRef&&inputRef.current.focus();},__self:_this,__source:{fileName:_jsxFileName,lineNumber:80,columnNumber:7}},_react.default.createElement(_.Container,{flexDirection:"row",alignItems:"center",justifyContent:"center",__self:_this,__source:{fileName:_jsxFileName,lineNumber:
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.OtpInputs=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _theme=require("../theme");var _=require("./");var _this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/OtpInputs.js";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var styles={inputStyles:{fontSize:0,backgroundColor:"transparent",color:"transparent",width:"100%",height:"100%",position:"absolute"},defaultContainerStyles:{margin:2,borderRadius:6,borderWidth:1,borderColor:_theme.theme.colors.background.secondary,backgroundColor:_theme.theme.colors.background.white,justifyContent:"center",alignItems:"center",minHeight:45,minWidth:45},defaultTextStyles:{fontSize:_theme.theme.fontSizes.xl,fontFamily:_theme.theme.fonts.inter700}};var OtpInputs=function OtpInputs(_ref){var _ref$handleChange=_ref.handleChange,handleChange=_ref$handleChange===void 0?function(){}:_ref$handleChange,_ref$numberOfInputs=_ref.numberOfInputs,numberOfInputs=_ref$numberOfInputs===void 0?4:_ref$numberOfInputs,_ref$error=_ref.error,error=_ref$error===void 0?false:_ref$error,_ref$code=_ref.code,code=_ref$code===void 0?"":_ref$code,containerStyles=_ref.containerStyles,textStyles=_ref.textStyles;var inputRef=_react.default.useRef();(0,_react.useEffect)(function(){_reactNative.InteractionManager.runAfterInteractions(function(){if(inputRef!=null&&inputRef.current){inputRef.current.focus();}});},[inputRef]);return _react.default.createElement(_.Container,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:79,columnNumber:5}},_react.default.createElement(_.Touchable,{onPress:function onPress(){_reactNative.Keyboard.dismiss();inputRef&&inputRef.current.focus();},__self:_this,__source:{fileName:_jsxFileName,lineNumber:80,columnNumber:7}},_react.default.createElement(_.Container,{flexDirection:"row",alignItems:"center",justifyContent:"center",__self:_this,__source:{fileName:_jsxFileName,lineNumber:86,columnNumber:9}},Array(numberOfInputs).fill().map(function(number,index){return _react.default.createElement(_.Container,(0,_extends2.default)({key:index},styles.defaultContainerStyles,containerStyles,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:95,columnNumber:17}}),_react.default.createElement(_.Typography,(0,_extends2.default)({accessibilityLabel:"otp",color:error?_theme.theme.colors.font.danger:_theme.theme.colors.font.secondary},styles.defaultTextStyles,textStyles,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:100,columnNumber:19}}),code[index]||""));}),_react.default.createElement(_.Input,(0,_extends2.default)({keyboardType:"phone-pad",selectionColor:"transparent",autoFocus:true,onChangeText:function onChangeText(value){if(!isNaN(value)){if(value.length<=numberOfInputs){handleChange&&handleChange(value);}if(value.length>=numberOfInputs){return _reactNative.Keyboard.dismiss();}}},ref:inputRef,value:code||""},styles.inputStyles,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:115,columnNumber:11}})))));};exports.OtpInputs=OtpInputs;OtpInputs.defaultProps={containerStyles:{},textStyles:{}};OtpInputs.propTypes={code:_propTypes.default.string.isRequired,numberOfInputs:_propTypes.default.number.isRequired,handleChange:_propTypes.default.func.isRequired,error:_propTypes.default.bool,containerStyles:_propTypes.default.object,textStyles:_propTypes.default.object};
|
package/lib/components/Select.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.Select=void 0;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireWildcard(require("react"));var _reactNativeRemixIcon=_interopRequireDefault(require("react-native-remix-icon"));var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNative=require("react-native");var _native=require("styled-components/native");var _=require("./");var _excluded=["options","label","value","placeholder","onSelect","isLoading","isSearchable","labelStyle","containerStyle","dropdownContainerStyle","itemContainerStyle","itemTextStyle","selectedItemContainerStyle","selectedItemTextStyle"];var _this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Select.js";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var DropdownItem=function DropdownItem(_ref){var item=_ref.item,index=_ref.index,isSelectedItem=_ref.isSelectedItem,defaultDropdownItemHeight=_ref.defaultDropdownItemHeight,onPress=_ref.onPress,itemContainerStyle=_ref.itemContainerStyle,selectedItemContainerStyle=_ref.selectedItemContainerStyle,itemTextStyle=_ref.itemTextStyle,selectedItemTextStyle=_ref.selectedItemTextStyle;return _react.default.createElement(_.Touchable,{key:index,bg:isSelectedItem?"background.base":"background.white",onPress:onPress,__self:_this,__source:{fileName:_jsxFileName,lineNumber:20,columnNumber:3}},_react.default.createElement(_.Container,(0,_extends2.default)({height:defaultDropdownItemHeight,p:2},itemContainerStyle,isSelectedItem&&selectedItemContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:25,columnNumber:5}}),_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",fontSize:"s",color:isSelectedItem?"font.white":"font.grey"},itemTextStyle,isSelectedItem&&selectedItemTextStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:31,columnNumber:7}}),item==null?void 0:item.label)));};DropdownItem.propTypes={item:_propTypes.default.object,index:_propTypes.default.number,isSelectedItem:_propTypes.default.bool,defaultDropdownItemHeight:_propTypes.default.number,onPress:_propTypes.default.func,itemContainerStyle:_propTypes.default.object,selectedItemContainerStyle:_propTypes.default.object,itemTextStyle:_propTypes.default.object,selectedItemTextStyle:_propTypes.default.object};var Select=function Select(_ref2){var _options$selectedItem;var options=_ref2.options,label=_ref2.label,value=_ref2.value,placeholder=_ref2.placeholder,onSelect=_ref2.onSelect,isLoading=_ref2.isLoading,isSearchable=_ref2.isSearchable,labelStyle=_ref2.labelStyle,containerStyle=_ref2.containerStyle,dropdownContainerStyle=_ref2.dropdownContainerStyle,itemContainerStyle=_ref2.itemContainerStyle,itemTextStyle=_ref2.itemTextStyle,selectedItemContainerStyle=_ref2.selectedItemContainerStyle,selectedItemTextStyle=_ref2.selectedItemTextStyle,rest=(0,_objectWithoutProperties2.default)(_ref2,_excluded);var _useState=(0,_react.useState)(false),_useState2=(0,_slicedToArray2.default)(_useState,2),showDropdown=_useState2[0],setShowDropdown=_useState2[1];var _useState3=(0,_react.useState)(""),_useState4=(0,_slicedToArray2.default)(_useState3,2),searchQuery=_useState4[0],setSearchQuery=_useState4[1];var theme=(0,_react.useContext)(_native.ThemeContext);var selectedItemIndex=options==null?void 0:options.findIndex(function(item){return(item==null?void 0:item.value)===value;});var defaultDropdownItemHeight=(itemContainerStyle==null?void 0:itemContainerStyle.height)||32;var formatStr=function formatStr(str){var _str$toLowerCase;return str==null?void 0:(_str$toLowerCase=str.toLowerCase())==null?void 0:_str$toLowerCase.trim();};var handleItemSelection=function handleItemSelection(item,index){setShowDropdown(false);onSelect(item,index);};return _react.default.createElement(_.Container,{elevation:0,__self:_this,__source:{fileName:_jsxFileName,lineNumber:130,columnNumber:5}},_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",mb:1,fontSize:"s",color:"font.base"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:131,columnNumber:7}}),label),_react.default.createElement(_.Touchable,{disabled:isLoading,onPress:function onPress(){setShowDropdown(!showDropdown);setSearchQuery("");},__self:_this,__source:{fileName:_jsxFileName,lineNumber:140,columnNumber:7}},_react.default.createElement(_.Container,(0,_extends2.default)({borderWidth:1,borderColor:"border.grey400",p:2,flexDirection:"row",justifyContent:"space-between",alignItems:"center"},containerStyle,rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:147,columnNumber:9}}),_react.default.createElement(_.Typography,{fontFamily:"inter400",fontSize:"s",color:"font.grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:157,columnNumber:11}},(options==null?void 0:(_options$selectedItem=options[selectedItemIndex])==null?void 0:_options$selectedItem.label)||placeholder),isLoading?_react.default.createElement(_reactNative.ActivityIndicator,{size:"small",color:theme.colors.background.base,__self:_this,__source:{fileName:_jsxFileName,lineNumber:161,columnNumber:13}}):_react.default.createElement(_reactNativeRemixIcon.default,{name:"arrow-"+(showDropdown?"up":"down")+"-s-line",size:"20",color:"grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:166,columnNumber:13}}))),showDropdown&&_react.default.createElement(_.Container,(0,_extends2.default)({bg:"background.white",borderWidth:1,borderColor:"border.grey400",position:"absolute",left:0,right:0,top:"100%",maxHeight:defaultDropdownItemHeight*6,shadowOpacity:0.25,shadowRadius:3.84,"shadow-color":"#000",shadowOffset:{width:0,height:2},elevation:5},dropdownContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:175,columnNumber:9}}),isSearchable&&_react.default.createElement(_.Container,{p:1,__self:_this,__source:{fileName:_jsxFileName,lineNumber:195,columnNumber:13}},_react.default.createElement(_.Input,{placeholder:"Search",onChangeText:setSearchQuery,fontSize:"s",__self:_this,__source:{fileName:_jsxFileName,lineNumber:196,columnNumber:15}})),_react.default.createElement(_reactNative.ScrollView,{nestedScrollEnabled:true,__self:_this,__source:{fileName:_jsxFileName,lineNumber:203,columnNumber:11}},options.filter(function(item){if((searchQuery==null?void 0:searchQuery.length)===0)return true;return formatStr(item.label).includes(formatStr(searchQuery));}).map(function(item,index){return _react.default.createElement(DropdownItem,{key:index,item:item,index:index,isSelectedItem:(item==null?void 0:item.value)===value,defaultDropdownItemHeight:defaultDropdownItemHeight,onPress:function onPress(){return handleItemSelection(item,index);},itemContainerStyle:itemContainerStyle,selectedItemContainerStyle:selectedItemContainerStyle,itemTextStyle:itemTextStyle,selectedItemTextStyle:selectedItemTextStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:210,columnNumber:17}});}))));};exports.Select=Select;Select.propTypes={label:_propTypes.default.string,options:_propTypes.default.arrayOf(_propTypes.default.shape({label:_propTypes.default.string.isRequired,value:_propTypes.default.string.isRequired})).isRequired,placeholder:_propTypes.default.string,value:_propTypes.default.string,onSelect:_propTypes.default.func,isLoading:_propTypes.default.bool,isSearchable:_propTypes.default.bool,labelStyle:_propTypes.default.object,containerStyle:_propTypes.default.object,dropdownContainerStyle:_propTypes.default.object,itemContainerStyle:_propTypes.default.object,itemTextStyle:_propTypes.default.object,selectedItemContainerStyle:_propTypes.default.object,selectedItemTextStyle:_propTypes.default.object};Select.defaultProps={label:null,placeholder:"Select Option",value:null,onSelect:function onSelect(){},isLoading:false,isSearchable:false};
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.Select=void 0;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireWildcard(require("react"));var _reactNativeRemixIcon=_interopRequireDefault(require("react-native-remix-icon"));var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _reactNative=require("react-native");var _native=require("styled-components/native");var _reactNativeGestureHandler=require("react-native-gesture-handler");var _=require("./");var _excluded=["options","label","value","placeholder","labelExtractor","valueExtractor","onSelect","isLoading","isSearchable","labelStyle","containerStyle","inputContainerStyle","dropdownContainerStyle","itemContainerStyle","itemTextStyle","selectedItemContainerStyle","selectedItemTextStyle"];var _this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Select.js";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var DropdownItem=function DropdownItem(_ref){var label=_ref.label,isSelectedItem=_ref.isSelectedItem,defaultDropdownItemHeight=_ref.defaultDropdownItemHeight,onPress=_ref.onPress,itemContainerStyle=_ref.itemContainerStyle,selectedItemContainerStyle=_ref.selectedItemContainerStyle,itemTextStyle=_ref.itemTextStyle,selectedItemTextStyle=_ref.selectedItemTextStyle;return _react.default.createElement(_reactNative.TouchableWithoutFeedback,{onPress:onPress,__self:_this,__source:{fileName:_jsxFileName,lineNumber:30,columnNumber:3}},_react.default.createElement(_.Container,(0,_extends2.default)({bg:isSelectedItem?"background.base":"background.white",height:defaultDropdownItemHeight,p:2},itemContainerStyle,isSelectedItem&&selectedItemContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:31,columnNumber:5}}),_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",fontSize:"s",color:isSelectedItem?"font.white":"font.grey"},itemTextStyle,isSelectedItem&&selectedItemTextStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:38,columnNumber:7}}),label)));};DropdownItem.propTypes={label:_propTypes.default.string.isRequired,isSelectedItem:_propTypes.default.bool,defaultDropdownItemHeight:_propTypes.default.number,onPress:_propTypes.default.func,itemContainerStyle:_propTypes.default.object,selectedItemContainerStyle:_propTypes.default.object,itemTextStyle:_propTypes.default.object,selectedItemTextStyle:_propTypes.default.object};var Select=function Select(_ref2){var options=_ref2.options,label=_ref2.label,value=_ref2.value,placeholder=_ref2.placeholder,labelExtractor=_ref2.labelExtractor,valueExtractor=_ref2.valueExtractor,onSelect=_ref2.onSelect,isLoading=_ref2.isLoading,isSearchable=_ref2.isSearchable,labelStyle=_ref2.labelStyle,containerStyle=_ref2.containerStyle,inputContainerStyle=_ref2.inputContainerStyle,dropdownContainerStyle=_ref2.dropdownContainerStyle,itemContainerStyle=_ref2.itemContainerStyle,itemTextStyle=_ref2.itemTextStyle,selectedItemContainerStyle=_ref2.selectedItemContainerStyle,selectedItemTextStyle=_ref2.selectedItemTextStyle,rest=(0,_objectWithoutProperties2.default)(_ref2,_excluded);var theme=(0,_react.useContext)(_native.ThemeContext);var _useState=(0,_react.useState)(false),_useState2=(0,_slicedToArray2.default)(_useState,2),showDropdown=_useState2[0],setShowDropdown=_useState2[1];var _useState3=(0,_react.useState)(""),_useState4=(0,_slicedToArray2.default)(_useState3,2),searchQuery=_useState4[0],setSearchQuery=_useState4[1];var dropdownAnimatedHeight=(0,_reactNativeReanimated.useSharedValue)(0);var defaultDropdownItemHeight=(itemContainerStyle==null?void 0:itemContainerStyle.height)||32;var dropdownHeight=(dropdownContainerStyle==null?void 0:dropdownContainerStyle.height)||(dropdownContainerStyle==null?void 0:dropdownContainerStyle.maxHeight)||defaultDropdownItemHeight*6;var selectedOptionLabel=labelExtractor(value||{});var selectedOptionValue=valueExtractor(value||{});var formatStr=function formatStr(str){var _str$toLowerCase;return str==null?void 0:(_str$toLowerCase=str.toLowerCase())==null?void 0:_str$toLowerCase.trim();};var animatedStyles=(0,_reactNativeReanimated.useAnimatedStyle)(function(){var _f=function _f(){return{height:(0,_reactNativeReanimated.withTiming)(dropdownAnimatedHeight.value,{duration:100,easing:_reactNativeReanimated.Easing.ease})};};_f._closure={withTiming:_reactNativeReanimated.withTiming,dropdownAnimatedHeight:dropdownAnimatedHeight,Easing:{ease:_reactNativeReanimated.Easing.ease}};_f.asString="function _f(){const{withTiming,dropdownAnimatedHeight,Easing}=jsThis._closure;{return{height:withTiming(dropdownAnimatedHeight.value,{duration:100,easing:Easing.ease})};}}";_f.__workletHash=10836038512691;_f.__location="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Select.js (139:42)";_f.__optimalization=2;return _f;}());var toggleAnimation=function toggleAnimation(){dropdownAnimatedHeight.value=dropdownAnimatedHeight.value===0?dropdownHeight:0;};var handleOpenDropdown=function handleOpenDropdown(){_reactNative.Keyboard.dismiss();setSearchQuery("");setShowDropdown(!showDropdown);toggleAnimation();};var handleItemSelection=function handleItemSelection(item,index){setShowDropdown(false);toggleAnimation();onSelect(item,index);};return _react.default.createElement(_.Container,(0,_extends2.default)({},containerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:167,columnNumber:5}}),_react.default.createElement(_.Typography,(0,_extends2.default)({fontFamily:"inter400",mb:1,fontSize:"s",color:"font.base"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:168,columnNumber:7}}),label),_react.default.createElement(_reactNative.TouchableWithoutFeedback,{disabled:isLoading,onPress:handleOpenDropdown,__self:_this,__source:{fileName:_jsxFileName,lineNumber:177,columnNumber:7}},_react.default.createElement(_.Container,(0,_extends2.default)({borderWidth:1,borderColor:"border.grey400",p:2,flexDirection:"row",justifyContent:"space-between",alignItems:"center"},inputContainerStyle,rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:181,columnNumber:9}}),_react.default.createElement(_.Typography,{fontFamily:"inter400",fontSize:"s",color:"font.grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:191,columnNumber:11}},selectedOptionLabel||placeholder),isLoading?_react.default.createElement(_reactNative.ActivityIndicator,{size:"small",color:theme.colors.background.base,__self:_this,__source:{fileName:_jsxFileName,lineNumber:195,columnNumber:13}}):_react.default.createElement(_reactNativeRemixIcon.default,{name:"arrow-"+(showDropdown?"up":"down")+"-s-line",size:"20",color:"grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:200,columnNumber:13}}))),_react.default.createElement(_.Container,{overflow:"hidden",__self:_this,__source:{fileName:_jsxFileName,lineNumber:208,columnNumber:7}},_react.default.createElement(_reactNativeReanimated.default.View,{style:animatedStyles,__self:_this,__source:{fileName:_jsxFileName,lineNumber:209,columnNumber:9}},_react.default.createElement(_.Card,(0,_extends2.default)({bg:"background.white",borderWidth:1,borderColor:"border.grey400",maxHeight:dropdownHeight},dropdownContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:210,columnNumber:11}}),isSearchable&&_react.default.createElement(_.Container,{p:1,__self:_this,__source:{fileName:_jsxFileName,lineNumber:218,columnNumber:15}},_react.default.createElement(_.Input,{placeholder:"Search",onChangeText:setSearchQuery,fontSize:"s",__self:_this,__source:{fileName:_jsxFileName,lineNumber:219,columnNumber:17}})),_react.default.createElement(_reactNativeGestureHandler.ScrollView,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:226,columnNumber:13}},options.filter(function(item,index){var label=labelExtractor(item,index);if((searchQuery==null?void 0:searchQuery.length)===0)return true;return formatStr(label).includes(formatStr(searchQuery));}).map(function(item,index){var optionLabel=labelExtractor(item,index);var optionValue=valueExtractor(item,index);var isSelectedItem=selectedOptionValue&&selectedOptionValue===optionValue;return _react.default.createElement(DropdownItem,{key:index,label:optionLabel,isSelectedItem:isSelectedItem,defaultDropdownItemHeight:defaultDropdownItemHeight,onPress:function onPress(){return handleItemSelection(item,index);},itemContainerStyle:itemContainerStyle,selectedItemContainerStyle:selectedItemContainerStyle,itemTextStyle:itemTextStyle,selectedItemTextStyle:selectedItemTextStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:239,columnNumber:21}});}))))));};exports.Select=Select;Select.propTypes={label:_propTypes.default.string,options:_propTypes.default.arrayOf(_propTypes.default.shape({label:_propTypes.default.string,value:_propTypes.default.string})).isRequired,placeholder:_propTypes.default.string,labelExtractor:_propTypes.default.func,valueExtractor:_propTypes.default.func,value:_propTypes.default.object,onSelect:_propTypes.default.func,isLoading:_propTypes.default.bool,isSearchable:_propTypes.default.bool,labelStyle:_propTypes.default.object,containerStyle:_propTypes.default.object,inputContainerStyle:_propTypes.default.object,dropdownContainerStyle:_propTypes.default.object,itemContainerStyle:_propTypes.default.object,itemTextStyle:_propTypes.default.object,selectedItemContainerStyle:_propTypes.default.object,selectedItemTextStyle:_propTypes.default.object};Select.defaultProps={label:null,placeholder:"Select Option",labelExtractor:function labelExtractor(option){return option==null?void 0:option.label;},valueExtractor:function valueExtractor(option){return option==null?void 0:option.value;},value:null,onSelect:function onSelect(){},isLoading:false,isSearchable:false};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ProviderContext=void 0;var _react=_interopRequireDefault(require("react"));var ProviderContext=_react.default.createContext(null);exports.ProviderContext=ProviderContext;
|
package/package.json
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import React, { useState, useContext } from "react";
|
|
2
2
|
import Icon from "react-native-remix-icon";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
|
+
import Animated, {
|
|
5
|
+
useSharedValue,
|
|
6
|
+
useAnimatedStyle,
|
|
7
|
+
withTiming,
|
|
8
|
+
Easing,
|
|
9
|
+
} from "react-native-reanimated";
|
|
4
10
|
import {
|
|
5
11
|
ActivityIndicator,
|
|
6
|
-
ScrollView,
|
|
7
|
-
View,
|
|
8
12
|
TouchableWithoutFeedback,
|
|
13
|
+
Keyboard,
|
|
9
14
|
} from "react-native";
|
|
10
15
|
import { ThemeContext } from "styled-components/native";
|
|
16
|
+
import { ScrollView } from "react-native-gesture-handler";
|
|
11
17
|
|
|
12
18
|
import { Container, Input, Touchable, Typography, Card } from "@components";
|
|
13
19
|
|
|
14
20
|
const MultiSelectItem = ({
|
|
15
|
-
|
|
21
|
+
label,
|
|
16
22
|
onUnselect,
|
|
17
23
|
multiSelectedItemContainerStyle,
|
|
18
24
|
multiSelectedItemTextStyle,
|
|
@@ -24,6 +30,7 @@ const MultiSelectItem = ({
|
|
|
24
30
|
borderRadius={2}
|
|
25
31
|
flexDirection="row"
|
|
26
32
|
alignItems="center"
|
|
33
|
+
justifyContent="space-between"
|
|
27
34
|
p={1}
|
|
28
35
|
m={1}
|
|
29
36
|
{...multiSelectedItemContainerStyle}
|
|
@@ -32,33 +39,33 @@ const MultiSelectItem = ({
|
|
|
32
39
|
fontFamily="inter400"
|
|
33
40
|
fontSize="s"
|
|
34
41
|
mr={2}
|
|
42
|
+
maxWidth="90%"
|
|
35
43
|
{...multiSelectedItemTextStyle}
|
|
36
44
|
>
|
|
37
|
-
{
|
|
45
|
+
{label}
|
|
38
46
|
</Typography>
|
|
39
|
-
<
|
|
47
|
+
<TouchableWithoutFeedback onPress={onUnselect}>
|
|
40
48
|
<Icon name="ri-close-line" size="20" color="grey" />
|
|
41
|
-
</
|
|
49
|
+
</TouchableWithoutFeedback>
|
|
42
50
|
</Container>
|
|
43
51
|
);
|
|
44
52
|
|
|
45
53
|
MultiSelectItem.propTypes = {
|
|
46
|
-
|
|
54
|
+
label: PropTypes.string,
|
|
47
55
|
onUnselect: PropTypes.func,
|
|
48
56
|
multiSelectedItemContainerStyle: PropTypes.object,
|
|
49
57
|
multiSelectedItemTextStyle: PropTypes.object,
|
|
50
58
|
};
|
|
51
59
|
|
|
52
60
|
const DropdownItem = ({
|
|
53
|
-
|
|
54
|
-
index,
|
|
61
|
+
label,
|
|
55
62
|
onPress,
|
|
56
63
|
defaultDropdownItemHeight,
|
|
57
64
|
itemContainerStyle,
|
|
58
65
|
itemTextStyle,
|
|
59
66
|
}) => {
|
|
60
67
|
return (
|
|
61
|
-
<Touchable
|
|
68
|
+
<Touchable bg="background.white" onPress={onPress}>
|
|
62
69
|
<Container
|
|
63
70
|
height={defaultDropdownItemHeight}
|
|
64
71
|
p={2}
|
|
@@ -70,7 +77,7 @@ const DropdownItem = ({
|
|
|
70
77
|
color="font.grey"
|
|
71
78
|
{...itemTextStyle}
|
|
72
79
|
>
|
|
73
|
-
{
|
|
80
|
+
{label}
|
|
74
81
|
</Typography>
|
|
75
82
|
</Container>
|
|
76
83
|
</Touchable>
|
|
@@ -78,8 +85,7 @@ const DropdownItem = ({
|
|
|
78
85
|
};
|
|
79
86
|
|
|
80
87
|
DropdownItem.propTypes = {
|
|
81
|
-
|
|
82
|
-
index: PropTypes.number,
|
|
88
|
+
label: PropTypes.string,
|
|
83
89
|
onPress: PropTypes.func,
|
|
84
90
|
defaultDropdownItemHeight: PropTypes.number,
|
|
85
91
|
itemContainerStyle: PropTypes.object,
|
|
@@ -94,7 +100,9 @@ DropdownItem.propTypes = {
|
|
|
94
100
|
* <img src="screenshots/multiSelect/multiSelect.png" />
|
|
95
101
|
* </div>
|
|
96
102
|
*
|
|
97
|
-
*
|
|
103
|
+
* ## Usage
|
|
104
|
+
*
|
|
105
|
+
* ### Import and use MultiSelect component.
|
|
98
106
|
*
|
|
99
107
|
* ```js
|
|
100
108
|
* import * as React, { useState } from 'react';
|
|
@@ -115,18 +123,15 @@ DropdownItem.propTypes = {
|
|
|
115
123
|
* const [selectedOptions, setSelectedOptions] = useState([])
|
|
116
124
|
*
|
|
117
125
|
* return (
|
|
118
|
-
* <
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
* />
|
|
125
|
-
* </Container>
|
|
126
|
+
* <MultiSelect
|
|
127
|
+
* label="Select"
|
|
128
|
+
* options={OPTIONS}
|
|
129
|
+
* value={selectedOptions}
|
|
130
|
+
* onSelect={setSelectedOptions}
|
|
131
|
+
* />
|
|
126
132
|
* );
|
|
127
133
|
* }
|
|
128
134
|
* ```
|
|
129
|
-
*
|
|
130
135
|
*/
|
|
131
136
|
|
|
132
137
|
export const MultiSelect = ({
|
|
@@ -134,11 +139,16 @@ export const MultiSelect = ({
|
|
|
134
139
|
label,
|
|
135
140
|
value,
|
|
136
141
|
placeholder,
|
|
142
|
+
labelExtractor,
|
|
143
|
+
valueExtractor,
|
|
137
144
|
onSelect,
|
|
145
|
+
selectedValue,
|
|
146
|
+
deletedValue,
|
|
138
147
|
isLoading,
|
|
139
148
|
isSearchable,
|
|
140
149
|
labelStyle,
|
|
141
150
|
containerStyle,
|
|
151
|
+
inputContainerStyle,
|
|
142
152
|
dropdownContainerStyle,
|
|
143
153
|
itemContainerStyle,
|
|
144
154
|
itemTextStyle,
|
|
@@ -149,20 +159,52 @@ export const MultiSelect = ({
|
|
|
149
159
|
const theme = useContext(ThemeContext);
|
|
150
160
|
const [showDropdown, setShowDropdown] = useState(false);
|
|
151
161
|
const [searchQuery, setSearchQuery] = useState("");
|
|
162
|
+
const dropdownAnimatedHeight = useSharedValue(0);
|
|
152
163
|
|
|
153
164
|
const multipleOptionsSelected = value?.length > 0;
|
|
154
165
|
const defaultDropdownItemHeight = itemContainerStyle?.height || 32;
|
|
166
|
+
const dropdownHeight =
|
|
167
|
+
dropdownContainerStyle?.height ||
|
|
168
|
+
dropdownContainerStyle?.maxHeight ||
|
|
169
|
+
defaultDropdownItemHeight * 6;
|
|
155
170
|
const formatStr = str => str?.toLowerCase()?.trim();
|
|
156
171
|
|
|
172
|
+
const animatedStyles = useAnimatedStyle(() => {
|
|
173
|
+
return {
|
|
174
|
+
height: withTiming(dropdownAnimatedHeight.value, {
|
|
175
|
+
duration: 100,
|
|
176
|
+
easing: Easing.ease,
|
|
177
|
+
}),
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
const toggleAnimation = () => {
|
|
182
|
+
dropdownAnimatedHeight.value =
|
|
183
|
+
dropdownAnimatedHeight.value === 0 ? dropdownHeight : 0;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const handleOpenDropdown = () => {
|
|
187
|
+
Keyboard.dismiss();
|
|
188
|
+
setSearchQuery("");
|
|
189
|
+
setShowDropdown(!showDropdown);
|
|
190
|
+
toggleAnimation();
|
|
191
|
+
};
|
|
192
|
+
|
|
157
193
|
const handleUnselection = item => {
|
|
158
194
|
const newValue = value.filter(
|
|
159
|
-
selectedItem => selectedItem
|
|
195
|
+
selectedItem => valueExtractor(selectedItem) !== valueExtractor(item)
|
|
160
196
|
);
|
|
161
197
|
onSelect(newValue);
|
|
198
|
+
deletedValue(item);
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
const handleSelection = item => {
|
|
202
|
+
onSelect([...value, item]);
|
|
203
|
+
selectedValue(item);
|
|
162
204
|
};
|
|
163
205
|
|
|
164
206
|
return (
|
|
165
|
-
<Container
|
|
207
|
+
<Container {...containerStyle}>
|
|
166
208
|
<Typography
|
|
167
209
|
fontFamily="inter400"
|
|
168
210
|
mb={1}
|
|
@@ -174,108 +216,118 @@ export const MultiSelect = ({
|
|
|
174
216
|
</Typography>
|
|
175
217
|
<TouchableWithoutFeedback
|
|
176
218
|
disabled={isLoading}
|
|
177
|
-
onPress={
|
|
178
|
-
setShowDropdown(!showDropdown);
|
|
179
|
-
setSearchQuery("");
|
|
180
|
-
}}
|
|
219
|
+
onPress={handleOpenDropdown}
|
|
181
220
|
>
|
|
182
|
-
<
|
|
183
|
-
<Container
|
|
184
|
-
borderWidth={1}
|
|
185
|
-
borderColor="border.grey400"
|
|
186
|
-
p={multipleOptionsSelected ? 1 : 2}
|
|
187
|
-
pr={2}
|
|
188
|
-
flexDirection="row"
|
|
189
|
-
justifyContent="space-between"
|
|
190
|
-
alignItems="center"
|
|
191
|
-
{...containerStyle}
|
|
192
|
-
{...rest}
|
|
193
|
-
>
|
|
194
|
-
{!multipleOptionsSelected && (
|
|
195
|
-
<Typography fontFamily="inter400" fontSize="s" color="font.grey">
|
|
196
|
-
{!multipleOptionsSelected && placeholder}
|
|
197
|
-
</Typography>
|
|
198
|
-
)}
|
|
199
|
-
{multipleOptionsSelected && (
|
|
200
|
-
<Container flexWrap="wrap" flexDirection="row" maxWidth="85%">
|
|
201
|
-
{value?.map((item, index) => (
|
|
202
|
-
<MultiSelectItem
|
|
203
|
-
key={index}
|
|
204
|
-
item={item}
|
|
205
|
-
index={index}
|
|
206
|
-
onUnselect={() => handleUnselection(item)}
|
|
207
|
-
multiSelectedItemContainerStyle={
|
|
208
|
-
multiSelectedItemContainerStyle
|
|
209
|
-
}
|
|
210
|
-
multiSelectedItemTextStyle={multiSelectedItemTextStyle}
|
|
211
|
-
/>
|
|
212
|
-
))}
|
|
213
|
-
</Container>
|
|
214
|
-
)}
|
|
215
|
-
{isLoading ? (
|
|
216
|
-
<ActivityIndicator
|
|
217
|
-
size="small"
|
|
218
|
-
color={theme.colors.background.base}
|
|
219
|
-
/>
|
|
220
|
-
) : (
|
|
221
|
-
<Icon
|
|
222
|
-
name={`arrow-${showDropdown ? "up" : "down"}-s-line`}
|
|
223
|
-
size="20"
|
|
224
|
-
color="grey"
|
|
225
|
-
/>
|
|
226
|
-
)}
|
|
227
|
-
</Container>
|
|
228
|
-
</View>
|
|
229
|
-
</TouchableWithoutFeedback>
|
|
230
|
-
|
|
231
|
-
{showDropdown && (
|
|
232
|
-
<Card
|
|
233
|
-
bg="background.white"
|
|
221
|
+
<Container
|
|
234
222
|
borderWidth={1}
|
|
235
223
|
borderColor="border.grey400"
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
{...
|
|
224
|
+
flexDirection="row"
|
|
225
|
+
justifyContent="space-between"
|
|
226
|
+
alignItems="center"
|
|
227
|
+
p={multipleOptionsSelected ? 1 : 2}
|
|
228
|
+
pr={2}
|
|
229
|
+
maxHeight={120}
|
|
230
|
+
{...inputContainerStyle}
|
|
231
|
+
{...rest}
|
|
243
232
|
>
|
|
244
|
-
{
|
|
245
|
-
<
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
onChangeText={setSearchQuery}
|
|
249
|
-
fontSize="s"
|
|
250
|
-
/>
|
|
251
|
-
</Container>
|
|
233
|
+
{!multipleOptionsSelected && (
|
|
234
|
+
<Typography fontFamily="inter400" fontSize="s" color="font.grey">
|
|
235
|
+
{!multipleOptionsSelected && placeholder}
|
|
236
|
+
</Typography>
|
|
252
237
|
)}
|
|
253
|
-
|
|
254
|
-
{
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
238
|
+
{multipleOptionsSelected && (
|
|
239
|
+
<ScrollView showsVerticalScrollIndicator={false}>
|
|
240
|
+
<Container
|
|
241
|
+
flexWrap="wrap"
|
|
242
|
+
flexDirection="row"
|
|
243
|
+
maxWidth="85%"
|
|
244
|
+
onStartShouldSetResponder={() => true}
|
|
245
|
+
>
|
|
246
|
+
{value?.map((item, index) => {
|
|
247
|
+
const optionLabel = labelExtractor(item, index);
|
|
248
|
+
return (
|
|
249
|
+
<MultiSelectItem
|
|
250
|
+
key={index}
|
|
251
|
+
label={optionLabel}
|
|
252
|
+
onUnselect={() => handleUnselection(item)}
|
|
253
|
+
multiSelectedItemContainerStyle={
|
|
254
|
+
multiSelectedItemContainerStyle
|
|
255
|
+
}
|
|
256
|
+
multiSelectedItemTextStyle={multiSelectedItemTextStyle}
|
|
257
|
+
/>
|
|
258
|
+
);
|
|
259
|
+
})}
|
|
260
|
+
</Container>
|
|
261
|
+
</ScrollView>
|
|
262
|
+
)}
|
|
263
|
+
{isLoading ? (
|
|
264
|
+
<ActivityIndicator
|
|
265
|
+
size="small"
|
|
266
|
+
color={theme.colors.background.base}
|
|
267
|
+
/>
|
|
268
|
+
) : (
|
|
269
|
+
<Icon
|
|
270
|
+
name={`arrow-${showDropdown ? "up" : "down"}-s-line`}
|
|
271
|
+
size="20"
|
|
272
|
+
color="grey"
|
|
273
|
+
/>
|
|
274
|
+
)}
|
|
275
|
+
</Container>
|
|
276
|
+
</TouchableWithoutFeedback>
|
|
277
|
+
<Container overflow="hidden">
|
|
278
|
+
<Animated.View style={animatedStyles}>
|
|
279
|
+
<Card
|
|
280
|
+
bg="background.white"
|
|
281
|
+
borderWidth={1}
|
|
282
|
+
borderColor="border.grey400"
|
|
283
|
+
maxHeight={dropdownHeight}
|
|
284
|
+
{...dropdownContainerStyle}
|
|
285
|
+
>
|
|
286
|
+
{isSearchable && (
|
|
287
|
+
<Container p={1}>
|
|
288
|
+
<Input
|
|
289
|
+
placeholder="Search"
|
|
290
|
+
onChangeText={setSearchQuery}
|
|
291
|
+
fontSize="s"
|
|
274
292
|
/>
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
293
|
+
</Container>
|
|
294
|
+
)}
|
|
295
|
+
<ScrollView>
|
|
296
|
+
{options
|
|
297
|
+
.filter((item, index) => {
|
|
298
|
+
const optionValue = valueExtractor(item, index);
|
|
299
|
+
const isItemAlreadySelected = Boolean(
|
|
300
|
+
value?.find(
|
|
301
|
+
selectedItem =>
|
|
302
|
+
valueExtractor(selectedItem) === optionValue
|
|
303
|
+
)
|
|
304
|
+
);
|
|
305
|
+
return !isItemAlreadySelected;
|
|
306
|
+
})
|
|
307
|
+
.filter((item, index) => {
|
|
308
|
+
const optionLabel = labelExtractor(item, index);
|
|
309
|
+
if (searchQuery.length === 0) return true;
|
|
310
|
+
return formatStr(optionLabel).includes(
|
|
311
|
+
formatStr(searchQuery)
|
|
312
|
+
);
|
|
313
|
+
})
|
|
314
|
+
.map((item, index) => {
|
|
315
|
+
const optionLabel = labelExtractor(item, index);
|
|
316
|
+
return (
|
|
317
|
+
<DropdownItem
|
|
318
|
+
key={index}
|
|
319
|
+
label={optionLabel}
|
|
320
|
+
onPress={() => handleSelection(item)}
|
|
321
|
+
itemContainerStyle={itemContainerStyle}
|
|
322
|
+
defaultDropdownItemHeight={defaultDropdownItemHeight}
|
|
323
|
+
itemTextStyle={itemTextStyle}
|
|
324
|
+
/>
|
|
325
|
+
);
|
|
326
|
+
})}
|
|
327
|
+
</ScrollView>
|
|
328
|
+
</Card>
|
|
329
|
+
</Animated.View>
|
|
330
|
+
</Container>
|
|
279
331
|
</Container>
|
|
280
332
|
);
|
|
281
333
|
};
|
|
@@ -290,22 +342,38 @@ MultiSelect.propTypes = {
|
|
|
290
342
|
*/
|
|
291
343
|
options: PropTypes.arrayOf(
|
|
292
344
|
PropTypes.shape({
|
|
293
|
-
label: PropTypes.string
|
|
294
|
-
value: PropTypes.string
|
|
345
|
+
label: PropTypes.string,
|
|
346
|
+
value: PropTypes.string,
|
|
295
347
|
})
|
|
296
348
|
).isRequired,
|
|
297
349
|
/**
|
|
298
350
|
* The text to be displayed if no option is selected.
|
|
299
351
|
*/
|
|
300
352
|
placeholder: PropTypes.string,
|
|
353
|
+
/**
|
|
354
|
+
* Use custom key as label.
|
|
355
|
+
*/
|
|
356
|
+
labelExtractor: PropTypes.func,
|
|
357
|
+
/**
|
|
358
|
+
* Use custom key as value.
|
|
359
|
+
*/
|
|
360
|
+
valueExtractor: PropTypes.func,
|
|
301
361
|
/**
|
|
302
362
|
* The selected value to show for the Select input.
|
|
303
363
|
*/
|
|
304
364
|
value: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
|
|
305
365
|
/**
|
|
306
|
-
* Callback function when an option is selected, receives
|
|
366
|
+
* Callback function when an option is selected, receives an array of object of options selected.
|
|
307
367
|
*/
|
|
308
368
|
onSelect: PropTypes.func,
|
|
369
|
+
/**
|
|
370
|
+
* Callback function when an option is selected, receives the selected option object.
|
|
371
|
+
*/
|
|
372
|
+
selectedValue: PropTypes.func,
|
|
373
|
+
/**
|
|
374
|
+
* Callback function when an option is selected, receives the deleted option object.
|
|
375
|
+
*/
|
|
376
|
+
deletedValue: PropTypes.func,
|
|
309
377
|
/**
|
|
310
378
|
* Used to show if the dropdown is loading state, while loading Select input will be disabled.
|
|
311
379
|
*/
|
|
@@ -319,9 +387,13 @@ MultiSelect.propTypes = {
|
|
|
319
387
|
*/
|
|
320
388
|
labelStyle: PropTypes.object,
|
|
321
389
|
/**
|
|
322
|
-
* To customise
|
|
390
|
+
* To customise outermost container style.
|
|
323
391
|
*/
|
|
324
392
|
containerStyle: PropTypes.object,
|
|
393
|
+
/**
|
|
394
|
+
* To customise Select input container styles.
|
|
395
|
+
*/
|
|
396
|
+
inputContainerStyle: PropTypes.object,
|
|
325
397
|
/**
|
|
326
398
|
* To customise dropdown container styles.
|
|
327
399
|
*/
|
|
@@ -347,8 +419,12 @@ MultiSelect.propTypes = {
|
|
|
347
419
|
MultiSelect.defaultProps = {
|
|
348
420
|
label: null,
|
|
349
421
|
placeholder: "Select Option",
|
|
422
|
+
labelExtractor: option => option?.label,
|
|
423
|
+
valueExtractor: option => option?.value,
|
|
350
424
|
value: null,
|
|
351
425
|
onSelect: () => {},
|
|
426
|
+
selectedValue: () => {},
|
|
427
|
+
deletedValue: () => {},
|
|
352
428
|
isLoading: false,
|
|
353
429
|
isSearchable: false,
|
|
354
430
|
};
|
package/src/components/Select.js
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import React, { useState, useContext } from "react";
|
|
2
2
|
import Icon from "react-native-remix-icon";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
|
-
import
|
|
4
|
+
import Animated, {
|
|
5
|
+
useSharedValue,
|
|
6
|
+
useAnimatedStyle,
|
|
7
|
+
withTiming,
|
|
8
|
+
Easing,
|
|
9
|
+
} from "react-native-reanimated";
|
|
10
|
+
import {
|
|
11
|
+
ActivityIndicator,
|
|
12
|
+
TouchableWithoutFeedback,
|
|
13
|
+
Keyboard,
|
|
14
|
+
} from "react-native";
|
|
5
15
|
import { ThemeContext } from "styled-components/native";
|
|
16
|
+
import { ScrollView } from "react-native-gesture-handler";
|
|
6
17
|
|
|
7
|
-
import { Container, Input,
|
|
18
|
+
import { Card, Container, Input, Typography } from "@components";
|
|
8
19
|
|
|
9
20
|
const DropdownItem = ({
|
|
10
|
-
|
|
11
|
-
index,
|
|
21
|
+
label,
|
|
12
22
|
isSelectedItem,
|
|
13
23
|
defaultDropdownItemHeight,
|
|
14
24
|
onPress,
|
|
@@ -17,12 +27,9 @@ const DropdownItem = ({
|
|
|
17
27
|
itemTextStyle,
|
|
18
28
|
selectedItemTextStyle,
|
|
19
29
|
}) => (
|
|
20
|
-
<
|
|
21
|
-
key={index}
|
|
22
|
-
bg={isSelectedItem ? "background.base" : "background.white"}
|
|
23
|
-
onPress={onPress}
|
|
24
|
-
>
|
|
30
|
+
<TouchableWithoutFeedback onPress={onPress}>
|
|
25
31
|
<Container
|
|
32
|
+
bg={isSelectedItem ? "background.base" : "background.white"}
|
|
26
33
|
height={defaultDropdownItemHeight}
|
|
27
34
|
p={2}
|
|
28
35
|
{...itemContainerStyle}
|
|
@@ -35,15 +42,14 @@ const DropdownItem = ({
|
|
|
35
42
|
{...itemTextStyle}
|
|
36
43
|
{...(isSelectedItem && selectedItemTextStyle)}
|
|
37
44
|
>
|
|
38
|
-
{
|
|
45
|
+
{label}
|
|
39
46
|
</Typography>
|
|
40
47
|
</Container>
|
|
41
|
-
</
|
|
48
|
+
</TouchableWithoutFeedback>
|
|
42
49
|
);
|
|
43
50
|
|
|
44
51
|
DropdownItem.propTypes = {
|
|
45
|
-
|
|
46
|
-
index: PropTypes.number,
|
|
52
|
+
label: PropTypes.string.isRequired,
|
|
47
53
|
isSelectedItem: PropTypes.bool,
|
|
48
54
|
defaultDropdownItemHeight: PropTypes.number,
|
|
49
55
|
onPress: PropTypes.func,
|
|
@@ -62,7 +68,9 @@ DropdownItem.propTypes = {
|
|
|
62
68
|
* <img src="screenshots/select/select2.png" />
|
|
63
69
|
* </div>
|
|
64
70
|
*
|
|
65
|
-
*
|
|
71
|
+
* ## Usage
|
|
72
|
+
*
|
|
73
|
+
* ### Import and use Select component.
|
|
66
74
|
*
|
|
67
75
|
* ```js
|
|
68
76
|
* import * as React, { useState } from 'react';
|
|
@@ -83,18 +91,15 @@ DropdownItem.propTypes = {
|
|
|
83
91
|
* const [selectedOption, setSelectedOption] = useState(null)
|
|
84
92
|
*
|
|
85
93
|
* return (
|
|
86
|
-
* <
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* />
|
|
93
|
-
* </Container>
|
|
94
|
+
* <Select
|
|
95
|
+
* label="Select"
|
|
96
|
+
* options={OPTIONS}
|
|
97
|
+
* value={selectedOption}
|
|
98
|
+
* onSelect={setSelectedOption}
|
|
99
|
+
* />
|
|
94
100
|
* );
|
|
95
101
|
* }
|
|
96
102
|
* ```
|
|
97
|
-
*
|
|
98
103
|
*/
|
|
99
104
|
|
|
100
105
|
export const Select = ({
|
|
@@ -102,11 +107,14 @@ export const Select = ({
|
|
|
102
107
|
label,
|
|
103
108
|
value,
|
|
104
109
|
placeholder,
|
|
110
|
+
labelExtractor,
|
|
111
|
+
valueExtractor,
|
|
105
112
|
onSelect,
|
|
106
113
|
isLoading,
|
|
107
114
|
isSearchable,
|
|
108
115
|
labelStyle,
|
|
109
116
|
containerStyle,
|
|
117
|
+
inputContainerStyle,
|
|
110
118
|
dropdownContainerStyle,
|
|
111
119
|
itemContainerStyle,
|
|
112
120
|
itemTextStyle,
|
|
@@ -114,20 +122,49 @@ export const Select = ({
|
|
|
114
122
|
selectedItemTextStyle,
|
|
115
123
|
...rest
|
|
116
124
|
}) => {
|
|
125
|
+
const theme = useContext(ThemeContext);
|
|
117
126
|
const [showDropdown, setShowDropdown] = useState(false);
|
|
118
127
|
const [searchQuery, setSearchQuery] = useState("");
|
|
119
|
-
const
|
|
120
|
-
|
|
128
|
+
const dropdownAnimatedHeight = useSharedValue(0);
|
|
129
|
+
|
|
121
130
|
const defaultDropdownItemHeight = itemContainerStyle?.height || 32;
|
|
131
|
+
const dropdownHeight =
|
|
132
|
+
dropdownContainerStyle?.height ||
|
|
133
|
+
dropdownContainerStyle?.maxHeight ||
|
|
134
|
+
defaultDropdownItemHeight * 6;
|
|
135
|
+
const selectedOptionLabel = labelExtractor(value || {});
|
|
136
|
+
const selectedOptionValue = valueExtractor(value || {});
|
|
122
137
|
const formatStr = str => str?.toLowerCase()?.trim();
|
|
123
138
|
|
|
139
|
+
const animatedStyles = useAnimatedStyle(() => {
|
|
140
|
+
return {
|
|
141
|
+
height: withTiming(dropdownAnimatedHeight.value, {
|
|
142
|
+
duration: 100,
|
|
143
|
+
easing: Easing.ease,
|
|
144
|
+
}),
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
const toggleAnimation = () => {
|
|
149
|
+
dropdownAnimatedHeight.value =
|
|
150
|
+
dropdownAnimatedHeight.value === 0 ? dropdownHeight : 0;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
const handleOpenDropdown = () => {
|
|
154
|
+
Keyboard.dismiss();
|
|
155
|
+
setSearchQuery("");
|
|
156
|
+
setShowDropdown(!showDropdown);
|
|
157
|
+
toggleAnimation();
|
|
158
|
+
};
|
|
159
|
+
|
|
124
160
|
const handleItemSelection = (item, index) => {
|
|
125
161
|
setShowDropdown(false);
|
|
162
|
+
toggleAnimation();
|
|
126
163
|
onSelect(item, index);
|
|
127
164
|
};
|
|
128
165
|
|
|
129
166
|
return (
|
|
130
|
-
<Container
|
|
167
|
+
<Container {...containerStyle}>
|
|
131
168
|
<Typography
|
|
132
169
|
fontFamily="inter400"
|
|
133
170
|
mb={1}
|
|
@@ -137,12 +174,9 @@ export const Select = ({
|
|
|
137
174
|
>
|
|
138
175
|
{label}
|
|
139
176
|
</Typography>
|
|
140
|
-
<
|
|
177
|
+
<TouchableWithoutFeedback
|
|
141
178
|
disabled={isLoading}
|
|
142
|
-
onPress={
|
|
143
|
-
setShowDropdown(!showDropdown);
|
|
144
|
-
setSearchQuery("");
|
|
145
|
-
}}
|
|
179
|
+
onPress={handleOpenDropdown}
|
|
146
180
|
>
|
|
147
181
|
<Container
|
|
148
182
|
borderWidth={1}
|
|
@@ -151,11 +185,11 @@ export const Select = ({
|
|
|
151
185
|
flexDirection="row"
|
|
152
186
|
justifyContent="space-between"
|
|
153
187
|
alignItems="center"
|
|
154
|
-
{...
|
|
188
|
+
{...inputContainerStyle}
|
|
155
189
|
{...rest}
|
|
156
190
|
>
|
|
157
191
|
<Typography fontFamily="inter400" fontSize="s" color="font.grey">
|
|
158
|
-
{
|
|
192
|
+
{selectedOptionLabel || placeholder}
|
|
159
193
|
</Typography>
|
|
160
194
|
{isLoading ? (
|
|
161
195
|
<ActivityIndicator
|
|
@@ -170,59 +204,55 @@ export const Select = ({
|
|
|
170
204
|
/>
|
|
171
205
|
)}
|
|
172
206
|
</Container>
|
|
173
|
-
</
|
|
174
|
-
|
|
175
|
-
<
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
height: 2,
|
|
190
|
-
}}
|
|
191
|
-
elevation={5}
|
|
192
|
-
{...dropdownContainerStyle}
|
|
193
|
-
>
|
|
194
|
-
{isSearchable && (
|
|
195
|
-
<Container p={1}>
|
|
196
|
-
<Input
|
|
197
|
-
placeholder="Search"
|
|
198
|
-
onChangeText={setSearchQuery}
|
|
199
|
-
fontSize="s"
|
|
200
|
-
/>
|
|
201
|
-
</Container>
|
|
202
|
-
)}
|
|
203
|
-
<ScrollView nestedScrollEnabled={true}>
|
|
204
|
-
{options
|
|
205
|
-
.filter(item => {
|
|
206
|
-
if (searchQuery?.length === 0) return true;
|
|
207
|
-
return formatStr(item.label).includes(formatStr(searchQuery));
|
|
208
|
-
})
|
|
209
|
-
.map((item, index) => (
|
|
210
|
-
<DropdownItem
|
|
211
|
-
key={index}
|
|
212
|
-
item={item}
|
|
213
|
-
index={index}
|
|
214
|
-
isSelectedItem={item?.value === value}
|
|
215
|
-
defaultDropdownItemHeight={defaultDropdownItemHeight}
|
|
216
|
-
onPress={() => handleItemSelection(item, index)}
|
|
217
|
-
itemContainerStyle={itemContainerStyle}
|
|
218
|
-
selectedItemContainerStyle={selectedItemContainerStyle}
|
|
219
|
-
itemTextStyle={itemTextStyle}
|
|
220
|
-
selectedItemTextStyle={selectedItemTextStyle}
|
|
207
|
+
</TouchableWithoutFeedback>
|
|
208
|
+
<Container overflow="hidden">
|
|
209
|
+
<Animated.View style={animatedStyles}>
|
|
210
|
+
<Card
|
|
211
|
+
bg="background.white"
|
|
212
|
+
borderWidth={1}
|
|
213
|
+
borderColor="border.grey400"
|
|
214
|
+
maxHeight={dropdownHeight}
|
|
215
|
+
{...dropdownContainerStyle}
|
|
216
|
+
>
|
|
217
|
+
{isSearchable && (
|
|
218
|
+
<Container p={1}>
|
|
219
|
+
<Input
|
|
220
|
+
placeholder="Search"
|
|
221
|
+
onChangeText={setSearchQuery}
|
|
222
|
+
fontSize="s"
|
|
221
223
|
/>
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
224
|
+
</Container>
|
|
225
|
+
)}
|
|
226
|
+
<ScrollView>
|
|
227
|
+
{options
|
|
228
|
+
.filter((item, index) => {
|
|
229
|
+
const label = labelExtractor(item, index);
|
|
230
|
+
if (searchQuery?.length === 0) return true;
|
|
231
|
+
return formatStr(label).includes(formatStr(searchQuery));
|
|
232
|
+
})
|
|
233
|
+
.map((item, index) => {
|
|
234
|
+
const optionLabel = labelExtractor(item, index);
|
|
235
|
+
const optionValue = valueExtractor(item, index);
|
|
236
|
+
const isSelectedItem =
|
|
237
|
+
selectedOptionValue && selectedOptionValue === optionValue;
|
|
238
|
+
return (
|
|
239
|
+
<DropdownItem
|
|
240
|
+
key={index}
|
|
241
|
+
label={optionLabel}
|
|
242
|
+
isSelectedItem={isSelectedItem}
|
|
243
|
+
defaultDropdownItemHeight={defaultDropdownItemHeight}
|
|
244
|
+
onPress={() => handleItemSelection(item, index)}
|
|
245
|
+
itemContainerStyle={itemContainerStyle}
|
|
246
|
+
selectedItemContainerStyle={selectedItemContainerStyle}
|
|
247
|
+
itemTextStyle={itemTextStyle}
|
|
248
|
+
selectedItemTextStyle={selectedItemTextStyle}
|
|
249
|
+
/>
|
|
250
|
+
);
|
|
251
|
+
})}
|
|
252
|
+
</ScrollView>
|
|
253
|
+
</Card>
|
|
254
|
+
</Animated.View>
|
|
255
|
+
</Container>
|
|
226
256
|
</Container>
|
|
227
257
|
);
|
|
228
258
|
};
|
|
@@ -237,18 +267,26 @@ Select.propTypes = {
|
|
|
237
267
|
*/
|
|
238
268
|
options: PropTypes.arrayOf(
|
|
239
269
|
PropTypes.shape({
|
|
240
|
-
label: PropTypes.string
|
|
241
|
-
value: PropTypes.string
|
|
270
|
+
label: PropTypes.string,
|
|
271
|
+
value: PropTypes.string,
|
|
242
272
|
})
|
|
243
273
|
).isRequired,
|
|
244
274
|
/**
|
|
245
275
|
* The text to be displayed if no option is selected.
|
|
246
276
|
*/
|
|
247
277
|
placeholder: PropTypes.string,
|
|
278
|
+
/**
|
|
279
|
+
* Use custom key as label.
|
|
280
|
+
*/
|
|
281
|
+
labelExtractor: PropTypes.func,
|
|
282
|
+
/**
|
|
283
|
+
* Use custom key as value.
|
|
284
|
+
*/
|
|
285
|
+
valueExtractor: PropTypes.func,
|
|
248
286
|
/**
|
|
249
287
|
* The selected value to show for the Select input.
|
|
250
288
|
*/
|
|
251
|
-
value: PropTypes.
|
|
289
|
+
value: PropTypes.object,
|
|
252
290
|
/**
|
|
253
291
|
* Callback function when an option is selected, receives the select option object.
|
|
254
292
|
*/
|
|
@@ -266,9 +304,13 @@ Select.propTypes = {
|
|
|
266
304
|
*/
|
|
267
305
|
labelStyle: PropTypes.object,
|
|
268
306
|
/**
|
|
269
|
-
* To customise
|
|
307
|
+
* To customise outermost container style.
|
|
270
308
|
*/
|
|
271
309
|
containerStyle: PropTypes.object,
|
|
310
|
+
/**
|
|
311
|
+
* To customise Select input container styles.
|
|
312
|
+
*/
|
|
313
|
+
inputContainerStyle: PropTypes.object,
|
|
272
314
|
/**
|
|
273
315
|
* To customise dropdown container styles.
|
|
274
316
|
*/
|
|
@@ -294,6 +336,8 @@ Select.propTypes = {
|
|
|
294
336
|
Select.defaultProps = {
|
|
295
337
|
label: null,
|
|
296
338
|
placeholder: "Select Option",
|
|
339
|
+
labelExtractor: option => option?.label,
|
|
340
|
+
valueExtractor: option => option?.value,
|
|
297
341
|
value: null,
|
|
298
342
|
onSelect: () => {},
|
|
299
343
|
isLoading: false,
|