@shaquillehinds/react-native-dropdown-selector 0.0.4 → 0.0.6

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 (71) hide show
  1. package/README.md +3 -0
  2. package/lib/commonjs/DropDownSelector/DropDownSelector.js +8 -107
  3. package/lib/commonjs/DropDownSelector/DropDownSelector.js.map +1 -1
  4. package/lib/commonjs/DropDownSelector/components/DropDownSelector.button.js +60 -0
  5. package/lib/commonjs/DropDownSelector/components/DropDownSelector.button.js.map +1 -0
  6. package/lib/commonjs/DropDownSelector/components/DropDownSelectorList/DropDownColumn.js +49 -0
  7. package/lib/commonjs/DropDownSelector/components/DropDownSelectorList/DropDownColumn.js.map +1 -0
  8. package/lib/commonjs/DropDownSelector/components/DropDownSelectorList/DropDownRow.js +52 -0
  9. package/lib/commonjs/DropDownSelector/components/DropDownSelectorList/DropDownRow.js.map +1 -0
  10. package/lib/commonjs/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.js +57 -0
  11. package/lib/commonjs/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.js.map +1 -0
  12. package/lib/commonjs/DropDownSelector/components/DropDownSelectorList/index.js +17 -0
  13. package/lib/commonjs/DropDownSelector/components/DropDownSelectorList/index.js.map +1 -0
  14. package/lib/commonjs/DropDownSelector/svgs/ChevronUp.js.map +1 -1
  15. package/lib/module/DropDownSelector/DropDownSelector.js +9 -108
  16. package/lib/module/DropDownSelector/DropDownSelector.js.map +1 -1
  17. package/lib/module/DropDownSelector/components/DropDownSelector.button.js +56 -0
  18. package/lib/module/DropDownSelector/components/DropDownSelector.button.js.map +1 -0
  19. package/lib/module/DropDownSelector/components/DropDownSelectorList/DropDownColumn.js +45 -0
  20. package/lib/module/DropDownSelector/components/DropDownSelectorList/DropDownColumn.js.map +1 -0
  21. package/lib/module/DropDownSelector/components/DropDownSelectorList/DropDownRow.js +48 -0
  22. package/lib/module/DropDownSelector/components/DropDownSelectorList/DropDownRow.js.map +1 -0
  23. package/lib/module/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.js +53 -0
  24. package/lib/module/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.js.map +1 -0
  25. package/lib/module/DropDownSelector/components/DropDownSelectorList/index.js +4 -0
  26. package/lib/module/DropDownSelector/components/DropDownSelectorList/index.js.map +1 -0
  27. package/lib/module/DropDownSelector/svgs/ChevronUp.js.map +1 -1
  28. package/lib/typescript/commonjs/src/DropDownSelector/DropDownSelector.controller.d.ts +23 -4
  29. package/lib/typescript/commonjs/src/DropDownSelector/DropDownSelector.controller.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/src/DropDownSelector/DropDownSelector.d.ts.map +1 -1
  31. package/lib/typescript/commonjs/src/DropDownSelector/DropDownSelector.types.d.ts +8 -0
  32. package/lib/typescript/commonjs/src/DropDownSelector/DropDownSelector.types.d.ts.map +1 -1
  33. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelector.button.d.ts +7 -0
  34. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelector.button.d.ts.map +1 -0
  35. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelectorList/DropDownColumn.d.ts +7 -0
  36. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelectorList/DropDownColumn.d.ts.map +1 -0
  37. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelectorList/DropDownRow.d.ts +7 -0
  38. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelectorList/DropDownRow.d.ts.map +1 -0
  39. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.d.ts +7 -0
  40. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.d.ts.map +1 -0
  41. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelectorList/index.d.ts +2 -0
  42. package/lib/typescript/commonjs/src/DropDownSelector/components/DropDownSelectorList/index.d.ts.map +1 -0
  43. package/lib/typescript/commonjs/src/DropDownSelector/svgs/ChevronUp.d.ts +2 -4
  44. package/lib/typescript/commonjs/src/DropDownSelector/svgs/ChevronUp.d.ts.map +1 -1
  45. package/lib/typescript/module/src/DropDownSelector/DropDownSelector.controller.d.ts +23 -4
  46. package/lib/typescript/module/src/DropDownSelector/DropDownSelector.controller.d.ts.map +1 -1
  47. package/lib/typescript/module/src/DropDownSelector/DropDownSelector.d.ts.map +1 -1
  48. package/lib/typescript/module/src/DropDownSelector/DropDownSelector.types.d.ts +8 -0
  49. package/lib/typescript/module/src/DropDownSelector/DropDownSelector.types.d.ts.map +1 -1
  50. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelector.button.d.ts +7 -0
  51. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelector.button.d.ts.map +1 -0
  52. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelectorList/DropDownColumn.d.ts +7 -0
  53. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelectorList/DropDownColumn.d.ts.map +1 -0
  54. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelectorList/DropDownRow.d.ts +7 -0
  55. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelectorList/DropDownRow.d.ts.map +1 -0
  56. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.d.ts +7 -0
  57. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.d.ts.map +1 -0
  58. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelectorList/index.d.ts +2 -0
  59. package/lib/typescript/module/src/DropDownSelector/components/DropDownSelectorList/index.d.ts.map +1 -0
  60. package/lib/typescript/module/src/DropDownSelector/svgs/ChevronUp.d.ts +2 -4
  61. package/lib/typescript/module/src/DropDownSelector/svgs/ChevronUp.d.ts.map +1 -1
  62. package/package.json +3 -4
  63. package/src/DropDownSelector/DropDownSelector.controller.tsx +4 -0
  64. package/src/DropDownSelector/DropDownSelector.tsx +4 -153
  65. package/src/DropDownSelector/DropDownSelector.types.ts +8 -0
  66. package/src/DropDownSelector/components/DropDownSelector.button.tsx +72 -0
  67. package/src/DropDownSelector/components/DropDownSelectorList/DropDownColumn.tsx +65 -0
  68. package/src/DropDownSelector/components/DropDownSelectorList/DropDownRow.tsx +66 -0
  69. package/src/DropDownSelector/components/DropDownSelectorList/DropDownSelector.list.tsx +74 -0
  70. package/src/DropDownSelector/components/DropDownSelectorList/index.tsx +1 -0
  71. package/src/DropDownSelector/svgs/ChevronUp.tsx +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChevronUp.d.ts","sourceRoot":"","sources":["../../../../../../src/DropDownSelector/svgs/ChevronUp.tsx"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,2CAc3E"}
