react-native-input-select 0.4.0 → 0.8.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 +33 -23
  2. package/lib/commonjs/Dropdown.js +20 -28
  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 +53 -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 +51 -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 +32 -0
  19. package/lib/commonjs/styles/input.js.map +1 -0
  20. package/lib/module/Dropdown.js +20 -29
  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 +36 -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 +49 -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 +21 -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 +26 -31
  48. package/src/DropdownList.tsx +10 -7
  49. package/src/DropdownListItem.tsx +4 -3
  50. package/src/Input.tsx +39 -0
  51. package/src/Modal.tsx +2 -2
  52. package/src/constants/index.ts +2 -0
  53. package/src/index.tsx +58 -7
  54. package/src/styles/colors.ts +1 -0
  55. package/src/styles/input.ts +21 -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","multipleSelectedItemStyle","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 multipleSelectedItemStyle,\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 multipleSelectedItemStyle={multipleSelectedItemStyle}\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 primaryColor={primaryColor}\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,21 @@
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
+ }
20
+ });
21
+ //# 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;AAHL;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 },\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, multipleSelectedItemStyle, 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, primaryColor, ...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, multipleSelectedItemStyle, 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.4.0",
3
+ "version": "0.8.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
@@ -6,8 +6,10 @@ import {
6
6
  ScrollView,
7
7
  StyleSheet,
8
8
  Image,
9
+ TouchableOpacity,
9
10
  } from 'react-native';
10
11
  import { colors } from './styles/colors';
12
+ import { inputStyles } from './styles/input';
11
13
  import { typography } from './styles/typography';
12
14
 
