@bigbinary/neetoui-rn 0.0.115 → 0.0.118
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/Card.js +1 -1
- package/lib/components/MultiSelect.js +1 -1
- package/lib/components/Popover.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/Card.js +18 -4
- package/src/components/MultiSelect.js +182 -124
- package/src/components/Popover.js +13 -8
- package/src/components/Select.js +133 -89
- package/src/contexts/index.js +3 -0
package/lib/components/Card.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.styles=exports.Card=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.styles=exports.Card=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var React=_interopRequireWildcard(require("react"));var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNative=require("react-native");var _native=_interopRequireDefault(require("styled-components/native"));var _styledSystem=require("styled-system");var _utils=require("../utils/utils");var _excluded=["children","elevation"];var _templateObject,_this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Card.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 StyledTouchableOpacity=(0,_native.default)(_reactNative.TouchableOpacity)(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2.default)(["\n ","\n ","\n ","\n ","\n ","\n"])),_styledSystem.flexbox,_styledSystem.space,_styledSystem.border,_styledSystem.color,_styledSystem.layout);var Card=function Card(_ref){var children=_ref.children,elevation=_ref.elevation,rest=(0,_objectWithoutProperties2.default)(_ref,_excluded);var shadowStyles=elevation?(0,_utils.getShadowStyles)(elevation):{};var cardStyles=(0,_extends2.default)({},styles.defaultShadows,shadowStyles);return React.createElement(StyledTouchableOpacity,(0,_extends2.default)({style:cardStyles,activeOpacity:rest.onPress?0.2:1},rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:55,columnNumber:5}}),children);};exports.Card=Card;Card.propTypes={elevation:_propTypes.default.number,children:_propTypes.default.node};var styles=_reactNative.StyleSheet.create({defaultShadows:{shadowColor:"#000",shadowOffset:{width:0,height:2},shadowOpacity:0.25,shadowRadius:3.84,elevation:5}});exports.styles=styles;
|
|
@@ -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","selectedValue","deletedValue","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,selectedValue=_ref3.selectedValue,deletedValue=_ref3.deletedValue,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);deletedValue(item);};var handleSelection=function handleSelection(item){onSelect([].concat((0,_toConsumableArray2.default)(value),[item]));selectedValue(item);};return _react.default.createElement(_.Container,{elevation:0,__self:_this,__source:{fileName:_jsxFileName,lineNumber:173,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:174,columnNumber:7}}),label),_react.default.createElement(_reactNative.TouchableWithoutFeedback,{disabled:isLoading,onPress:function onPress(){setShowDropdown(!showDropdown);setSearchQuery("");},__self:_this,__source:{fileName:_jsxFileName,lineNumber:183,columnNumber:7}},_react.default.createElement(_reactNative.View,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:190,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:191,columnNumber:11}}),!multipleOptionsSelected&&_react.default.createElement(_.Typography,{fontFamily:"inter400",fontSize:"s",color:"font.grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:203,columnNumber:15}},!multipleOptionsSelected&&placeholder),multipleOptionsSelected&&_react.default.createElement(_.Container,{flexWrap:"wrap",flexDirection:"row",maxWidth:"85%",__self:_this,__source:{fileName:_jsxFileName,lineNumber:208,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:210,columnNumber:19}});})),isLoading?_react.default.createElement(_reactNative.ActivityIndicator,{size:"small",color:theme.colors.background.base,__self:_this,__source:{fileName:_jsxFileName,lineNumber:224,columnNumber:15}}):_react.default.createElement(_reactNativeRemixIcon.default,{name:"arrow-"+(showDropdown?"up":"down")+"-s-line",size:"20",color:"grey",__self:_this,__source:{fileName:_jsxFileName,lineNumber:229,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:240,columnNumber:9}}),isSearchable&&_react.default.createElement(_.Container,{p:1,__self:_this,__source:{fileName:_jsxFileName,lineNumber:253,columnNumber:13}},_react.default.createElement(_.Input,{placeholder:"Search",onChangeText:setSearchQuery,fontSize:"s",__self:_this,__source:{fileName:_jsxFileName,lineNumber:254,columnNumber:15}})),_react.default.createElement(_reactNative.ScrollView,{nestedScrollEnabled:true,__self:_this,__source:{fileName:_jsxFileName,lineNumber:261,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 handleSelection(item);},itemContainerStyle:itemContainerStyle,defaultDropdownItemHeight:defaultDropdownItemHeight,itemTextStyle:itemTextStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:274,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,selectedValue:_propTypes.default.func,deletedValue:_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(){},selectedValue:function selectedValue(){},deletedValue:function deletedValue(){},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.TouchableOpacity=exports.Popover=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _react=_interopRequireWildcard(require("react"));var _reactNativePopoverView=_interopRequireDefault(require("react-native-popover-view"));var _propTypes=_interopRequireDefault(require("prop-types"));var _native=_interopRequireDefault(require("styled-components/native"));var _reactNative=require("react-native");var _styledSystem=require("styled-system");var _=require("./");var _excluded=["children","data","fontFamily","fontSize"];var _templateObject,_this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Popover.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 TouchableOpacity=_native.default.TouchableOpacity(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2.default)(["\n ","\n ","\n ","\n ","\n ","\n"])),_styledSystem.space,_styledSystem.border,_styledSystem.color,_styledSystem.flexbox,_styledSystem.layout);exports.TouchableOpacity=TouchableOpacity;var PopOverItem=function PopOverItem(_ref){var item=_ref.item,fontFamily=_ref.fontFamily,fontSize=_ref.fontSize
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.TouchableOpacity=exports.Popover=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _react=_interopRequireWildcard(require("react"));var _reactNativePopoverView=_interopRequireDefault(require("react-native-popover-view"));var _propTypes=_interopRequireDefault(require("prop-types"));var _native=_interopRequireDefault(require("styled-components/native"));var _reactNative=require("react-native");var _styledSystem=require("styled-system");var _=require("./");var _excluded=["children","data","fontFamily","fontSize"];var _templateObject,_this=this,_jsxFileName="/Users/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Popover.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 TouchableOpacity=_native.default.TouchableOpacity(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2.default)(["\n ","\n ","\n ","\n ","\n ","\n"])),_styledSystem.space,_styledSystem.border,_styledSystem.color,_styledSystem.flexbox,_styledSystem.layout);exports.TouchableOpacity=TouchableOpacity;var PopOverItem=function PopOverItem(_ref){var item=_ref.item,onPress=_ref.onPress,fontFamily=_ref.fontFamily,fontSize=_ref.fontSize;var Icon=item.Icon,label=item.label;return _react.default.createElement(TouchableOpacity,{onPress:onPress,flexDirection:"row",p:2,px:3,alignItems:"center",__self:_this,__source:{fileName:_jsxFileName,lineNumber:22,columnNumber:5}},_react.default.createElement(Icon,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:29,columnNumber:7}}),_react.default.createElement(_.Typography,{px:2,fontSize:fontSize,fontColor:"font.primary",fontFamily:fontFamily,__self:_this,__source:{fileName:_jsxFileName,lineNumber:30,columnNumber:7}},label));};PopOverItem.propTypes={item:_propTypes.default.object,onPress:_propTypes.default.func,fontFamily:_propTypes.default.string,fontSize:_propTypes.default.oneOfType([_propTypes.default.number,_propTypes.default.oneOf(["xs","s","m","l","xl","xxl"])])};var Popover=function Popover(_ref2){var children=_ref2.children,data=_ref2.data,_ref2$fontFamily=_ref2.fontFamily,fontFamily=_ref2$fontFamily===void 0?null:_ref2$fontFamily,_ref2$fontSize=_ref2.fontSize,fontSize=_ref2$fontSize===void 0?"l":_ref2$fontSize,rest=(0,_objectWithoutProperties2.default)(_ref2,_excluded);var popoverRef=(0,_react.useRef)();var onPressItemRef=(0,_react.useRef)(function(){});return _react.default.createElement(_reactNativePopoverView.default,(0,_extends2.default)({ref:popoverRef,popoverStyle:styles.popoverStyle,onOpenStart:function onOpenStart(){onPressItemRef.current=function(){};},onCloseComplete:function onCloseComplete(){return onPressItemRef.current();}},rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:144,columnNumber:5}}),data==null?void 0:data.map(function(item,index){return _react.default.createElement(PopOverItem,{key:index,item:item,fontFamily:fontFamily,fontSize:fontSize,onPress:function onPress(){var _popoverRef$current;popoverRef==null?void 0:(_popoverRef$current=popoverRef.current)==null?void 0:_popoverRef$current.setState({isVisible:false});onPressItemRef.current=item.onPress;},__self:_this,__source:{fileName:_jsxFileName,lineNumber:155,columnNumber:11}});}),children);};exports.Popover=Popover;Popover.propTypes={children:_propTypes.default.node,data:_propTypes.default.array,fontFamily:_propTypes.default.string,fontSize:_propTypes.default.oneOfType([_propTypes.default.number,_propTypes.default.oneOf(["xs","s","m","l","xl","xxl"])])};var styles=_reactNative.StyleSheet.create({popoverStyle:{borderRadius:15,padding:5}});
|
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
package/src/components/Card.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { Container } from "@components";
|
|
3
2
|
import PropTypes from "prop-types";
|
|
4
|
-
import { StyleSheet } from "react-native";
|
|
3
|
+
import { StyleSheet, TouchableOpacity } from "react-native";
|
|
4
|
+
import styled from "styled-components/native";
|
|
5
|
+
import { flexbox, space, border, color, layout } from "styled-system";
|
|
6
|
+
|
|
5
7
|
import { getShadowStyles } from "../utils/utils";
|
|
6
8
|
|
|
7
9
|
/**
|
|
@@ -37,14 +39,26 @@ import { getShadowStyles } from "../utils/utils";
|
|
|
37
39
|
*
|
|
38
40
|
*/
|
|
39
41
|
|
|
42
|
+
const StyledTouchableOpacity = styled(TouchableOpacity)`
|
|
43
|
+
${flexbox}
|
|
44
|
+
${space}
|
|
45
|
+
${border}
|
|
46
|
+
${color}
|
|
47
|
+
${layout}
|
|
48
|
+
`;
|
|
49
|
+
|
|
40
50
|
export const Card = ({ children, elevation, ...rest }) => {
|
|
41
51
|
const shadowStyles = elevation ? getShadowStyles(elevation) : {};
|
|
42
52
|
|
|
43
53
|
const cardStyles = { ...styles.defaultShadows, ...shadowStyles };
|
|
44
54
|
return (
|
|
45
|
-
<
|
|
55
|
+
<StyledTouchableOpacity
|
|
56
|
+
style={cardStyles}
|
|
57
|
+
activeOpacity={rest.onPress ? 0.2 : 1}
|
|
58
|
+
{...rest}
|
|
59
|
+
>
|
|
46
60
|
{children}
|
|
47
|
-
</
|
|
61
|
+
</StyledTouchableOpacity>
|
|
48
62
|
);
|
|
49
63
|
};
|
|
50
64
|
|
|
@@ -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,6 +139,8 @@ export const MultiSelect = ({
|
|
|
134
139
|
label,
|
|
135
140
|
value,
|
|
136
141
|
placeholder,
|
|
142
|
+
labelExtractor,
|
|
143
|
+
valueExtractor,
|
|
137
144
|
onSelect,
|
|
138
145
|
selectedValue,
|
|
139
146
|
deletedValue,
|
|
@@ -141,6 +148,7 @@ export const MultiSelect = ({
|
|
|
141
148
|
isSearchable,
|
|
142
149
|
labelStyle,
|
|
143
150
|
containerStyle,
|
|
151
|
+
inputContainerStyle,
|
|
144
152
|
dropdownContainerStyle,
|
|
145
153
|
itemContainerStyle,
|
|
146
154
|
itemTextStyle,
|
|
@@ -151,14 +159,40 @@ export const MultiSelect = ({
|
|
|
151
159
|
const theme = useContext(ThemeContext);
|
|
152
160
|
const [showDropdown, setShowDropdown] = useState(false);
|
|
153
161
|
const [searchQuery, setSearchQuery] = useState("");
|
|
162
|
+
const dropdownAnimatedHeight = useSharedValue(0);
|
|
154
163
|
|
|
155
164
|
const multipleOptionsSelected = value?.length > 0;
|
|
156
165
|
const defaultDropdownItemHeight = itemContainerStyle?.height || 32;
|
|
166
|
+
const dropdownHeight =
|
|
167
|
+
dropdownContainerStyle?.height ||
|
|
168
|
+
dropdownContainerStyle?.maxHeight ||
|
|
169
|
+
defaultDropdownItemHeight * 6;
|
|
157
170
|
const formatStr = str => str?.toLowerCase()?.trim();
|
|
158
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
|
+
|
|
159
193
|
const handleUnselection = item => {
|
|
160
194
|
const newValue = value.filter(
|
|
161
|
-
selectedItem => selectedItem
|
|
195
|
+
selectedItem => valueExtractor(selectedItem) !== valueExtractor(item)
|
|
162
196
|
);
|
|
163
197
|
onSelect(newValue);
|
|
164
198
|
deletedValue(item);
|
|
@@ -170,7 +204,7 @@ export const MultiSelect = ({
|
|
|
170
204
|
};
|
|
171
205
|
|
|
172
206
|
return (
|
|
173
|
-
<Container
|
|
207
|
+
<Container {...containerStyle}>
|
|
174
208
|
<Typography
|
|
175
209
|
fontFamily="inter400"
|
|
176
210
|
mb={1}
|
|
@@ -182,108 +216,118 @@ export const MultiSelect = ({
|
|
|
182
216
|
</Typography>
|
|
183
217
|
<TouchableWithoutFeedback
|
|
184
218
|
disabled={isLoading}
|
|
185
|
-
onPress={
|
|
186
|
-
setShowDropdown(!showDropdown);
|
|
187
|
-
setSearchQuery("");
|
|
188
|
-
}}
|
|
219
|
+
onPress={handleOpenDropdown}
|
|
189
220
|
>
|
|
190
|
-
<
|
|
191
|
-
<Container
|
|
192
|
-
borderWidth={1}
|
|
193
|
-
borderColor="border.grey400"
|
|
194
|
-
p={multipleOptionsSelected ? 1 : 2}
|
|
195
|
-
pr={2}
|
|
196
|
-
flexDirection="row"
|
|
197
|
-
justifyContent="space-between"
|
|
198
|
-
alignItems="center"
|
|
199
|
-
{...containerStyle}
|
|
200
|
-
{...rest}
|
|
201
|
-
>
|
|
202
|
-
{!multipleOptionsSelected && (
|
|
203
|
-
<Typography fontFamily="inter400" fontSize="s" color="font.grey">
|
|
204
|
-
{!multipleOptionsSelected && placeholder}
|
|
205
|
-
</Typography>
|
|
206
|
-
)}
|
|
207
|
-
{multipleOptionsSelected && (
|
|
208
|
-
<Container flexWrap="wrap" flexDirection="row" maxWidth="85%">
|
|
209
|
-
{value?.map((item, index) => (
|
|
210
|
-
<MultiSelectItem
|
|
211
|
-
key={index}
|
|
212
|
-
item={item}
|
|
213
|
-
index={index}
|
|
214
|
-
onUnselect={() => handleUnselection(item)}
|
|
215
|
-
multiSelectedItemContainerStyle={
|
|
216
|
-
multiSelectedItemContainerStyle
|
|
217
|
-
}
|
|
218
|
-
multiSelectedItemTextStyle={multiSelectedItemTextStyle}
|
|
219
|
-
/>
|
|
220
|
-
))}
|
|
221
|
-
</Container>
|
|
222
|
-
)}
|
|
223
|
-
{isLoading ? (
|
|
224
|
-
<ActivityIndicator
|
|
225
|
-
size="small"
|
|
226
|
-
color={theme.colors.background.base}
|
|
227
|
-
/>
|
|
228
|
-
) : (
|
|
229
|
-
<Icon
|
|
230
|
-
name={`arrow-${showDropdown ? "up" : "down"}-s-line`}
|
|
231
|
-
size="20"
|
|
232
|
-
color="grey"
|
|
233
|
-
/>
|
|
234
|
-
)}
|
|
235
|
-
</Container>
|
|
236
|
-
</View>
|
|
237
|
-
</TouchableWithoutFeedback>
|
|
238
|
-
|
|
239
|
-
{showDropdown && (
|
|
240
|
-
<Card
|
|
241
|
-
bg="background.white"
|
|
221
|
+
<Container
|
|
242
222
|
borderWidth={1}
|
|
243
223
|
borderColor="border.grey400"
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
{...
|
|
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}
|
|
251
232
|
>
|
|
252
|
-
{
|
|
253
|
-
<
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
233
|
+
{!multipleOptionsSelected && (
|
|
234
|
+
<Typography fontFamily="inter400" fontSize="s" color="font.grey">
|
|
235
|
+
{!multipleOptionsSelected && placeholder}
|
|
236
|
+
</Typography>
|
|
237
|
+
)}
|
|
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>
|
|
260
262
|
)}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
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"
|
|
282
292
|
/>
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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>
|
|
287
331
|
</Container>
|
|
288
332
|
);
|
|
289
333
|
};
|
|
@@ -298,14 +342,22 @@ MultiSelect.propTypes = {
|
|
|
298
342
|
*/
|
|
299
343
|
options: PropTypes.arrayOf(
|
|
300
344
|
PropTypes.shape({
|
|
301
|
-
label: PropTypes.string
|
|
302
|
-
value: PropTypes.string
|
|
345
|
+
label: PropTypes.string,
|
|
346
|
+
value: PropTypes.string,
|
|
303
347
|
})
|
|
304
348
|
).isRequired,
|
|
305
349
|
/**
|
|
306
350
|
* The text to be displayed if no option is selected.
|
|
307
351
|
*/
|
|
308
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,
|
|
309
361
|
/**
|
|
310
362
|
* The selected value to show for the Select input.
|
|
311
363
|
*/
|
|
@@ -335,9 +387,13 @@ MultiSelect.propTypes = {
|
|
|
335
387
|
*/
|
|
336
388
|
labelStyle: PropTypes.object,
|
|
337
389
|
/**
|
|
338
|
-
* To customise
|
|
390
|
+
* To customise outermost container style.
|
|
339
391
|
*/
|
|
340
392
|
containerStyle: PropTypes.object,
|
|
393
|
+
/**
|
|
394
|
+
* To customise Select input container styles.
|
|
395
|
+
*/
|
|
396
|
+
inputContainerStyle: PropTypes.object,
|
|
341
397
|
/**
|
|
342
398
|
* To customise dropdown container styles.
|
|
343
399
|
*/
|
|
@@ -363,6 +419,8 @@ MultiSelect.propTypes = {
|
|
|
363
419
|
MultiSelect.defaultProps = {
|
|
364
420
|
label: null,
|
|
365
421
|
placeholder: "Select Option",
|
|
422
|
+
labelExtractor: option => option?.label,
|
|
423
|
+
valueExtractor: option => option?.value,
|
|
366
424
|
value: null,
|
|
367
425
|
onSelect: () => {},
|
|
368
426
|
selectedValue: () => {},
|
|
@@ -15,14 +15,12 @@ export const TouchableOpacity = styled.TouchableOpacity`
|
|
|
15
15
|
${layout}
|
|
16
16
|
`;
|
|
17
17
|
|
|
18
|
-
const PopOverItem = ({ item, fontFamily, fontSize
|
|
19
|
-
const { Icon, label
|
|
18
|
+
const PopOverItem = ({ item, onPress, fontFamily, fontSize }) => {
|
|
19
|
+
const { Icon, label } = item;
|
|
20
|
+
|
|
20
21
|
return (
|
|
21
22
|
<TouchableOpacity
|
|
22
|
-
onPress={
|
|
23
|
-
hidePopOver();
|
|
24
|
-
onPress();
|
|
25
|
-
}}
|
|
23
|
+
onPress={onPress}
|
|
26
24
|
flexDirection="row"
|
|
27
25
|
p={2}
|
|
28
26
|
px={3}
|
|
@@ -43,12 +41,12 @@ const PopOverItem = ({ item, fontFamily, fontSize, hidePopOver }) => {
|
|
|
43
41
|
|
|
44
42
|
PopOverItem.propTypes = {
|
|
45
43
|
item: PropTypes.object,
|
|
44
|
+
onPress: PropTypes.func,
|
|
46
45
|
fontFamily: PropTypes.string,
|
|
47
46
|
fontSize: PropTypes.oneOfType([
|
|
48
47
|
PropTypes.number,
|
|
49
48
|
PropTypes.oneOf(["xs", "s", "m", "l", "xl", "xxl"]),
|
|
50
49
|
]),
|
|
51
|
-
hidePopOver: PropTypes.func,
|
|
52
50
|
};
|
|
53
51
|
|
|
54
52
|
/**
|
|
@@ -140,10 +138,16 @@ export const Popover = ({
|
|
|
140
138
|
...rest
|
|
141
139
|
}) => {
|
|
142
140
|
const popoverRef = useRef();
|
|
141
|
+
const onPressItemRef = useRef(() => {});
|
|
142
|
+
|
|
143
143
|
return (
|
|
144
144
|
<OriginalPopover
|
|
145
145
|
ref={popoverRef}
|
|
146
146
|
popoverStyle={styles.popoverStyle}
|
|
147
|
+
onOpenStart={() => {
|
|
148
|
+
onPressItemRef.current = () => {};
|
|
149
|
+
}}
|
|
150
|
+
onCloseComplete={() => onPressItemRef.current()}
|
|
147
151
|
{...rest}
|
|
148
152
|
>
|
|
149
153
|
{data?.map((item, index) => {
|
|
@@ -153,8 +157,9 @@ export const Popover = ({
|
|
|
153
157
|
item={item}
|
|
154
158
|
fontFamily={fontFamily}
|
|
155
159
|
fontSize={fontSize}
|
|
156
|
-
|
|
160
|
+
onPress={() => {
|
|
157
161
|
popoverRef?.current?.setState({ isVisible: false });
|
|
162
|
+
onPressItemRef.current = item.onPress;
|
|
158
163
|
}}
|
|
159
164
|
/>
|
|
160
165
|
);
|
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,
|