react-native-input-select 0.3.0 → 0.7.0

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.
Files changed (55) hide show
  1. package/README.md +32 -19
  2. package/lib/commonjs/Dropdown.js +12 -25
  3. package/lib/commonjs/Dropdown.js.map +1 -1
  4. package/lib/commonjs/DropdownList.js +15 -10
  5. package/lib/commonjs/DropdownList.js.map +1 -1
  6. package/lib/commonjs/DropdownListItem.js +5 -4
  7. package/lib/commonjs/DropdownListItem.js.map +1 -1
  8. package/lib/commonjs/Input.js +50 -0
  9. package/lib/commonjs/Input.js.map +1 -0
  10. package/lib/commonjs/Modal.js +2 -2
  11. package/lib/commonjs/Modal.js.map +1 -1
  12. package/lib/commonjs/constants/index.js +11 -0
  13. package/lib/commonjs/constants/index.js.map +1 -0
  14. package/lib/commonjs/index.js +48 -11
  15. package/lib/commonjs/index.js.map +1 -1
  16. package/lib/commonjs/styles/colors.js +1 -0
  17. package/lib/commonjs/styles/colors.js.map +1 -1
  18. package/lib/commonjs/styles/input.js +33 -0
  19. package/lib/commonjs/styles/input.js.map +1 -0
  20. package/lib/module/Dropdown.js +11 -25
  21. package/lib/module/Dropdown.js.map +1 -1
  22. package/lib/module/DropdownList.js +16 -11
  23. package/lib/module/DropdownList.js.map +1 -1
  24. package/lib/module/DropdownListItem.js +5 -4
  25. package/lib/module/DropdownListItem.js.map +1 -1
  26. package/lib/module/Input.js +33 -0
  27. package/lib/module/Input.js.map +1 -0
  28. package/lib/module/Modal.js +2 -2
  29. package/lib/module/Modal.js.map +1 -1
  30. package/lib/module/constants/index.js +3 -0
  31. package/lib/module/constants/index.js.map +1 -0
  32. package/lib/module/index.js +46 -11
  33. package/lib/module/index.js.map +1 -1
  34. package/lib/module/styles/colors.js +1 -0
  35. package/lib/module/styles/colors.js.map +1 -1
  36. package/lib/module/styles/input.js +22 -0
  37. package/lib/module/styles/input.js.map +1 -0
  38. package/lib/typescript/Dropdown.d.ts +1 -1
  39. package/lib/typescript/DropdownList.d.ts +1 -1
  40. package/lib/typescript/DropdownListItem.d.ts +1 -1
  41. package/lib/typescript/Input.d.ts +1 -0
  42. package/lib/typescript/Modal.d.ts +1 -1
  43. package/lib/typescript/constants/index.d.ts +2 -0
  44. package/lib/typescript/index.d.ts +1 -1
  45. package/lib/typescript/styles/input.d.ts +1 -0
  46. package/package.json +8 -3
  47. package/src/Dropdown.tsx +13 -25
  48. package/src/DropdownList.tsx +10 -7
  49. package/src/DropdownListItem.tsx +4 -3
  50. package/src/Input.tsx +37 -0
  51. package/src/Modal.tsx +2 -2
  52. package/src/constants/index.ts +2 -0
  53. package/src/index.tsx +55 -7
  54. package/src/styles/colors.ts +1 -0
  55. package/src/styles/input.ts +22 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["React","useState","Dropdown","CustomModal","DropdownList","DropdownSelect","placeholder","label","error","helperText","options","optionLabel","optionValue","onValueChange","selectedValue","isMultiple","labelStyle","dropdownStyle","dropdownContainerStyle","selectedItemStyle","modalBackgroundStyle","modalOptionsContainer","open","setOpen","selectedItem","setSelectedItem","selectedItems","setSelectedItems","Array","isArray","undefined","handleSingleSelection","value","handleMultipleSelections","selectedValues","includes","filter","item","push","getSelectedItemsLabel","selectedLabels","forEach","element","selectedItemLabel","find"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport Dropdown from './Dropdown';\nimport CustomModal from './Modal';\nimport DropdownList from './DropdownList';\n\nexport const DropdownSelect = ({\n placeholder,\n label,\n error,\n helperText,\n options,\n optionLabel,\n optionValue,\n onValueChange,\n selectedValue,\n isMultiple,\n labelStyle,\n dropdownStyle,\n dropdownContainerStyle,\n selectedItemStyle,\n modalBackgroundStyle,\n modalOptionsContainer,\n}: any) => {\n const [open, setOpen] = useState(false);\n const [selectedItem, setSelectedItem] = useState(selectedValue); //for single selection\n const [selectedItems, setSelectedItems] = useState(\n Array.isArray(selectedValue)\n ? selectedValue\n : selectedValue === '' || selectedValue === undefined\n ? []\n : [selectedValue]\n ); //for multiple selection\n\n /*===========================================\n * Selection handlers\n *==========================================*/\n const handleSingleSelection = (value: any) => {\n if (selectedItem === value) {\n setSelectedItem(null);\n } else {\n setSelectedItem(value);\n onValueChange(value); //send value to parent\n setOpen(false); //close modal upon selection\n }\n };\n\n const handleMultipleSelections = (value: any) => {\n let selectedValues = [...selectedItems];\n\n if (selectedValues.includes(value)) {\n selectedValues = selectedValues.filter((item) => item !== value);\n } else {\n selectedValues.push(value);\n }\n setSelectedItems(selectedValues);\n };\n\n /*===========================================\n * Get label handler\n *==========================================*/\n const getSelectedItemsLabel = () => {\n if (isMultiple) {\n let selectedLabels: Array<string> = [];\n selectedItems &&\n selectedItems.forEach((element) => {\n let selectedItemLabel =\n options &&\n options.find(\n (item: string) => item[optionValue ?? 'value'] === element\n )?.[optionLabel];\n selectedLabels.push(selectedItemLabel);\n });\n return selectedLabels;\n }\n\n let selectedItemLabel =\n options &&\n options.find(\n (item: string) => item[optionValue ?? 'value'] === selectedItem\n );\n return selectedItemLabel?.[optionLabel];\n };\n\n return (\n <>\n <Dropdown\n label={label}\n placeholder={placeholder}\n helperText={helperText}\n error={error}\n getSelectedItemsLabel={getSelectedItemsLabel}\n selectedItem={selectedItem}\n selectedItems={selectedItems}\n setOpen={setOpen}\n open={open}\n labelStyle={labelStyle}\n dropdownStyle={dropdownStyle}\n dropdownContainerStyle={dropdownContainerStyle}\n selectedItemStyle={selectedItemStyle}\n isMultiple={isMultiple}\n />\n <CustomModal\n open={open}\n setOpen={setOpen}\n modalBackgroundStyle={modalBackgroundStyle}\n modalOptionsContainer={modalOptionsContainer}\n onRequestClose={() => {}}\n >\n <DropdownList\n options={options}\n optionLabel={optionLabel}\n optionValue={optionValue}\n isMultiple={isMultiple}\n selectedItems={selectedItems}\n selectedItem={selectedItem}\n handleMultipleSelections={handleMultipleSelections}\n handleSingleSelection={handleSingleSelection}\n />\n </CustomModal>\n </>\n );\n};\n\nexport default DropdownSelect;\n"]}
1
+ {"version":3,"sources":["index.tsx"],"names":["React","useState","Dropdown","CustomModal","DropdownList","DEFAULT_OPTION_LABEL","DEFAULT_OPTION_VALUE","Input","DropdownSelect","placeholder","label","error","helperText","options","optionLabel","optionValue","onValueChange","selectedValue","isMultiple","isSearchable","labelStyle","dropdownStyle","dropdownContainerStyle","selectedItemStyle","modalBackgroundStyle","modalOptionsContainer","searchInputStyle","primaryColor","newOptions","setNewOptions","open","setOpen","selectedItem","setSelectedItem","selectedItems","setSelectedItems","Array","isArray","undefined","searchValue","setSearchValue","handleSingleSelection","value","handleMultipleSelections","selectedValues","includes","filter","item","push","getSelectedItemsLabel","selectedLabels","forEach","element","selectedItemLabel","find","onSearch","searchTerm","toString","toLocaleLowerCase","searchResults","toLowerCase","handleToggleModal","text"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport Dropdown from './Dropdown';\nimport CustomModal from './Modal';\nimport DropdownList from './DropdownList';\nimport { DEFAULT_OPTION_LABEL, DEFAULT_OPTION_VALUE } from './constants';\nimport { Input } from './Input';\n\nexport const DropdownSelect = ({\n placeholder,\n label,\n error,\n helperText,\n options,\n optionLabel,\n optionValue,\n onValueChange,\n selectedValue,\n isMultiple,\n isSearchable,\n labelStyle,\n dropdownStyle,\n dropdownContainerStyle,\n selectedItemStyle,\n modalBackgroundStyle,\n modalOptionsContainer,\n searchInputStyle,\n primaryColor,\n}: any) => {\n const [newOptions, setNewOptions] = useState(options ? options : []);\n const [open, setOpen] = useState(false);\n const [selectedItem, setSelectedItem] = useState(selectedValue); //for single selection\n const [selectedItems, setSelectedItems] = useState(\n Array.isArray(selectedValue)\n ? selectedValue\n : selectedValue === '' || selectedValue === undefined\n ? []\n : [selectedValue]\n ); //for multiple selection\n const [searchValue, setSearchValue] = useState('');\n\n /*===========================================\n * Selection handlers\n *==========================================*/\n const handleSingleSelection = (value: any) => {\n if (selectedItem === value) {\n setSelectedItem(null);\n } else {\n setSelectedItem(value);\n onValueChange(value); //send value to parent\n setOpen(false); //close modal upon selection\n }\n };\n\n const handleMultipleSelections = (value: any) => {\n let selectedValues = [...selectedItems];\n\n if (selectedValues.includes(value)) {\n selectedValues = selectedValues.filter((item) => item !== value);\n } else {\n selectedValues.push(value);\n }\n setSelectedItems(selectedValues);\n };\n\n /*===========================================\n * Get label handler\n *==========================================*/\n const getSelectedItemsLabel = () => {\n if (isMultiple) {\n let selectedLabels: Array<string> = [];\n selectedItems &&\n selectedItems.forEach((element) => {\n let selectedItemLabel =\n options &&\n options.find(\n (item: string) =>\n item[optionValue ?? DEFAULT_OPTION_VALUE] === element\n )?.[optionLabel];\n selectedLabels.push(selectedItemLabel);\n });\n return selectedLabels;\n }\n\n let selectedItemLabel =\n options &&\n options.find(\n (item: string) =>\n item[optionValue ?? DEFAULT_OPTION_VALUE] === selectedItem\n );\n return selectedItemLabel?.[optionLabel ?? DEFAULT_OPTION_LABEL];\n };\n\n /*===========================================\n * Search\n *==========================================*/\n const onSearch = (value: string) => {\n setSearchValue(value);\n let searchTerm = value.toString().toLocaleLowerCase();\n const searchResults = options.filter((item: any) => {\n return (\n item[optionLabel ?? DEFAULT_OPTION_LABEL]\n .toString()\n .toLowerCase()\n .includes(searchTerm) ||\n item[optionValue ?? DEFAULT_OPTION_VALUE]\n .toString(searchTerm)\n .toLowerCase()\n .includes()\n );\n });\n\n setNewOptions(searchResults);\n };\n\n /*===========================================\n * Modal\n *==========================================*/\n const handleToggleModal = () => {\n setOpen(!open);\n setSearchValue('');\n setNewOptions(options);\n };\n\n return (\n <>\n <Dropdown\n label={label}\n placeholder={placeholder}\n helperText={helperText}\n error={error}\n getSelectedItemsLabel={getSelectedItemsLabel}\n selectedItem={selectedItem}\n selectedItems={selectedItems}\n handleToggleModal={handleToggleModal}\n labelStyle={labelStyle}\n dropdownStyle={dropdownStyle}\n dropdownContainerStyle={dropdownContainerStyle}\n selectedItemStyle={selectedItemStyle}\n isMultiple={isMultiple}\n primaryColor={primaryColor}\n />\n <CustomModal\n open={open}\n handleToggleModal={handleToggleModal}\n modalBackgroundStyle={modalBackgroundStyle}\n modalOptionsContainer={modalOptionsContainer}\n onRequestClose={() => {}}\n >\n {isSearchable && (\n <Input\n value={searchValue}\n onChangeText={(text: string) => onSearch(text)}\n style={searchInputStyle}\n />\n )}\n <DropdownList\n options={newOptions}\n optionLabel={optionLabel}\n optionValue={optionValue}\n isMultiple={isMultiple}\n selectedItems={selectedItems}\n selectedItem={selectedItem}\n handleMultipleSelections={handleMultipleSelections}\n handleSingleSelection={handleSingleSelection}\n primaryColor={primaryColor}\n />\n </CustomModal>\n </>\n );\n};\n\nexport default DropdownSelect;\n"]}
@@ -1,5 +1,6 @@
1
1
  export const colors = {
2
2
  primary: '#EF8031',
3
+ red: '#FA4169',
3
4
  black: '#000000',
4
5
  white: '#FFFFFF',
5
6
  dark: '#11142D',
@@ -1 +1 @@
1
- {"version":3,"sources":["colors.ts"],"names":["colors","primary","black","white","dark","gray","lightGray"],"mappings":"AAAA,OAAO,MAAMA,MAAW,GAAG;AACzBC,EAAAA,OAAO,EAAE,SADgB;AAEzBC,EAAAA,KAAK,EAAE,SAFkB;AAGzBC,EAAAA,KAAK,EAAE,SAHkB;AAIzBC,EAAAA,IAAI,EAAE,SAJmB;AAKzBC,EAAAA,IAAI,EAAE,SALmB;AAMzBC,EAAAA,SAAS,EAAE;AANc,CAApB","sourcesContent":["export const colors: any = {\n primary: '#EF8031',\n black: '#000000',\n white: '#FFFFFF',\n dark: '#11142D',\n gray: '#808191',\n lightGray: '#F7F7F7',\n};\n"]}
1
+ {"version":3,"sources":["colors.ts"],"names":["colors","primary","red","black","white","dark","gray","lightGray"],"mappings":"AAAA,OAAO,MAAMA,MAAW,GAAG;AACzBC,EAAAA,OAAO,EAAE,SADgB;AAEzBC,EAAAA,GAAG,EAAE,SAFoB;AAGzBC,EAAAA,KAAK,EAAE,SAHkB;AAIzBC,EAAAA,KAAK,EAAE,SAJkB;AAKzBC,EAAAA,IAAI,EAAE,SALmB;AAMzBC,EAAAA,IAAI,EAAE,SANmB;AAOzBC,EAAAA,SAAS,EAAE;AAPc,CAApB","sourcesContent":["export const colors: any = {\n primary: '#EF8031',\n red: '#FA4169',\n black: '#000000',\n white: '#FFFFFF',\n dark: '#11142D',\n gray: '#808191',\n lightGray: '#F7F7F7',\n};\n"]}
@@ -0,0 +1,22 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { colors } from './colors';
3
+ export const inputStyles = StyleSheet.create({
4
+ input: {
5
+ paddingVertical: 18,
6
+ paddingHorizontal: 23,
7
+ backgroundColor: colors.lightGray,
8
+ borderRadius: 8,
9
+ borderColor: colors.dark,
10
+ borderWidth: 1,
11
+ color: colors.dark,
12
+ width: '100%',
13
+ minHeight: 64
14
+ },
15
+ inputFocusState: {
16
+ borderWidth: 2,
17
+ borderStyle: 'solid',
18
+ borderColor: colors.primary,
19
+ borderRadius: 8
20
+ }
21
+ });
22
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["input.ts"],"names":["StyleSheet","colors","inputStyles","create","input","paddingVertical","paddingHorizontal","backgroundColor","lightGray","borderRadius","borderColor","dark","borderWidth","color","width","minHeight","inputFocusState","borderStyle","primary"],"mappings":"AAAA,SAASA,UAAT,QAA2B,cAA3B;AACA,SAASC,MAAT,QAAuB,UAAvB;AAEA,OAAO,MAAMC,WAAgB,GAAGF,UAAU,CAACG,MAAX,CAAkB;AAChDC,EAAAA,KAAK,EAAE;AACLC,IAAAA,eAAe,EAAE,EADZ;AAELC,IAAAA,iBAAiB,EAAE,EAFd;AAGLC,IAAAA,eAAe,EAAEN,MAAM,CAACO,SAHnB;AAILC,IAAAA,YAAY,EAAE,CAJT;AAKLC,IAAAA,WAAW,EAAET,MAAM,CAACU,IALf;AAMLC,IAAAA,WAAW,EAAE,CANR;AAOLC,IAAAA,KAAK,EAAEZ,MAAM,CAACU,IAPT;AAQLG,IAAAA,KAAK,EAAE,MARF;AASLC,IAAAA,SAAS,EAAE;AATN,GADyC;AAYhDC,EAAAA,eAAe,EAAE;AACfJ,IAAAA,WAAW,EAAE,CADE;AAEfK,IAAAA,WAAW,EAAE,OAFE;AAGfP,IAAAA,WAAW,EAAET,MAAM,CAACiB,OAHL;AAIfT,IAAAA,YAAY,EAAE;AAJC;AAZ+B,CAAlB,CAAzB","sourcesContent":["import { StyleSheet } from 'react-native';\nimport { colors } from './colors';\n\nexport const inputStyles: any = StyleSheet.create({\n input: {\n paddingVertical: 18,\n paddingHorizontal: 23,\n backgroundColor: colors.lightGray,\n borderRadius: 8,\n borderColor: colors.dark,\n borderWidth: 1,\n color: colors.dark,\n width: '100%',\n minHeight: 64,\n },\n inputFocusState: {\n borderWidth: 2,\n borderStyle: 'solid',\n borderColor: colors.primary,\n borderRadius: 8,\n },\n});\n"]}
@@ -1,2 +1,2 @@
1
- declare const Dropdown: ({ label, placeholder, helperText, error, getSelectedItemsLabel, setOpen, open, isMultiple, selectedItem, selectedItems, labelStyle, dropdownStyle, dropdownContainerStyle, selectedItemStyle, }: any) => JSX.Element;
1
+ declare const Dropdown: ({ label, placeholder, helperText, error, getSelectedItemsLabel, handleToggleModal, isMultiple, selectedItem, selectedItems, labelStyle, dropdownStyle, dropdownContainerStyle, selectedItemStyle, primaryColor, }: any) => JSX.Element;
2
2
  export default Dropdown;
@@ -1,2 +1,2 @@
1
- declare const DropdownList: ({ options, optionLabel, optionValue, isMultiple, selectedItems, selectedItem, handleMultipleSelections, handleSingleSelection, }: any) => JSX.Element;
1
+ declare const DropdownList: ({ options, optionLabel, optionValue, isMultiple, selectedItems, selectedItem, handleMultipleSelections, handleSingleSelection, primaryColor, }: any) => JSX.Element;
2
2
  export default DropdownList;
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
- declare const _default: React.MemoExoticComponent<({ item, optionLabel, optionValue, isMultiple, selectedOption, onChange, }: any) => JSX.Element>;
2
+ declare const _default: React.MemoExoticComponent<({ item, optionLabel, optionValue, isMultiple, selectedOption, onChange, primaryColor, }: any) => JSX.Element>;
3
3
  export default _default;
@@ -0,0 +1 @@
1
+ export declare const Input: ({ placeholder, value, onChangeText, style, ...rest }: any) => JSX.Element;
@@ -1,2 +1,2 @@
1
- declare const CustomModal: ({ open, setOpen, onRequestClose, modalBackgroundStyle, modalOptionsContainerStyle, children, }: any) => JSX.Element;
1
+ declare const CustomModal: ({ open, handleToggleModal, onRequestClose, modalBackgroundStyle, modalOptionsContainerStyle, children, }: any) => JSX.Element;
2
2
  export default CustomModal;
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_OPTION_LABEL = "label";
2
+ export declare const DEFAULT_OPTION_VALUE = "value";
@@ -1,2 +1,2 @@
1
- export declare const DropdownSelect: ({ placeholder, label, error, helperText, options, optionLabel, optionValue, onValueChange, selectedValue, isMultiple, labelStyle, dropdownStyle, dropdownContainerStyle, selectedItemStyle, modalBackgroundStyle, modalOptionsContainer, }: any) => JSX.Element;
1
+ export declare const DropdownSelect: ({ placeholder, label, error, helperText, options, optionLabel, optionValue, onValueChange, selectedValue, isMultiple, isSearchable, labelStyle, dropdownStyle, dropdownContainerStyle, selectedItemStyle, modalBackgroundStyle, modalOptionsContainer, searchInputStyle, primaryColor, }: any) => JSX.Element;
2
2
  export default DropdownSelect;
@@ -0,0 +1 @@
1
+ export declare const inputStyles: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-input-select",
3
- "version": "0.3.0",
3
+ "version": "0.7.0",
4
4
  "description": "Dropdown package for react-native",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -29,12 +29,17 @@
29
29
  "release": "release-it -- minor --ci",
30
30
  "example": "yarn --cwd example",
31
31
  "pods": "cd example && pod-install --quiet",
32
- "bootstrap": "yarn example && yarn && yarn pods"
32
+ "bootstrap": "yarn example && yarn && yarn pods",
33
+ "start": "yarn example start",
34
+ "android": "yarn example android",
35
+ "ios": "yarn example ios"
33
36
  },
34
37
  "keywords": [
35
38
  "react-native",
36
39
  "ios",
37
- "android"
40
+ "android",
41
+ "dropdown",
42
+ "selection"
38
43
  ],
39
44
  "repository": "https://github.com/azeezat/react-native-select",
40
45
  "author": "Azeezat <azeezat94@gmail.com> (https://github.com/azeezat)",
package/src/Dropdown.tsx CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  Image,
9
9
  } from 'react-native';
10
10
  import { colors } from './styles/colors';
11
+ import { inputStyles } from './styles/input';
11
12
  import { typography } from './styles/typography';
12
13
 
13
14
  const Dropdown = ({
@@ -16,8 +17,7 @@ const Dropdown = ({
16
17
  helperText,
17
18
  error,
18
19
  getSelectedItemsLabel,
19
- setOpen,
20
- open,
20
+ handleToggleModal,
21
21
  isMultiple,
22
22
  selectedItem,
23
23
  selectedItems,
@@ -25,6 +25,7 @@ const Dropdown = ({
25
25
  dropdownStyle,
26
26
  dropdownContainerStyle,
27
27
  selectedItemStyle,
28
+ primaryColor,
28
29
  }: any) => {
29
30
  return (
30
31
  <View style={[styles.dropdownInputContainer, dropdownContainerStyle]}>
@@ -32,10 +33,10 @@ const Dropdown = ({
32
33
  <Text style={[styles.label, labelStyle]}>{label}</Text>
33
34
  )}
34
35
  <Pressable
35
- onPress={() => setOpen(!open)}
36
+ onPress={() => handleToggleModal()}
36
37
  style={({ pressed }) => [
37
- pressed && styles.inputFocusState,
38
- styles.input,
38
+ pressed && inputStyles.inputFocusState,
39
+ inputStyles.input,
39
40
  dropdownStyle,
40
41
  ]}
41
42
  >
@@ -52,7 +53,11 @@ const Dropdown = ({
52
53
  getSelectedItemsLabel().map((item: any, i: Number) => (
53
54
  <Text
54
55
  key={`SelectedItems${i}`}
55
- style={[styles.selectedItems, selectedItemStyle]}
56
+ style={[
57
+ styles.selectedItems,
58
+ { backgroundColor: primaryColor },
59
+ selectedItemStyle,
60
+ ]}
56
61
  >
57
62
  {item}
58
63
  </Text>
@@ -84,30 +89,13 @@ const Dropdown = ({
84
89
 
85
90
  const styles = StyleSheet.create({
86
91
  label: { marginBottom: 16, color: colors.gray, ...typography.caption },
87
- input: {
88
- paddingVertical: 18,
89
- paddingHorizontal: 23,
90
- backgroundColor: colors.lightGray,
91
- borderRadius: 8,
92
- borderColor: colors.dark,
93
- borderWidth: 1,
94
- color: colors.dark,
95
- width: '100%',
96
- minHeight: 64,
97
- },
98
- inputFocusState: {
99
- borderWidth: 2,
100
- borderStyle: 'solid',
101
- borderColor: colors.primary,
102
- borderRadius: 8,
103
- },
104
92
  inputFocusErrorState: {
105
93
  borderWidth: 2,
106
94
  borderStyle: 'solid',
107
- borderColor: colors.cliqkiRed,
95
+ borderColor: colors.red,
108
96
  },
109
97
  iconStyle: { position: 'absolute', right: 25, top: 25 },
110
- error: { color: colors.cliqkiRed, marginTop: 8, ...typography.caption },
98
+ error: { color: colors.red, marginTop: 8, ...typography.caption },
111
99
  helper: { marginTop: 8, color: colors.primary, ...typography.caption },
112
100
  dropdownInputContainer: { marginBottom: 23, width: '100%' },
113
101
  selectedItemsContainer: { flexDirection: 'row', flexWrap: 'nowrap' },
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { View, FlatList, StyleSheet } from 'react-native';
2
+ import { View, FlatList, StyleSheet, Text } from 'react-native';
3
3
  import DropdownListItem from './DropdownListItem';
4
4
  import { colors } from './styles/colors';
5
5
 
@@ -12,18 +12,18 @@ const DropdownList = ({
12
12
  selectedItem,
13
13
  handleMultipleSelections,
14
14
  handleSingleSelection,
15
+ primaryColor,
15
16
  }: any) => {
16
17
  return (
17
18
  <FlatList
18
19
  data={options}
19
20
  extraData={isMultiple ? selectedItems : selectedItem}
20
21
  initialNumToRender={5}
21
- // ListEmptyComponent={
22
- // <EmptyStateComponent
23
- // style={{alignItems: 'flex-start', marginTop: 30}}
24
- // message="Be the first to reply"
25
- // />
26
- // }
22
+ ListEmptyComponent={
23
+ <View style={styles.emptyListStyle}>
24
+ <Text>No options available</Text>
25
+ </View>
26
+ }
27
27
  ItemSeparatorComponent={() => <View style={styles.itemSeparatorStyle} />}
28
28
  renderItem={(item) =>
29
29
  _renderItem(item, {
@@ -34,6 +34,7 @@ const DropdownList = ({
34
34
  onChange: isMultiple
35
35
  ? handleMultipleSelections
36
36
  : handleSingleSelection,
37
+ primaryColor,
37
38
  })
38
39
  }
39
40
  keyExtractor={(_item, index) => `Options${index}`}
@@ -50,6 +51,7 @@ const _renderItem = ({ item }: any, props: any) => {
50
51
  isMultiple={props.isMultiple}
51
52
  selectedOption={props.selectedOption}
52
53
  onChange={props.onChange}
54
+ primaryColor={props.primaryColor}
53
55
  />
54
56
  );
55
57
  };
@@ -71,6 +73,7 @@ const styles = StyleSheet.create({
71
73
  height: 1,
72
74
  opacity: 0.15,
73
75
  },
76
+ emptyListStyle: { alignItems: 'center', width: '100%', marginVertical: 20 },
74
77
  });
75
78
 
76
79
  export default DropdownList;
@@ -10,6 +10,7 @@ const DropdownListItem = ({
10
10
  isMultiple,
11
11
  selectedOption,
12
12
  onChange,
13
+ primaryColor,
13
14
  }: any) => {
14
15
  const selectedOptionValue = optionValue ?? 'value';
15
16
  return (
@@ -26,9 +27,9 @@ const DropdownListItem = ({
26
27
  }
27
28
  onChange={() => onChange(item[selectedOptionValue])}
28
29
  boxType="circle" //works on ios only
29
- tintColors={{ true: colors.primary }} //android control
30
- onCheckColor={colors.primary} //ios checkmark colour control
31
- onTintColor={colors.primary} //ios box colour control
30
+ tintColors={{ true: primaryColor || colors.primary }} //android control
31
+ onCheckColor={primaryColor || colors.primary} //ios checkmark colour control
32
+ onTintColor={primaryColor || colors.primary} //ios box colour control
32
33
  />
33
34
  </View>
34
35
  <View>
package/src/Input.tsx ADDED
@@ -0,0 +1,37 @@
1
+ import React, { useState } from 'react';
2
+ import { TextInput, StyleSheet, View } from 'react-native';
3
+ import { inputStyles } from './styles/input';
4
+
5
+ export const Input = ({
6
+ placeholder,
7
+ value,
8
+ onChangeText,
9
+ style,
10
+ ...rest
11
+ }: any) => {
12
+ const [isFocused, setFocus] = useState(false);
13
+
14
+ return (
15
+ <View style={styles.container}>
16
+ <TextInput
17
+ placeholder={placeholder}
18
+ style={[
19
+ inputStyles.input,
20
+ isFocused && inputStyles.inputFocusState,
21
+ style,
22
+ ]}
23
+ onFocus={() => {
24
+ setFocus(true);
25
+ }}
26
+ onBlur={() => setFocus(false)}
27
+ value={value}
28
+ onChangeText={onChangeText}
29
+ {...rest}
30
+ />
31
+ </View>
32
+ );
33
+ };
34
+
35
+ const styles = StyleSheet.create({
36
+ container: { margin: 23 },
37
+ });
package/src/Modal.tsx CHANGED
@@ -9,7 +9,7 @@ import { colors } from './styles/colors';
9
9
 
10
10
  const CustomModal = ({
11
11
  open,
12
- setOpen,
12
+ handleToggleModal,
13
13
  onRequestClose,
14
14
  modalBackgroundStyle,
15
15
  modalOptionsContainerStyle,
@@ -23,7 +23,7 @@ const CustomModal = ({
23
23
  animationType="fade"
24
24
  >
25
25
  <TouchableOpacity
26
- onPress={() => setOpen(!open)}
26
+ onPress={() => handleToggleModal()}
27
27
  style={[
28
28
  styles.modalContainer,
29
29
  styles.modalBackgroundStyle,
@@ -0,0 +1,2 @@
1
+ export const DEFAULT_OPTION_LABEL = 'label';
2
+ export const DEFAULT_OPTION_VALUE = 'value';
package/src/index.tsx CHANGED
@@ -2,6 +2,8 @@ import React, { useState } from 'react';
2
2
  import Dropdown from './Dropdown';
3
3
  import CustomModal from './Modal';
4
4
  import DropdownList from './DropdownList';
5
+ import { DEFAULT_OPTION_LABEL, DEFAULT_OPTION_VALUE } from './constants';
6
+ import { Input } from './Input';
5
7
 
6
8
  export const DropdownSelect = ({
7
9
  placeholder,
@@ -14,13 +16,17 @@ export const DropdownSelect = ({
14
16
  onValueChange,
15
17
  selectedValue,
16
18
  isMultiple,
19
+ isSearchable,
17
20
  labelStyle,
18
21
  dropdownStyle,
19
22
  dropdownContainerStyle,
20
23
  selectedItemStyle,
21
24
  modalBackgroundStyle,
22
25
  modalOptionsContainer,
26
+ searchInputStyle,
27
+ primaryColor,
23
28
  }: any) => {
29
+ const [newOptions, setNewOptions] = useState(options ? options : []);
24
30
  const [open, setOpen] = useState(false);
25
31
  const [selectedItem, setSelectedItem] = useState(selectedValue); //for single selection
26
32
  const [selectedItems, setSelectedItems] = useState(
@@ -30,6 +36,7 @@ export const DropdownSelect = ({
30
36
  ? []
31
37
  : [selectedValue]
32
38
  ); //for multiple selection
39
+ const [searchValue, setSearchValue] = useState('');
33
40
 
34
41
  /*===========================================
35
42
  * Selection handlers
@@ -66,7 +73,8 @@ export const DropdownSelect = ({
66
73
  let selectedItemLabel =
67
74
  options &&
68
75
  options.find(
69
- (item: string) => item[optionValue ?? 'value'] === element
76
+ (item: string) =>
77
+ item[optionValue ?? DEFAULT_OPTION_VALUE] === element
70
78
  )?.[optionLabel];
71
79
  selectedLabels.push(selectedItemLabel);
72
80
  });
@@ -76,9 +84,41 @@ export const DropdownSelect = ({
76
84
  let selectedItemLabel =
77
85
  options &&
78
86
  options.find(
79
- (item: string) => item[optionValue ?? 'value'] === selectedItem
87
+ (item: string) =>
88
+ item[optionValue ?? DEFAULT_OPTION_VALUE] === selectedItem
80
89
  );
81
- return selectedItemLabel?.[optionLabel];
90
+ return selectedItemLabel?.[optionLabel ?? DEFAULT_OPTION_LABEL];
91
+ };
92
+
93
+ /*===========================================
94
+ * Search
95
+ *==========================================*/
96
+ const onSearch = (value: string) => {
97
+ setSearchValue(value);
98
+ let searchTerm = value.toString().toLocaleLowerCase();
99
+ const searchResults = options.filter((item: any) => {
100
+ return (
101
+ item[optionLabel ?? DEFAULT_OPTION_LABEL]
102
+ .toString()
103
+ .toLowerCase()
104
+ .includes(searchTerm) ||
105
+ item[optionValue ?? DEFAULT_OPTION_VALUE]
106
+ .toString(searchTerm)
107
+ .toLowerCase()
108
+ .includes()
109
+ );
110
+ });
111
+
112
+ setNewOptions(searchResults);
113
+ };
114
+
115
+ /*===========================================
116
+ * Modal
117
+ *==========================================*/
118
+ const handleToggleModal = () => {
119
+ setOpen(!open);
120
+ setSearchValue('');
121
+ setNewOptions(options);
82
122
  };
83
123
 
84
124
  return (
@@ -91,23 +131,30 @@ export const DropdownSelect = ({
91
131
  getSelectedItemsLabel={getSelectedItemsLabel}
92
132
  selectedItem={selectedItem}
93
133
  selectedItems={selectedItems}
94
- setOpen={setOpen}
95
- open={open}
134
+ handleToggleModal={handleToggleModal}
96
135
  labelStyle={labelStyle}
97
136
  dropdownStyle={dropdownStyle}
98
137
  dropdownContainerStyle={dropdownContainerStyle}
99
138
  selectedItemStyle={selectedItemStyle}
100
139
  isMultiple={isMultiple}
140
+ primaryColor={primaryColor}
101
141
  />
102
142
  <CustomModal
103
143
  open={open}
104
- setOpen={setOpen}
144
+ handleToggleModal={handleToggleModal}
105
145
  modalBackgroundStyle={modalBackgroundStyle}
106
146
  modalOptionsContainer={modalOptionsContainer}
107
147
  onRequestClose={() => {}}
108
148
  >
149
+ {isSearchable && (
150
+ <Input
151
+ value={searchValue}
152
+ onChangeText={(text: string) => onSearch(text)}
153
+ style={searchInputStyle}
154
+ />
155
+ )}
109
156
  <DropdownList
110
- options={options}
157
+ options={newOptions}
111
158
  optionLabel={optionLabel}
112
159
  optionValue={optionValue}
113
160
  isMultiple={isMultiple}
@@ -115,6 +162,7 @@ export const DropdownSelect = ({
115
162
  selectedItem={selectedItem}
116
163
  handleMultipleSelections={handleMultipleSelections}
117
164
  handleSingleSelection={handleSingleSelection}
165
+ primaryColor={primaryColor}
118
166
  />
119
167
  </CustomModal>
120
168
  </>
@@ -1,5 +1,6 @@
1
1
  export const colors: any = {
2
2
  primary: '#EF8031',
3
+ red: '#FA4169',
3
4
  black: '#000000',
4
5
  white: '#FFFFFF',
5
6
  dark: '#11142D',
@@ -0,0 +1,22 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { colors } from './colors';
3
+
4
+ export const inputStyles: any = StyleSheet.create({
5
+ input: {
6
+ paddingVertical: 18,
7
+ paddingHorizontal: 23,
8
+ backgroundColor: colors.lightGray,
9
+ borderRadius: 8,
10
+ borderColor: colors.dark,
11
+ borderWidth: 1,
12
+ color: colors.dark,
13
+ width: '100%',
14
+ minHeight: 64,
15
+ },
16
+ inputFocusState: {
17
+ borderWidth: 2,
18
+ borderStyle: 'solid',
19
+ borderColor: colors.primary,
20
+ borderRadius: 8,
21
+ },
22
+ });