13
15
  const Dropdown = ({
@@ -16,8 +18,7 @@ const Dropdown = ({
16
18
  helperText,
17
19
  error,
18
20
  getSelectedItemsLabel,
19
- setOpen,
20
- open,
21
+ handleToggleModal,
21
22
  isMultiple,
22
23
  selectedItem,
23
24
  selectedItems,
@@ -25,6 +26,8 @@ const Dropdown = ({
25
26
  dropdownStyle,
26
27
  dropdownContainerStyle,
27
28
  selectedItemStyle,
29
+ multipleSelectedItemStyle,
30
+ primaryColor,
28
31
  }: any) => {
29
32
  return (
30
33
  <View style={[styles.dropdownInputContainer, dropdownContainerStyle]}>
@@ -32,10 +35,11 @@ const Dropdown = ({
32
35
  <Text style={[styles.label, labelStyle]}>{label}</Text>
33
36
  )}
34
37
  <Pressable
35
- onPress={() => setOpen(!open)}
38
+ onPress={() => handleToggleModal()}
36
39
  style={({ pressed }) => [
37
- pressed && styles.inputFocusState,
38
- styles.input,
40
+ pressed &&
41
+ inputStyles.inputFocusState && { borderColor: primaryColor },
42
+ inputStyles.input,
39
43
  dropdownStyle,
40
44
  ]}
41
45
  >
@@ -50,15 +54,23 @@ const Dropdown = ({
50
54
  >
51
55
  {isMultiple ? (
52
56
  getSelectedItemsLabel().map((item: any, i: Number) => (
53
- <Text
54
- key={`SelectedItems${i}`}
55
- style={[styles.selectedItems, selectedItemStyle]}
56
- >
57
- {item}
58
- </Text>
57
+ <TouchableOpacity onPress={() => handleToggleModal()}>
58
+ <Text
59
+ key={`SelectedItems${i}`}
60
+ style={[
61
+ styles.selectedItems,
62
+ { backgroundColor: primaryColor },
63
+ multipleSelectedItemStyle,
64
+ ]}
65
+ >
66
+ {item}
67
+ </Text>
68
+ </TouchableOpacity>
59
69
  ))
60
70
  ) : (
61
- <Text style={styles.blackText}>{getSelectedItemsLabel()}</Text>
71
+ <Text style={[styles.blackText, selectedItemStyle]}>
72
+ {getSelectedItemsLabel()}
73
+ </Text>
62
74
  )}
63
75
  </View>
64
76
 
@@ -84,30 +96,13 @@ const Dropdown = ({
84
96
 
85
97
  const styles = StyleSheet.create({
86
98
  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
99
  inputFocusErrorState: {
105
100
  borderWidth: 2,
106
101
  borderStyle: 'solid',
107
- borderColor: colors.cliqkiRed,
102
+ borderColor: colors.red,
108
103
  },
109
104
  iconStyle: { position: 'absolute', right: 25, top: 25 },
110
- error: { color: colors.cliqkiRed, marginTop: 8, ...typography.caption },
105
+ error: { color: colors.red, marginTop: 8, ...typography.caption },
111
106
  helper: { marginTop: 8, color: colors.primary, ...typography.caption },
112
107
  dropdownInputContainer: { marginBottom: 23, width: '100%' },
113
108
  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,39 @@
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
+ primaryColor,
11
+ ...rest
12
+ }: any) => {
13
+ const [isFocused, setFocus] = useState(false);
14
+
15
+ return (
16
+ <View style={styles.container}>
17
+ <TextInput
18
+ placeholder={placeholder}
19
+ style={[
20
+ inputStyles.input,
21
+ isFocused &&
22
+ inputStyles.inputFocusState && { borderColor: primaryColor },
23
+ style,
24
+ ]}
25
+ onFocus={() => {
26
+ setFocus(true);
27
+ }}
28
+ onBlur={() => setFocus(false)}
29
+ value={value}
30
+ onChangeText={onChangeText}
31
+ {...rest}
32
+ />
33
+ </View>
34
+ );
35
+ };
36
+
37
+ const styles = StyleSheet.create({
38
+ container: { margin: 23 },
39
+ });
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,18 @@ 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,
24
+ multipleSelectedItemStyle,
21
25
  modalBackgroundStyle,
22
26
  modalOptionsContainer,
27
+ searchInputStyle,
28
+ primaryColor,
23
29
  }: any) => {
30
+ const [newOptions, setNewOptions] = useState(options ? options : []);
24
31
  const [open, setOpen] = useState(false);
25
32
  const [selectedItem, setSelectedItem] = useState(selectedValue); //for single selection
26
33
  const [selectedItems, setSelectedItems] = useState(
@@ -30,6 +37,7 @@ export const DropdownSelect = ({
30
37
  ? []
31
38
  : [selectedValue]
32
39
  ); //for multiple selection
40
+ const [searchValue, setSearchValue] = useState('');
33
41
 
34
42
  /*===========================================
35
43
  * Selection handlers
@@ -66,7 +74,8 @@ export const DropdownSelect = ({
66
74
  let selectedItemLabel =
67
75
  options &&
68
76
  options.find(
69
- (item: string) => item[optionValue ?? 'value'] === element
77
+ (item: string) =>
78
+ item[optionValue ?? DEFAULT_OPTION_VALUE] === element
70
79
  )?.[optionLabel];
71
80
  selectedLabels.push(selectedItemLabel);
72
81
  });
@@ -76,9 +85,41 @@ export const DropdownSelect = ({
76
85
  let selectedItemLabel =
77
86
  options &&
78
87
  options.find(
79
- (item: string) => item[optionValue ?? 'value'] === selectedItem
88
+ (item: string) =>
89
+ item[optionValue ?? DEFAULT_OPTION_VALUE] === selectedItem
80
90
  );
81
- return selectedItemLabel?.[optionLabel];
91
+ return selectedItemLabel?.[optionLabel ?? DEFAULT_OPTION_LABEL];
92
+ };
93
+
94
+ /*===========================================
95
+ * Search
96
+ *==========================================*/
97
+ const onSearch = (value: string) => {
98
+ setSearchValue(value);
99
+ let searchTerm = value.toString().toLocaleLowerCase();
100
+ const searchResults = options.filter((item: any) => {
101
+ return (
102
+ item[optionLabel ?? DEFAULT_OPTION_LABEL]
103
+ .toString()
104
+ .toLowerCase()
105
+ .includes(searchTerm) ||
106
+ item[optionValue ?? DEFAULT_OPTION_VALUE]
107
+ .toString(searchTerm)
108
+ .toLowerCase()
109
+ .includes()
110
+ );
111
+ });
112
+
113
+ setNewOptions(searchResults);
114
+ };
115
+
116
+ /*===========================================
117
+ * Modal
118
+ *==========================================*/
119
+ const handleToggleModal = () => {
120
+ setOpen(!open);
121
+ setSearchValue('');
122
+ setNewOptions(options);
82
123
  };
83
124
 
84
125
  return (
@@ -91,23 +132,32 @@ export const DropdownSelect = ({
91
132
  getSelectedItemsLabel={getSelectedItemsLabel}
92
133
  selectedItem={selectedItem}
93
134
  selectedItems={selectedItems}
94
- setOpen={setOpen}
95
- open={open}
135
+ handleToggleModal={handleToggleModal}
96
136
  labelStyle={labelStyle}
97
137
  dropdownStyle={dropdownStyle}
98
138
  dropdownContainerStyle={dropdownContainerStyle}
99
139
  selectedItemStyle={selectedItemStyle}
140
+ multipleSelectedItemStyle={multipleSelectedItemStyle}
100
141
  isMultiple={isMultiple}
142
+ primaryColor={primaryColor}
101
143
  />
102
144
  <CustomModal
103
145
  open={open}
104
- setOpen={setOpen}
146
+ handleToggleModal={handleToggleModal}
105
147
  modalBackgroundStyle={modalBackgroundStyle}
106
148
  modalOptionsContainer={modalOptionsContainer}
107
149
  onRequestClose={() => {}}
108
150
  >
151
+ {isSearchable && (
152
+ <Input
153
+ value={searchValue}
154
+ onChangeText={(text: string) => onSearch(text)}
155
+ style={searchInputStyle}
156
+ primaryColor={primaryColor}
157
+ />
158
+ )}
109
159
  <DropdownList
110
- options={options}
160
+ options={newOptions}
111
161
  optionLabel={optionLabel}
112
162
  optionValue={optionValue}
113
163
  isMultiple={isMultiple}
@@ -115,6 +165,7 @@ export const DropdownSelect = ({
115
165
  selectedItem={selectedItem}
116
166
  handleMultipleSelections={handleMultipleSelections}
117
167
  handleSingleSelection={handleSingleSelection}
168
+ primaryColor={primaryColor}
118
169
  />
119
170
  </CustomModal>
120
171
  </>
@@ -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,21 @@
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
+ },
21
+ });