@bigbinary/neetoui-rn 0.0.164 → 0.0.165
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.BottomSheet=void 0;var
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.BottomSheet=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 _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNativeModal=_interopRequireDefault(require("react-native-modal"));var _reactNativeSafeAreaContext=require("react-native-safe-area-context");var _fuse=_interopRequireDefault(require("fuse.js"));var _=require("./");var _theme=require("../theme");var _constants=require("../constants");var _excluded=["data","title","hide","isVisible","onItemPress","selectedItemIndex","bg","children","titleContainerStyle","titleTextStyle","modalParams","HeaderComponent","ContentRow","contentType","canSearch"];var _this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/BottomSheet.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 Title=function Title(_ref){var title=_ref.title,bg=_ref.bg,isVisible=_ref.isVisible,hide=_ref.hide,titleContainerStyle=_ref.titleContainerStyle,titleTextStyle=_ref.titleTextStyle,contentType=_ref.contentType,canSearch=_ref.canSearch,setSearchText=_ref.setSearchText;var touchY;(0,_react.useEffect)(function(){setSearchText("");},[isVisible,setSearchText]);return _react.default.createElement(_react.default.Fragment,null,_react.default.createElement(_.Container,(0,_extends2.default)({bg:bg,onTouchStart:function onTouchStart(e){return touchY=e.nativeEvent.pageY;},onTouchEnd:function onTouchEnd(e){if(e.nativeEvent.pageY-touchY>20)hide();},pb:12,borderRadius:20},titleContainerStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:31,columnNumber:7}}),_react.default.createElement(_.Container,{mb:16,flexDirection:"row",justifyContent:"space-between",__self:_this,__source:{fileName:_jsxFileName,lineNumber:42,columnNumber:9}},title&&_react.default.createElement(_.Typography,(0,_extends2.default)({textStyle:"modalHeader"},titleTextStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:44,columnNumber:13}}),title),contentType&&_react.default.createElement(_.Touchable,{onPress:hide,__self:_this,__source:{fileName:_jsxFileName,lineNumber:49,columnNumber:13}},_react.default.createElement(_.Typography,{textStyle:"modalHeader",color:"font.purple500",__self:_this,__source:{fileName:_jsxFileName,lineNumber:50,columnNumber:15}},"Done"))),canSearch&&_react.default.createElement(_.SearchBar,{placeholder:"Search",onChangeText:setSearchText,onCancel:function onCancel(){setSearchText("");},searchbarProps:{autoFocus:true},showCancelButton:false,__self:_this,__source:{fileName:_jsxFileName,lineNumber:58,columnNumber:11}})));};Title.propTypes={title:_propTypes.default.string,isVisible:_propTypes.default.boolean,hide:_propTypes.default.func,bg:_propTypes.default.string,titleContainerStyle:_propTypes.default.object,titleTextStyle:_propTypes.default.object,contentType:_propTypes.default.oneOf(["checkbox",null]),canSearch:_propTypes.default.bool,setSearchText:_propTypes.default.func};var BottomSheet=function BottomSheet(_ref2){var _ref2$data=_ref2.data,data=_ref2$data===void 0?[]:_ref2$data,title=_ref2.title,hide=_ref2.hide,isVisible=_ref2.isVisible,onItemPress=_ref2.onItemPress,selectedItemIndex=_ref2.selectedItemIndex,bg=_ref2.bg,children=_ref2.children,titleContainerStyle=_ref2.titleContainerStyle,titleTextStyle=_ref2.titleTextStyle,modalParams=_ref2.modalParams,HeaderComponent=_ref2.HeaderComponent,ContentRow=_ref2.ContentRow,contentType=_ref2.contentType,canSearch=_ref2.canSearch,rest=(0,_objectWithoutProperties2.default)(_ref2,_excluded);var _useState=(0,_react.useState)(""),_useState2=(0,_slicedToArray2.default)(_useState,2),searchText=_useState2[0],setSearchText=_useState2[1];var fuse=new _fuse.default(data,{keys:_constants.FUSE_KEYS,threshold:0.1});var generateData=function generateData(){if(searchText.trim().length){return fuse.search(searchText.trim()).map(function(item){return item.item;});}else{return data;}};return _react.default.createElement(_reactNativeModal.default,(0,_extends2.default)({style:styles.modalStyle,isVisible:isVisible,onBackdropPress:hide,useNativeDriver:true,avoidKeyboard:true,hideModalContentWhileAnimating:true,onRequestClose:hide},modalParams,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:153,columnNumber:5}}),_react.default.createElement(_reactNativeSafeAreaContext.SafeAreaView,{style:styles.safeAreaView,__self:_this,__source:{fileName:_jsxFileName,lineNumber:163,columnNumber:7}},_react.default.createElement(_.Container,(0,_extends2.default)({bg:bg,borderTopRightRadius:20,borderTopLeftRadius:20,px:24,py:24},rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:164,columnNumber:9}}),_react.default.createElement(_.Container,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:172,columnNumber:11}},title&&_react.default.createElement(Title,{bg:bg,title:title,isVisible:isVisible,hide:hide,titleContainerStyle:titleContainerStyle,titleTextStyle:titleTextStyle,HeaderComponent:HeaderComponent,contentType:contentType,canSearch:canSearch,searchText:searchText,setSearchText:setSearchText,__self:_this,__source:{fileName:_jsxFileName,lineNumber:174,columnNumber:15}}),data&&_react.default.createElement(_reactNative.FlatList,{ListFooterComponent:children,initialNumToRender:data.length,onScrollBeginDrag:_reactNative.Keyboard.dismiss,data:generateData(),renderItem:function renderItem(_ref3){var item=_ref3.item,index=_ref3.index;return _react.default.createElement(ContentRow,{isSelected:index===selectedItemIndex,key:index,onPress:function onPress(){!contentType&&hide();onItemPress({index:index,item:item});},index:index,item:item,__self:_this,__source:{fileName:_jsxFileName,lineNumber:197,columnNumber:21}});},keyExtractor:function keyExtractor(item,index){return index;},__self:_this,__source:{fileName:_jsxFileName,lineNumber:190,columnNumber:15}})))));};exports.BottomSheet=BottomSheet;BottomSheet.defaultProps={bg:"background.primary"};BottomSheet.propTypes={data:_propTypes.default.array,title:_propTypes.default.string,isVisible:_propTypes.default.bool,hide:_propTypes.default.func,onItemPress:_propTypes.default.func,selectedItemIndex:_propTypes.default.number,bg:_propTypes.default.string,titleContainerStyle:_propTypes.default.object,titleTextStyle:_propTypes.default.object,modalParams:_propTypes.default.object,children:_propTypes.default.node,HeaderComponent:_propTypes.default.elementType,ContentRow:_propTypes.default.elementType,contentType:_propTypes.default.oneOf(["checkbox",null]),canSearch:_propTypes.default.bool};var styles=_reactNative.StyleSheet.create({safeAreaView:{maxHeight:"70%",backgroundColor:_theme.theme.colors.background.primary,borderTopRightRadius:20,borderTopLeftRadius:20},modalStyle:{margin:0,justifyContent:"flex-end"},inputContainerStyle:{backgroundColor:"white",borderRadius:10}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.SearchBar=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNativeRemixIcon=_interopRequireDefault(require("react-native-remix-icon"));var _=require("./");var _hooks=require("../hooks");var _theme=require("../theme");var _excluded=["placeholder","onChangeText","onCancel","debounceDelay"];var _this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/SearchBar.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 SearchBar=function SearchBar(props){var _props$placeholder=props.placeholder,placeholder=_props$placeholder===void 0?"Search":_props$placeholder,_props$onChangeText=props.onChangeText,onChangeText=_props$onChangeText===void 0?function(){}:_props$onChangeText,_props$onCancel=props.onCancel,onCancel=_props$onCancel===void 0?function(){}:_props$onCancel,_props$debounceDelay=props.debounceDelay,debounceDelay=_props$debounceDelay===void 0?1000:_props$debounceDelay,rest=(0,_objectWithoutProperties2.default)(props,_excluded);var inputRef=(0,_react.useRef)();var _useState=(0,_react.useState)(""),_useState2=(0,_slicedToArray2.default)(_useState,2),searchText=_useState2[0],setSearchText=_useState2[1];var debouncedSearchTextValue=(0,_hooks.useDebounce)(searchText,Number(debounceDelay));var searchAnimationController=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;(0,_react.useEffect)(function(){onChangeText(debouncedSearchTextValue);},[debouncedSearchTextValue,onChangeText]);var animateSearchInput=function animateSearchInput(val){_reactNative.Animated.timing(searchAnimationController,{toValue:val,duration:350,useNativeDriver:false}).start();};var searchInputWidth=searchAnimationController.interpolate({inputRange:[0,1],outputRange:["100%","85%"]});var onCancelHandle=function onCancelHandle(){animateSearchInput(0);setSearchText("");inputRef.current.blur();onCancel();};return _react.default.createElement(_.Container,(0,_extends2.default)({flexDirection:"row",alignItems:"center"},rest.containerProps,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.SearchBar=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNativeRemixIcon=_interopRequireDefault(require("react-native-remix-icon"));var _=require("./");var _hooks=require("../hooks");var _theme=require("../theme");var _excluded=["placeholder","onChangeText","onCancel","debounceDelay","showCancelButton"];var _this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/SearchBar.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 SearchBar=function SearchBar(props){var _props$placeholder=props.placeholder,placeholder=_props$placeholder===void 0?"Search":_props$placeholder,_props$onChangeText=props.onChangeText,onChangeText=_props$onChangeText===void 0?function(){}:_props$onChangeText,_props$onCancel=props.onCancel,onCancel=_props$onCancel===void 0?function(){}:_props$onCancel,_props$debounceDelay=props.debounceDelay,debounceDelay=_props$debounceDelay===void 0?1000:_props$debounceDelay,_props$showCancelButt=props.showCancelButton,showCancelButton=_props$showCancelButt===void 0?true:_props$showCancelButt,rest=(0,_objectWithoutProperties2.default)(props,_excluded);var inputRef=(0,_react.useRef)();var _useState=(0,_react.useState)(""),_useState2=(0,_slicedToArray2.default)(_useState,2),searchText=_useState2[0],setSearchText=_useState2[1];var debouncedSearchTextValue=(0,_hooks.useDebounce)(searchText,Number(debounceDelay));var searchAnimationController=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;(0,_react.useEffect)(function(){onChangeText(debouncedSearchTextValue);},[debouncedSearchTextValue,onChangeText]);var animateSearchInput=function animateSearchInput(val){_reactNative.Animated.timing(searchAnimationController,{toValue:val,duration:350,useNativeDriver:false}).start();};var searchInputWidth=searchAnimationController.interpolate({inputRange:[0,1],outputRange:["100%",showCancelButton?"85%":"100%"]});var onCancelHandle=function onCancelHandle(){animateSearchInput(0);setSearchText("");inputRef.current.blur();onCancel();};return _react.default.createElement(_.Container,(0,_extends2.default)({flexDirection:"row",alignItems:"center"},rest.containerProps,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:70,columnNumber:5}}),_react.default.createElement(_reactNative.Animated.View,{style:(0,_extends2.default)({},styles.inputContainerStyles,{width:searchInputWidth}),__self:_this,__source:{fileName:_jsxFileName,lineNumber:71,columnNumber:7}},_react.default.createElement(_.Container,{px:10,__self:_this,__source:{fileName:_jsxFileName,lineNumber:77,columnNumber:9}},_react.default.createElement(_reactNativeRemixIcon.default,{name:"ri-search-line",size:20,color:_theme.theme.colors.font.grey600,__self:_this,__source:{fileName:_jsxFileName,lineNumber:78,columnNumber:11}})),_react.default.createElement(_reactNative.TextInput,(0,_extends2.default)({ref:inputRef,value:searchText,onChangeText:setSearchText,onFocus:function onFocus(){animateSearchInput(1);},onBlur:function onBlur(){if(!searchText)animateSearchInput(0);},placeholder:placeholder,fontSize:16,flex:1,placeholderTextColor:_theme.theme.colors.font.grey600,color:"font.primary",autoCapitalize:"none",returnKeyType:"search"},rest.searchbarProps,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:84,columnNumber:9}}))),_react.default.createElement(_reactNative.Animated.View,{style:{opacity:searchAnimationController},__self:_this,__source:{fileName:_jsxFileName,lineNumber:104,columnNumber:7}},showCancelButton&&_react.default.createElement(_.Button,{variant:"text",label:"Cancel",onPress:onCancelHandle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:110,columnNumber:11}})));};exports.SearchBar=SearchBar;var styles=_reactNative.StyleSheet.create({inputContainerStyles:{height:42,borderWidth:1,borderColor:_theme.theme.colors.border.grey400,borderRadius:8,flexDirection:"row",alignItems:"center"}});SearchBar.propTypes={placeholder:_propTypes.default.string,onChangeText:_propTypes.default.func.isRequired,debounceDelay:_propTypes.default.oneOfType([_propTypes.default.number,_propTypes.default.string]),searchbarProps:_propTypes.default.object,onCancel:_propTypes.default.func,showCancelButton:_propTypes.default.bool};
|
package/lib/constants.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.FUSE_KEYS=void 0;var FUSE_KEYS=["label","name","value","title","email"];exports.FUSE_KEYS=FUSE_KEYS;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigbinary/neetoui-rn",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.165",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"author": "BigBinary",
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"@shopify/flash-list": "^1.2.0",
|
|
52
52
|
"@styled-system/prop-types": "^5.1.5",
|
|
53
53
|
"dayjs": "^1.11.4",
|
|
54
|
+
"fuse.js": "^6.6.2",
|
|
54
55
|
"react-content-loader": "^6.2.0",
|
|
55
56
|
"react-native-calendars": "^1.1285.0",
|
|
56
57
|
"react-native-gesture-handler": "^2.4.0",
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import React, { useEffect, useState } from "react";
|
|
2
2
|
import { StyleSheet, FlatList, Keyboard } from "react-native";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
|
-
import { Typography, Container, Touchable, SearchBar } from "@components";
|
|
5
4
|
import Modal from "react-native-modal";
|
|
6
|
-
import Icon from "react-native-remix-icon";
|
|
7
|
-
import { theme } from "../theme";
|
|
8
5
|
import { SafeAreaView } from "react-native-safe-area-context";
|
|
6
|
+
import Fuse from "fuse.js";
|
|
7
|
+
|
|
8
|
+
import { Typography, Container, Touchable, SearchBar } from "@components";
|
|
9
|
+
import { theme } from "../theme";
|
|
10
|
+
import { FUSE_KEYS } from "../constants";
|
|
9
11
|
|
|
10
12
|
const Title = ({
|
|
11
13
|
title,
|
|
@@ -19,7 +21,6 @@ const Title = ({
|
|
|
19
21
|
setSearchText,
|
|
20
22
|
}) => {
|
|
21
23
|
let touchY;
|
|
22
|
-
const [isSearchBarOpen, setSearchBarOpen] = useState(false);
|
|
23
24
|
|
|
24
25
|
useEffect(() => {
|
|
25
26
|
setSearchText("");
|
|
@@ -38,40 +39,30 @@ const Title = ({
|
|
|
38
39
|
borderRadius={20}
|
|
39
40
|
{...titleContainerStyle}
|
|
40
41
|
>
|
|
41
|
-
{
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
<Container mb={16} flexDirection="row" justifyContent="space-between">
|
|
43
|
+
{title && (
|
|
44
|
+
<Typography textStyle="modalHeader" {...titleTextStyle}>
|
|
45
|
+
{title}
|
|
46
|
+
</Typography>
|
|
47
|
+
)}
|
|
48
|
+
{contentType && (
|
|
49
|
+
<Touchable onPress={hide}>
|
|
50
|
+
<Typography textStyle="modalHeader" color="font.purple500">
|
|
51
|
+
Done
|
|
46
52
|
</Typography>
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
<Typography textStyle="modalHeader" color="font.purple600">
|
|
51
|
-
Done
|
|
52
|
-
</Typography>
|
|
53
|
-
</Touchable>
|
|
54
|
-
)}
|
|
55
|
-
{canSearch && !isSearchBarOpen && (
|
|
56
|
-
<Touchable onPress={() => setSearchBarOpen(true)}>
|
|
57
|
-
<Icon
|
|
58
|
-
name="search-line"
|
|
59
|
-
color={theme.colors.background.grey700}
|
|
60
|
-
/>
|
|
61
|
-
</Touchable>
|
|
62
|
-
)}
|
|
63
|
-
</Container>
|
|
64
|
-
)}
|
|
53
|
+
</Touchable>
|
|
54
|
+
)}
|
|
55
|
+
</Container>
|
|
65
56
|
|
|
66
|
-
{canSearch &&
|
|
57
|
+
{canSearch && (
|
|
67
58
|
<SearchBar
|
|
68
59
|
placeholder="Search"
|
|
69
60
|
onChangeText={setSearchText}
|
|
70
61
|
onCancel={() => {
|
|
71
|
-
setSearchBarOpen(false);
|
|
72
62
|
setSearchText("");
|
|
73
63
|
}}
|
|
74
64
|
searchbarProps={{ autoFocus: true }}
|
|
65
|
+
showCancelButton={false}
|
|
75
66
|
/>
|
|
76
67
|
)}
|
|
77
68
|
</Container>
|
|
@@ -148,6 +139,16 @@ export const BottomSheet = ({
|
|
|
148
139
|
}) => {
|
|
149
140
|
const [searchText, setSearchText] = useState("");
|
|
150
141
|
|
|
142
|
+
const fuse = new Fuse(data, { keys: FUSE_KEYS, threshold: 0.1 });
|
|
143
|
+
|
|
144
|
+
const generateData = () => {
|
|
145
|
+
if (searchText.trim().length) {
|
|
146
|
+
return fuse.search(searchText.trim()).map(item => item.item);
|
|
147
|
+
} else {
|
|
148
|
+
return data;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
151
152
|
return (
|
|
152
153
|
<Modal
|
|
153
154
|
style={styles.modalStyle}
|
|
@@ -190,15 +191,7 @@ export const BottomSheet = ({
|
|
|
190
191
|
ListFooterComponent={children}
|
|
191
192
|
initialNumToRender={data.length}
|
|
192
193
|
onScrollBeginDrag={Keyboard.dismiss}
|
|
193
|
-
data={
|
|
194
|
-
searchText
|
|
195
|
-
? data.filter(word =>
|
|
196
|
-
word
|
|
197
|
-
.toLowerCase()
|
|
198
|
-
.includes(searchText.toLocaleLowerCase())
|
|
199
|
-
)
|
|
200
|
-
: data
|
|
201
|
-
}
|
|
194
|
+
data={generateData()}
|
|
202
195
|
renderItem={({ item, index }) => {
|
|
203
196
|
return (
|
|
204
197
|
<ContentRow
|
|
@@ -206,10 +199,10 @@ export const BottomSheet = ({
|
|
|
206
199
|
key={index}
|
|
207
200
|
onPress={() => {
|
|
208
201
|
!contentType && hide();
|
|
209
|
-
onItemPress(index);
|
|
202
|
+
onItemPress({ index, item });
|
|
210
203
|
}}
|
|
211
|
-
|
|
212
|
-
|
|
204
|
+
index={index}
|
|
205
|
+
item={item}
|
|
213
206
|
/>
|
|
214
207
|
);
|
|
215
208
|
}}
|
|
@@ -31,6 +31,7 @@ export const SearchBar = props => {
|
|
|
31
31
|
onChangeText = () => {},
|
|
32
32
|
onCancel = () => {},
|
|
33
33
|
debounceDelay = 1000,
|
|
34
|
+
showCancelButton = true,
|
|
34
35
|
...rest
|
|
35
36
|
} = props;
|
|
36
37
|
const inputRef = useRef();
|
|
@@ -55,7 +56,7 @@ export const SearchBar = props => {
|
|
|
55
56
|
|
|
56
57
|
const searchInputWidth = searchAnimationController.interpolate({
|
|
57
58
|
inputRange: [0, 1],
|
|
58
|
-
outputRange: ["100%", "85%"],
|
|
59
|
+
outputRange: ["100%", showCancelButton ? "85%" : "100%"],
|
|
59
60
|
});
|
|
60
61
|
|
|
61
62
|
const onCancelHandle = () => {
|
|
@@ -105,7 +106,9 @@ export const SearchBar = props => {
|
|
|
105
106
|
opacity: searchAnimationController,
|
|
106
107
|
}}
|
|
107
108
|
>
|
|
108
|
-
|
|
109
|
+
{showCancelButton && (
|
|
110
|
+
<Button variant="text" label="Cancel" onPress={onCancelHandle} />
|
|
111
|
+
)}
|
|
109
112
|
</Animated.View>
|
|
110
113
|
</Container>
|
|
111
114
|
);
|
|
@@ -143,4 +146,8 @@ SearchBar.propTypes = {
|
|
|
143
146
|
* Method called when the cancel button is pressed.
|
|
144
147
|
*/
|
|
145
148
|
onCancel: PropTypes.func,
|
|
149
|
+
/**
|
|
150
|
+
* option to hide the cancel button. Default is true
|
|
151
|
+
*/
|
|
152
|
+
showCancelButton: PropTypes.bool,
|
|
146
153
|
};
|
package/src/constants.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const FUSE_KEYS = ["label", "name", "value", "title", "email"];
|