1
+ {"version":3,"file":"ChevronUp.d.ts","sourceRoot":"","sources":["../../../../../../src/DropDownSelector/svgs/ChevronUp.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEzE,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,uBAAuB,2CAcjE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shaquillehinds/react-native-dropdown-selector",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "A simple dropdown selector for react native that just works.",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -77,7 +77,6 @@
77
77
  "registry": "https://registry.npmjs.org/",
78
78
  "access": "public"
79
79
  },
80
- "dependencies": {},
81
80
  "devDependencies": {
82
81
  "@commitlint/config-conventional": "^19.6.0",
83
82
  "@react-native/eslint-config": "^0.73.1",
@@ -106,9 +105,9 @@
106
105
  "@types/react": "^18.2.44"
107
106
  },
108
107
  "peerDependencies": {
108
+ "@shaquillehinds/react-native-essentials": ">=1.8.0",
109
109
  "react": "*",
110
- "react-native": "*",
111
- "@shaquillehinds/react-native-essentials": ">=1.8.0"
110
+ "react-native": "*"
112
111
  },
113
112
  "peerDependenciesMeta": {
114
113
  "@shaquillehinds/react-native-essentials": {
@@ -190,3 +190,7 @@ export function DropDownSelectorController<T>(props: DropDownSelectorProps<T>) {
190
190
  unMountDelayInMilliSeconds,
191
191
  };
192
192
  }
193
+
194
+ export type DropDownSelectorControllerReturnType<T> = ReturnType<
195
+ typeof DropDownSelectorController<T>
196
+ >;
@@ -1,22 +1,14 @@
1
1
  import {
2
- AnimateComponent,
3
- BaseText,
4
- isAndroid,
5
2
  Layout,
6
- RNPressableLayout,
7
- shadowStyles,
8
3
  maxZIndex,
9
- TouchableLayout,
10
4
  ComponentMounter,
11
5
  ModalForegroundWrapper,
12
6
  ModalWrapper,
13
- RadioIcon,
14
7
  } from '@shaquillehinds/react-native-essentials';
15
- import { ChevronUp } from './svgs/ChevronUp';
16
- import { View } from 'react-native';
17
- import { ScrollView } from 'react-native-gesture-handler';
18
8
  import { DropDownSelectorController } from './DropDownSelector.controller';
19
9
  import type { DropDownSelectorProps } from './DropDownSelector.types';
10
+ import { DropDownSelectorButton } from './components/DropDownSelector.button';
11
+ import { DropDownSelectorList } from './components/DropDownSelectorList';
20
12
 
21
13
  export function DropDownSelector<T>(props: DropDownSelectorProps<T>) {
22
14
  const controller = DropDownSelectorController(props);
@@ -36,153 +28,12 @@ export function DropDownSelector<T>(props: DropDownSelectorProps<T>) {
36
28
  component={
37
29
  <ModalWrapper enableBackgroundContentPress>
38
30
  <ModalForegroundWrapper>
39
- <View
40
- style={
41
- !props.disableShadow
42
- ? { ...shadowStyles({ shadowOpacity: 0.15 }) }
43
- : undefined
44
- }
45
- >
46
- {!props.disableShadow && isAndroid && (
47
- <AnimateComponent
48
- ref={controller.animateAndroidShadowRef}
49
- initialPosition={0}
50
- style={controller.androidShadowAnimatedStyle}
51
- autoStart
52
- toPosition={controller.androidShadowAnimationConfig}
53
- />
54
- )}
55
-
56
- <ScrollView
57
- ref={controller.scrollViewRef}
58
- nestedScrollEnabled
59
- showsVerticalScrollIndicator={false}
60
- overScrollMode="never"
61
- {...props.dropdownScrollViewProps}
62
- style={[
63
- controller.scrollViewStyle,
64
- props.dropdownScrollViewProps?.style,
65
- ]}
66
- >
67
- <AnimateComponent
68
- ref={controller.animateComponentRef}
69
- style={controller.selectionItemsListAnimatedStyle}
70
- initialPosition={
71
- controller.canRenderDown
72
- ? -controller.relativeY(110)
73
- : controller.relativeY(110)
74
- }
75
- autoStart
76
- toPosition={
77
- props.expandAnimationConfig
78
- ? { ...props.expandAnimationConfig, toValue: 0 }
79
- : controller.selectionItemsListAnimationConfig
80
- }
81
- >
82
- <Layout
83
- borderRadius="soft"
84
- backgroundColor={'#FAFAFA'}
85
- padding={
86
- controller.canRenderDown ? [5, 0, 0, 0] : [0, 0, 5, 0]
87
- }
88
- {...props.dropdownContentContainerProps}
89
- onLayout={controller.handleSelectionItemsListLayout}
90
- >
91
- {props.items.map((item) =>
92
- props.DropdownItemComponent ? (
93
- <props.DropdownItemComponent
94
- key={item.label}
95
- item={item}
96
- isSelected={item.value === props.selectedItem}
97
- />
98
- ) : (
99
- <TouchableLayout
100
- key={item.label}
101
- flexDirection="row"
102
- center
103
- spaceBetween
104
- padding={[1, 5]}
105
- {...props.dropdownItemProps}
106
- onPress={() => {
107
- props.onSelect(item.value);
108
- controller.setShowItems(false);
109
- props.onDropdownItemPress?.(item);
110
- }}
111
- >
112
- <Layout width={'85%'}>
113
- <BaseText
114
- numberOfLines={1}
115
- {...props.dropdownItemTextProps}
116
- >
117
- {item.label}
118
- </BaseText>
119
- </Layout>
120
- {item.value === props.selectedItem ? (
121
- props.DropdownItemSelectedIcon ? (
122
- <props.DropdownItemSelectedIcon item={item} />
123
- ) : (
124
- <RadioIcon isSelected={true} />
125
- )
126
- ) : null}
127
- </TouchableLayout>
128
- )
129
- )}
130
- </Layout>
131
- </AnimateComponent>
132
- </ScrollView>
133
- </View>
31
+ <DropDownSelectorList props={props} controller={controller} />
134
32
  </ModalForegroundWrapper>
135
33
  </ModalWrapper>
136
34
  }
137
35
  />
138
- <RNPressableLayout
139
- disabled={props.isDisabled}
140
- activeOpacity={1}
141
- flexDirection="row"
142
- backgroundColor={'white'}
143
- borderRadius="medium"
144
- padding={[1, 5]}
145
- spaceBetween
146
- center
147
- {...props.dropdownButtonProps}
148
- style={[
149
- {
150
- zIndex: maxZIndex + 3,
151
- ...shadowStyles({ shadowOpacity: 0.1 }),
152
- },
153
- props.dropdownButtonProps?.style,
154
- ]}
155
- onPress={(e) => {
156
- controller.pageYRef.current = e.nativeEvent.pageY;
157
- controller.setShowItems((prev) => !prev);
158
- props.dropdownButtonProps?.onPress?.(e);
159
- }}
160
- >
161
- <BaseText
162
- numberOfLines={1}
163
- {...props.dropdownButtonTextProps}
164
- style={{ maxWidth: '90%' }}
165
- >
166
- {controller.label || props.placeholder || 'Select an item'}
167
- </BaseText>
168
- {props.DropdownButtonIcon ? (
169
- <props.DropdownButtonIcon
170
- isOpen={controller.showItems}
171
- expandDirection={
172
- props.expandDirection || controller.canRenderDown ? 'down' : 'up'
173
- }
174
- />
175
- ) : controller.canRenderDown === null ? undefined : (
176
- <AnimateComponent
177
- ref={controller.animateChevronRef}
178
- style={controller.chevronAnimatedStyle}
179
- initialPosition={controller.canRenderDown ? -1 : 1}
180
- toPosition={controller.chevronAnimationConfig}
181
- >
182
- <ChevronUp color={'black'} />
183
- </AnimateComponent>
184
- )}
185
- </RNPressableLayout>
36
+ <DropDownSelectorButton props={props} controller={controller} />
186
37
  </Layout>
187
38
  );
188
39
  }
@@ -12,6 +12,10 @@ export type DropDownItem<T> = {
12
12
  label: string;
13
13
  value: DropDownItemValue<T>;
14
14
  };
15
+ export type DropdownButtonIconProps = {
16
+ size?: number;
17
+ color?: string;
18
+ };
15
19
  export type DropDownSelectorProps<T> = {
16
20
  items: DropDownItem<T>[];
17
21
  selectedItem: T;
@@ -22,6 +26,7 @@ export type DropDownSelectorProps<T> = {
22
26
  unMountDelayInMilliSeconds?: number;
23
27
  isDisabled?: boolean;
24
28
  disableShadow?: boolean;
29
+ dropDownItemsLayout?: 'column' | 'row';
25
30
  expandDirection?: 'up' | 'down';
26
31
  expandDistance?: number;
27
32
  expandAnimationConfig?:
@@ -30,6 +35,8 @@ export type DropDownSelectorProps<T> = {
30
35
  containerProps?: LayoutProps;
31
36
  dropdownButtonProps?: RNPressableLayoutProps;
32
37
  dropdownButtonTextProps?: BaseTextProps;
38
+ dropdownButtonIconContainerProps?: LayoutProps;
39
+ dropdownButtonIconProps?: DropdownButtonIconProps;
33
40
  //prettier-ignore
34
41
  DropdownButtonIcon?: (props: { isOpen: boolean, expandDirection: 'up' | 'down' }) => React.JSX.Element;
35
42
  dropdownScrollViewProps?: ScrollViewProps;
@@ -41,4 +48,5 @@ export type DropDownSelectorProps<T> = {
41
48
  dropdownItemTextProps?: BaseTextProps;
42
49
  //prettier-ignore
43
50
  DropdownItemSelectedIcon?: (props: {item: DropDownItem<T>}) => React.JSX.Element;
51
+ DropdownSelectedItemIconColor?: string;
44
52
  };
@@ -0,0 +1,72 @@
1
+ import {
2
+ AnimateComponent,
3
+ BaseText,
4
+ Layout,
5
+ RNPressableLayout,
6
+ shadowStyles,
7
+ maxZIndex,
8
+ } from '@shaquillehinds/react-native-essentials';
9
+ import type { DropDownSelectorProps } from '../DropDownSelector.types';
10
+ import type { DropDownSelectorControllerReturnType } from '../DropDownSelector.controller';
11
+ import { ChevronUp } from '../svgs/ChevronUp';
12
+
13
+ export function DropDownSelectorButton<T>({
14
+ props,
15
+ controller,
16
+ }: {
17
+ props: DropDownSelectorProps<T>;
18
+ controller: DropDownSelectorControllerReturnType<T>;
19
+ }) {
20
+ return (
21
+ <RNPressableLayout
22
+ disabled={props.isDisabled}
23
+ activeOpacity={1}
24
+ flexDirection="row"
25
+ backgroundColor={'white'}
26
+ borderRadius="medium"
27
+ padding={[1, 5]}
28
+ spaceBetween
29
+ center
30
+ {...props.dropdownButtonProps}
31
+ style={[
32
+ {
33
+ zIndex: maxZIndex + 3,
34
+ ...shadowStyles({ shadowOpacity: 0.1 }),
35
+ },
36
+ props.dropdownButtonProps?.style,
37
+ ]}
38
+ onPress={(e) => {
39
+ controller.pageYRef.current = e.nativeEvent.pageY;
40
+ controller.setShowItems((prev) => !prev);
41
+ props.dropdownButtonProps?.onPress?.(e);
42
+ }}
43
+ >
44
+ <BaseText
45
+ numberOfLines={1}
46
+ {...props.dropdownButtonTextProps}
47
+ style={[{ maxWidth: '90%' }, props.dropdownButtonTextProps?.style]}
48
+ >
49
+ {controller.label || props.placeholder || 'Select an item'}
50
+ </BaseText>
51
+ {props.DropdownButtonIcon ? (
52
+ <props.DropdownButtonIcon
53
+ isOpen={controller.showItems}
54
+ expandDirection={
55
+ props.expandDirection || controller.canRenderDown ? 'down' : 'up'
56
+ }
57
+ />
58
+ ) : controller.canRenderDown === null ? undefined : (
59
+ <Layout {...props.dropdownButtonIconContainerProps}>
60
+ <AnimateComponent
61
+ ref={controller.animateChevronRef}
62
+ style={controller.chevronAnimatedStyle}
63
+ initialPosition={controller.canRenderDown ? -1 : 1}
64
+ toPosition={controller.chevronAnimationConfig}
65
+ >
66
+ <ChevronUp color={'black'} {...props.dropdownButtonIconProps} />
67
+ </AnimateComponent>
68
+ </Layout>
69
+ )}
70
+ </RNPressableLayout>
71
+ );
72
+ }
@@ -0,0 +1,65 @@
1
+ import {
2
+ BaseText,
3
+ Layout,
4
+ TouchableLayout,
5
+ RadioIcon,
6
+ } from '@shaquillehinds/react-native-essentials';
7
+ import type { DropDownSelectorControllerReturnType } from '../../DropDownSelector.controller';
8
+ import type { DropDownSelectorProps } from '../../DropDownSelector.types';
9
+ export function DropDownColumn<T>({
10
+ controller,
11
+ props,
12
+ }: {
13
+ controller: DropDownSelectorControllerReturnType<T>;
14
+ props: DropDownSelectorProps<T>;
15
+ }) {
16
+ return (
17
+ <Layout
18
+ borderRadius="soft"
19
+ backgroundColor={'#FAFAFA'}
20
+ padding={controller.canRenderDown ? [5, 0, 0, 0] : [0, 0, 5, 0]}
21
+ {...props.dropdownContentContainerProps}
22
+ onLayout={controller.handleSelectionItemsListLayout}
23
+ >
24
+ {props.items.map((item) =>
25
+ props.DropdownItemComponent ? (
26
+ <props.DropdownItemComponent
27
+ key={item.label}
28
+ item={item}
29
+ isSelected={item.value === props.selectedItem}
30
+ />
31
+ ) : (
32
+ <TouchableLayout
33
+ key={item.label}
34
+ flexDirection="row"
35
+ center
36
+ spaceBetween
37
+ padding={[1, 5]}
38
+ {...props.dropdownItemProps}
39
+ onPress={() => {
40
+ props.onSelect(item.value);
41
+ controller.setShowItems(false);
42
+ props.onDropdownItemPress?.(item);
43
+ }}
44
+ >
45
+ <Layout width={'85%'}>
46
+ <BaseText numberOfLines={1} {...props.dropdownItemTextProps}>
47
+ {item.label}
48
+ </BaseText>
49
+ </Layout>
50
+ {item.value === props.selectedItem ? (
51
+ props.DropdownItemSelectedIcon ? (
52
+ <props.DropdownItemSelectedIcon item={item} />
53
+ ) : (
54
+ <RadioIcon
55
+ isSelected={true}
56
+ selectedColor={props.DropdownSelectedItemIconColor}
57
+ />
58
+ )
59
+ ) : null}
60
+ </TouchableLayout>
61
+ )
62
+ )}
63
+ </Layout>
64
+ );
65
+ }
@@ -0,0 +1,66 @@
1
+ import {
2
+ BaseText,
3
+ Layout,
4
+ TouchableLayout,
5
+ } from '@shaquillehinds/react-native-essentials';
6
+ import type { DropDownSelectorControllerReturnType } from '../../DropDownSelector.controller';
7
+ import type { DropDownSelectorProps } from '../../DropDownSelector.types';
8
+ export function DropDownRow<T>({
9
+ controller,
10
+ props,
11
+ }: {
12
+ controller: DropDownSelectorControllerReturnType<T>;
13
+ props: DropDownSelectorProps<T>;
14
+ }) {
15
+ return (
16
+ <Layout
17
+ borderRadius="soft"
18
+ backgroundColor={'#FAFAFA'}
19
+ padding={controller.canRenderDown ? [5, 0, 0, 0] : [0, 0, 5, 0]}
20
+ showsHorizontalScrollIndicator={false}
21
+ {...props.dropdownContentContainerProps}
22
+ flexDirection="row"
23
+ scrollable
24
+ horizontal
25
+ onLayout={controller.handleSelectionItemsListLayout}
26
+ >
27
+ {props.items.map((item) =>
28
+ props.DropdownItemComponent ? (
29
+ <props.DropdownItemComponent
30
+ key={item.label}
31
+ item={item}
32
+ isSelected={item.value === props.selectedItem}
33
+ />
34
+ ) : (
35
+ <TouchableLayout
36
+ key={item.label}
37
+ height={4}
38
+ padding={[0, 3]}
39
+ spaceEnd
40
+ center
41
+ {...props.dropdownItemProps}
42
+ style={[props.dropdownItemProps?.style]}
43
+ onPress={() => {
44
+ props.onSelect(item.value);
45
+ controller.setShowItems(false);
46
+ props.onDropdownItemPress?.(item);
47
+ }}
48
+ >
49
+ <BaseText numberOfLines={1} {...props.dropdownItemTextProps}>
50
+ {item.label}
51
+ </BaseText>
52
+ {item.value === props.selectedItem ? (
53
+ <Layout
54
+ absolute
55
+ top={0}
56
+ square={1}
57
+ backgroundColor={props.DropdownSelectedItemIconColor || '#888'}
58
+ borderRadius="full"
59
+ />
60
+ ) : null}
61
+ </TouchableLayout>
62
+ )
63
+ )}
64
+ </Layout>
65
+ );
66
+ }
@@ -0,0 +1,74 @@
1
+ import {
2
+ AnimateComponent,
3
+ isAndroid,
4
+ shadowStyles,
5
+ } from '@shaquillehinds/react-native-essentials';
6
+ import { View } from 'react-native';
7
+ import { ScrollView } from 'react-native-gesture-handler';
8
+ import type { DropDownSelectorControllerReturnType } from '../../DropDownSelector.controller';
9
+ import type { DropDownSelectorProps } from '../../DropDownSelector.types';
10
+ import { DropDownColumn } from './DropDownColumn';
11
+ import { DropDownRow } from './DropDownRow';
12
+
13
+ export function DropDownSelectorList<T>({
14
+ props,
15
+ controller,
16
+ }: {
17
+ props: DropDownSelectorProps<T>;
18
+ controller: DropDownSelectorControllerReturnType<T>;
19
+ }) {
20
+ return (
21
+ <View
22
+ style={
23
+ !props.disableShadow
24
+ ? { ...shadowStyles({ shadowOpacity: 0.15 }) }
25
+ : undefined
26
+ }
27
+ >
28
+ {!props.disableShadow && isAndroid && (
29
+ <AnimateComponent
30
+ ref={controller.animateAndroidShadowRef}
31
+ initialPosition={0}
32
+ style={controller.androidShadowAnimatedStyle}
33
+ autoStart
34
+ toPosition={controller.androidShadowAnimationConfig}
35
+ />
36
+ )}
37
+
38
+ <ScrollView
39
+ ref={controller.scrollViewRef}
40
+ scrollEnabled={props.dropDownItemsLayout === 'row'}
41
+ nestedScrollEnabled
42
+ showsVerticalScrollIndicator={false}
43
+ overScrollMode="never"
44
+ {...props.dropdownScrollViewProps}
45
+ style={[
46
+ controller.scrollViewStyle,
47
+ props.dropdownScrollViewProps?.style,
48
+ ]}
49
+ >
50
+ <AnimateComponent
51
+ ref={controller.animateComponentRef}
52
+ style={controller.selectionItemsListAnimatedStyle}
53
+ initialPosition={
54
+ controller.canRenderDown
55
+ ? -controller.relativeY(110)
56
+ : controller.relativeY(110)
57
+ }
58
+ autoStart
59
+ toPosition={
60
+ props.expandAnimationConfig
61
+ ? { ...props.expandAnimationConfig, toValue: 0 }
62
+ : controller.selectionItemsListAnimationConfig
63
+ }
64
+ >
65
+ {props.dropDownItemsLayout === 'row' ? (
66
+ <DropDownRow controller={controller} props={props} />
67
+ ) : (
68
+ <DropDownColumn controller={controller} props={props} />
69
+ )}
70
+ </AnimateComponent>
71
+ </ScrollView>
72
+ </View>
73
+ );
74
+ }
@@ -0,0 +1 @@
1
+ export * from './DropDownSelector.list';
@@ -1,7 +1,8 @@
1
1
  import { normalize } from '@shaquillehinds/react-native-essentials';
2
2
  import Svg, { Path } from 'react-native-svg';
3
+ import type { DropdownButtonIconProps } from '../DropDownSelector.types';
3
4
 
4
- export function ChevronUp({ size, color }: { size?: number; color?: string }) {
5
+ export function ChevronUp({ size, color }: DropdownButtonIconProps) {
5
6
  return (
6
7
  <Svg
7
8
  width={normalize(size || 24)}