@codeleap/mobile 1.4.0 → 1.4.1

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 (191) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +3 -3
  3. package/.vscode/settings.json +10 -10
  4. package/CodeLeap-Mobile-Packages.code-workspace +7 -7
  5. package/dist/components/ActivityIndicator.d.ts +13 -13
  6. package/dist/components/ActivityIndicator.js +50 -51
  7. package/dist/components/ActivityIndicator.js.map +1 -1
  8. package/dist/components/Animated.d.ts +15 -15
  9. package/dist/components/Animated.js +54 -54
  10. package/dist/components/Animated.js.map +0 -0
  11. package/dist/components/Button.d.ts +119 -119
  12. package/dist/components/Button.js +77 -77
  13. package/dist/components/Button.js.map +1 -1
  14. package/dist/components/Checkbox/index.d.ts +14 -14
  15. package/dist/components/Checkbox/index.js +73 -73
  16. package/dist/components/Checkbox/index.js.map +1 -1
  17. package/dist/components/Checkbox/styles.d.ts +52 -52
  18. package/dist/components/Checkbox/styles.js +48 -48
  19. package/dist/components/Checkbox/styles.js.map +0 -0
  20. package/dist/components/ContentView.d.ts +10 -10
  21. package/dist/components/ContentView.js +50 -50
  22. package/dist/components/ContentView.js.map +0 -0
  23. package/dist/components/FileInput.d.ts +26 -26
  24. package/dist/components/FileInput.js +174 -174
  25. package/dist/components/FileInput.js.map +1 -1
  26. package/dist/components/Icon.d.ts +12 -11
  27. package/dist/components/Icon.js +66 -60
  28. package/dist/components/Icon.js.map +1 -1
  29. package/dist/components/Image.d.ts +18 -17
  30. package/dist/components/Image.js +53 -47
  31. package/dist/components/Image.js.map +1 -1
  32. package/dist/components/List.d.ts +11 -11
  33. package/dist/components/List.js +76 -76
  34. package/dist/components/List.js.map +0 -0
  35. package/dist/components/Modal/index.d.ts +25 -25
  36. package/dist/components/Modal/index.js +108 -108
  37. package/dist/components/Modal/index.js.map +0 -0
  38. package/dist/components/Modal/styles.d.ts +66 -66
  39. package/dist/components/Modal/styles.js +64 -56
  40. package/dist/components/Modal/styles.js.map +1 -1
  41. package/dist/components/Navigation/Navigation.d.ts +3 -3
  42. package/dist/components/Navigation/Navigation.js +83 -75
  43. package/dist/components/Navigation/Navigation.js.map +1 -1
  44. package/dist/components/Navigation/constants.d.ts +5 -5
  45. package/dist/components/Navigation/constants.js +10 -10
  46. package/dist/components/Navigation/constants.js.map +0 -0
  47. package/dist/components/Navigation/index.d.ts +3 -3
  48. package/dist/components/Navigation/index.js +15 -15
  49. package/dist/components/Navigation/index.js.map +0 -0
  50. package/dist/components/Navigation/types.d.ts +26 -26
  51. package/dist/components/Navigation/types.js +7 -7
  52. package/dist/components/Navigation/types.js.map +1 -1
  53. package/dist/components/Navigation/utils.d.ts +3 -3
  54. package/dist/components/Navigation/utils.js +69 -66
  55. package/dist/components/Navigation/utils.js.map +1 -1
  56. package/dist/components/Overlay.d.ts +16 -16
  57. package/dist/components/Overlay.js +65 -65
  58. package/dist/components/Overlay.js.map +1 -1
  59. package/dist/components/Pager/index.d.ts +19 -19
  60. package/dist/components/Pager/index.js +163 -163
  61. package/dist/components/Pager/index.js.map +1 -1
  62. package/dist/components/Pager/styles.d.ts +51 -51
  63. package/dist/components/Pager/styles.js +43 -43
  64. package/dist/components/Pager/styles.js.map +0 -0
  65. package/dist/components/RadioInput/index.d.ts +26 -26
  66. package/dist/components/RadioInput/index.js +68 -68
  67. package/dist/components/RadioInput/index.js.map +1 -1
  68. package/dist/components/RadioInput/styles.d.ts +54 -54
  69. package/dist/components/RadioInput/styles.js +44 -44
  70. package/dist/components/RadioInput/styles.js.map +0 -0
  71. package/dist/components/Scroll.d.ts +11 -11
  72. package/dist/components/Scroll.js +75 -75
  73. package/dist/components/Scroll.js.map +0 -0
  74. package/dist/components/Sections.d.ts +11 -11
  75. package/dist/components/Sections.js +76 -76
  76. package/dist/components/Sections.js.map +0 -0
  77. package/dist/components/Select/index.d.ts +5 -5
  78. package/dist/components/Select/index.js +144 -143
  79. package/dist/components/Select/index.js.map +1 -1
  80. package/dist/components/Select/styles.d.ts +9 -9
  81. package/dist/components/Select/styles.js +56 -56
  82. package/dist/components/Select/styles.js.map +0 -0
  83. package/dist/components/Select/types.d.ts +33 -33
  84. package/dist/components/Select/types.js +2 -2
  85. package/dist/components/Select/types.js.map +0 -0
  86. package/dist/components/Slider/Mark.d.ts +3 -3
  87. package/dist/components/Slider/Mark.js +31 -31
  88. package/dist/components/Slider/Mark.js.map +0 -0
  89. package/dist/components/Slider/Thumb.d.ts +7 -7
  90. package/dist/components/Slider/Thumb.js +29 -29
  91. package/dist/components/Slider/Thumb.js.map +0 -0
  92. package/dist/components/Slider/index.d.ts +3 -3
  93. package/dist/components/Slider/index.js +93 -93
  94. package/dist/components/Slider/index.js.map +0 -0
  95. package/dist/components/Slider/types.d.ts +25 -25
  96. package/dist/components/Slider/types.js +2 -2
  97. package/dist/components/Slider/types.js.map +0 -0
  98. package/dist/components/Switch.d.ts +13 -13
  99. package/dist/components/Switch.js +71 -71
  100. package/dist/components/Switch.js.map +1 -1
  101. package/dist/components/Text.d.ts +12 -12
  102. package/dist/components/Text.js +48 -48
  103. package/dist/components/Text.js.map +0 -0
  104. package/dist/components/TextInput.d.ts +162 -160
  105. package/dist/components/TextInput.js +149 -149
  106. package/dist/components/TextInput.js.map +1 -1
  107. package/dist/components/Touchable.d.ts +14 -14
  108. package/dist/components/Touchable.js +57 -57
  109. package/dist/components/Touchable.js.map +1 -1
  110. package/dist/components/View.d.ts +114 -114
  111. package/dist/components/View.js +50 -50
  112. package/dist/components/View.js.map +0 -0
  113. package/dist/components/components.d.ts +24 -24
  114. package/dist/components/components.js +36 -36
  115. package/dist/components/components.js.map +0 -0
  116. package/dist/index.d.ts +5 -5
  117. package/dist/index.js +24 -24
  118. package/dist/index.js.map +0 -0
  119. package/dist/modules/documentPicker.d.ts +3 -3
  120. package/dist/modules/documentPicker.js +11 -11
  121. package/dist/modules/documentPicker.js.map +1 -1
  122. package/dist/modules/fastImage.d.ts +1 -1
  123. package/dist/modules/fastImage.js +9 -9
  124. package/dist/modules/fastImage.js.map +0 -0
  125. package/dist/modules/reactNavigation.d.ts +3 -3
  126. package/dist/modules/reactNavigation.js +10 -10
  127. package/dist/modules/reactNavigation.js.map +0 -0
  128. package/dist/modules/types/fileTypes.d.ts +138 -138
  129. package/dist/modules/types/fileTypes.js +2 -2
  130. package/dist/modules/types/fileTypes.js.map +0 -0
  131. package/dist/types/utility.d.ts +2 -2
  132. package/dist/types/utility.js +2 -2
  133. package/dist/types/utility.js.map +0 -0
  134. package/dist/utils/OSAlert.d.ts +31 -31
  135. package/dist/utils/OSAlert.js +141 -88
  136. package/dist/utils/OSAlert.js.map +1 -1
  137. package/dist/utils/misc.d.ts +2 -2
  138. package/dist/utils/misc.js +25 -25
  139. package/dist/utils/misc.js.map +0 -0
  140. package/dist/utils/styles.d.ts +1 -1
  141. package/dist/utils/styles.js +12 -12
  142. package/dist/utils/styles.js.map +0 -0
  143. package/package.json +40 -38
  144. package/src/components/ActivityIndicator.tsx +46 -47
  145. package/src/components/Animated.tsx +34 -34
  146. package/src/components/Button.tsx +95 -95
  147. package/src/components/Checkbox/index.tsx +81 -80
  148. package/src/components/Checkbox/styles.ts +72 -72
  149. package/src/components/ContentView.tsx +58 -58
  150. package/src/components/FileInput.tsx +179 -178
  151. package/src/components/Icon.tsx +58 -48
  152. package/src/components/Image.tsx +59 -49
  153. package/src/components/List.tsx +100 -100
  154. package/src/components/Modal/index.tsx +158 -158
  155. package/src/components/Modal/styles.ts +133 -118
  156. package/src/components/Navigation/Navigation.tsx +58 -51
  157. package/src/components/Navigation/constants.ts +8 -8
  158. package/src/components/Navigation/index.tsx +3 -3
  159. package/src/components/Navigation/types.ts +35 -37
  160. package/src/components/Navigation/utils.tsx +59 -54
  161. package/src/components/Overlay.tsx +77 -76
  162. package/src/components/Pager/index.tsx +240 -241
  163. package/src/components/Pager/styles.ts +51 -51
  164. package/src/components/RadioInput/index.tsx +101 -100
  165. package/src/components/RadioInput/styles.ts +67 -67
  166. package/src/components/Scroll.tsx +98 -98
  167. package/src/components/Sections.tsx +100 -0
  168. package/src/components/Select/index.tsx +184 -181
  169. package/src/components/Select/styles.ts +81 -81
  170. package/src/components/Select/types.ts +41 -41
  171. package/src/components/Slider/Mark.tsx +46 -46
  172. package/src/components/Slider/Thumb.tsx +29 -29
  173. package/src/components/Slider/index.tsx +123 -123
  174. package/src/components/Slider/types.ts +25 -25
  175. package/src/components/Switch.tsx +81 -82
  176. package/src/components/Text.tsx +30 -30
  177. package/src/components/TextInput.tsx +204 -203
  178. package/src/components/Touchable.tsx +65 -64
  179. package/src/components/View.tsx +46 -46
  180. package/src/components/components.ts +26 -26
  181. package/src/index.ts +6 -6
  182. package/src/modules/documentPicker.ts +7 -8
  183. package/src/modules/fastImage.ts +2 -2
  184. package/src/modules/index.d.ts +496 -496
  185. package/src/modules/reactNavigation.ts +4 -4
  186. package/src/modules/types/documentPicker.d.ts +215 -215
  187. package/src/modules/types/fileTypes.ts +122 -122
  188. package/src/types/utility.ts +3 -3
  189. package/src/utils/OSAlert.ts +180 -124
  190. package/src/utils/misc.ts +24 -24
  191. package/src/utils/styles.ts +14 -14
@@ -0,0 +1,100 @@
1
+ import * as React from 'react'
2
+ import { forwardRef, useState } from 'react'
3
+ import {
4
+ deepEqual,
5
+ onUpdate,
6
+ useDefaultComponentStyle,
7
+ usePrevious,
8
+ useCodeleapContext,
9
+ } from '@codeleap/common'
10
+ import {
11
+ KeyboardAwareSectionListProps,
12
+ KeyboardAwareSectionList as KBDView,
13
+ } from 'react-native-keyboard-aware-scroll-view'
14
+ import { RefreshControl, SectionList } from 'react-native'
15
+ import { View, ViewProps } from './View'
16
+
17
+ export type SectionListProps = KeyboardAwareSectionListProps<any> &
18
+ ViewProps & {
19
+ onRefresh?: () => void
20
+ refreshTimeout?: number
21
+ changeData?: any
22
+ separators?: boolean
23
+ }
24
+
25
+ const KeyboardAwareSectionList =
26
+ KBDView as unknown as React.ForwardRefExoticComponent<
27
+ ViewProps & {
28
+ refreshControl?: JSX.Element
29
+ ref?: SectionList
30
+ }
31
+ >
32
+
33
+ export const Sections = forwardRef<SectionList, SectionListProps>(
34
+ (flatListProps, ref) => {
35
+ const {
36
+ variants = [],
37
+ style,
38
+ refreshTimeout = 3000,
39
+ changeData,
40
+ ...props
41
+ } = flatListProps
42
+ const hasRefresh = !!props.onRefresh
43
+ const [refreshing, setRefreshing] = useState(false)
44
+
45
+ const timer = React.useRef(null)
46
+ const previousData = usePrevious(changeData)
47
+
48
+ const onRefresh = () => {
49
+ if (timer.current) {
50
+ clearTimeout(timer.current)
51
+ }
52
+
53
+ setRefreshing(true)
54
+
55
+ props.onRefresh()
56
+
57
+ timer.current = setTimeout(() => {
58
+ setRefreshing(false)
59
+ }, refreshTimeout)
60
+ }
61
+ onUpdate(() => {
62
+ if (refreshing && !deepEqual(previousData, changeData)) {
63
+ setRefreshing(false)
64
+ if (timer.current) {
65
+ clearTimeout(timer.current)
66
+ }
67
+ }
68
+ }, [refreshing, changeData])
69
+ const { Theme } = useCodeleapContext()
70
+
71
+ const variantStyles = useDefaultComponentStyle('View', {
72
+ variants,
73
+ })
74
+
75
+ const renderSeparator = () => {
76
+ return (
77
+ <View variants={['separator']}></View>
78
+ )
79
+ }
80
+
81
+ const separatorProp = props.separators
82
+ const isEmpty = !props.data || !props.data.length
83
+ const separator = !isEmpty && separatorProp == true && renderSeparator
84
+
85
+ return (
86
+ <KeyboardAwareSectionList
87
+ style={[Theme.presets.full, style]}
88
+ contentContainerStyle={[variantStyles.wrapper]}
89
+ ref={ref as unknown as SectionList}
90
+ ItemSeparatorComponent={separator}
91
+ {...props}
92
+ refreshControl={
93
+ hasRefresh && (
94
+ <RefreshControl refreshing={refreshing} onRefresh={onRefresh} />
95
+ )
96
+ }
97
+ />
98
+ )
99
+ },
100
+ )
@@ -1,181 +1,184 @@
1
- import { IconPlaceholder, useBooleanToggle, getNestedStylesByKey, useDefaultComponentStyle, TypeGuards } from '@codeleap/common'
2
- import React, { useMemo } from 'react'
3
- import { Modal, StyleSheet } from 'react-native'
4
- import { Button } from '../Button'
5
- import { Scroll } from '../Scroll'
6
-
7
- import { InputLabel, TextInput } from '../TextInput'
8
- import { Touchable } from '../Touchable'
9
- import { AnimatedView, View } from '../View'
10
- import { MobileSelectStyles } from './styles'
11
- import { CustomSelectProps } from './types'
12
-
13
- export const Select = <T extends string|number = string>(selectProps:CustomSelectProps<T>) => {
14
- const {
15
- value,
16
- onValueChange,
17
- label,
18
- styles = {},
19
- options,
20
- style,
21
- variants,
22
- renderItem,
23
- closeOnSelect = true,
24
- scroll = false,
25
- showClose = true,
26
- showLabelOnModal = true,
27
- placeholder = 'Select',
28
- arrowIconName = 'selectArrow',
29
- footer,
30
- modalCloseIconName = 'close',
31
- header,
32
- closeButtonProps,
33
- modalLabel,
34
- ...props
35
- } = selectProps
36
-
37
- const [isModalVisible, setModalVisibility] = useBooleanToggle(false)
38
-
39
- const variantStyles = useDefaultComponentStyle<'u:MobileSelect', typeof MobileSelectStyles>('u:MobileSelect', {
40
- transform: StyleSheet.flatten,
41
- rootElement: 'inputWrapper',
42
- styles,
43
- variants,
44
- })
45
-
46
- const inputStyles = useMemo(
47
- () => getNestedStylesByKey('input', variantStyles),
48
- [variantStyles],
49
- )
50
-
51
- const closeButtonStyles = useMemo(
52
- () => getNestedStylesByKey('modalCloseButton', variantStyles),
53
- [variantStyles],
54
- )
55
-
56
- const ListComponent = scroll ? Scroll : View
57
-
58
- const close = () => setModalVisibility()
59
- const select = (value) => {
60
-
61
- onValueChange(value)
62
- if (closeOnSelect){
63
- close()
64
- }
65
- }
66
-
67
- const selectedLabel:string = useMemo(() => {
68
- const current = options.find(o => o.value === value)
69
-
70
- const display = current?.label ?? placeholder
71
-
72
- return TypeGuards.isString(display) ? display : ''
73
- }, [value, placeholder, options])
74
-
75
- return <>
76
- <TextInput
77
-
78
- caretHidden
79
- value={selectedLabel}
80
- rightIcon={{
81
- name: arrowIconName as IconPlaceholder,
82
- }}
83
- editable={false}
84
- touchableWrapper
85
- innerWrapperProps={{
86
- onPress: close,
87
- }}
88
- label={label}
89
- styles={inputStyles}
90
- style={style}
91
- {...props}
92
- />
93
- <AnimatedView pointerEvents={'none'} transition='opacity' style={[
94
- {
95
- position: 'absolute',
96
- top: 0,
97
- right: 0,
98
- left: 0,
99
- bottom: 0,
100
- },
101
- variantStyles.backdrop,
102
- isModalVisible ? variantStyles['backdrop:visible'] : variantStyles['backdrop:hidden'],
103
- ]} />
104
-
105
- <Modal
106
- animationType='slide'
107
- transparent={true}
108
- visible={isModalVisible}
109
- onRequestClose={() => {
110
- setModalVisibility()
111
- }}
112
- pointerEvents={isModalVisible ? 'auto': 'none'}
113
- >
114
- <Touchable
115
- onPress={close}
116
- style={{
117
- position: 'absolute',
118
- top: 0,
119
- right: 0,
120
- left: 0,
121
- bottom: 0,
122
- }}
123
- />
124
- <View style={variantStyles.modalWrapper}>
125
-
126
- <View style={variantStyles.modalBox}>
127
- {
128
- (showClose || showLabelOnModal || header) && (
129
- <View style={variantStyles.modalHeader}>
130
- {
131
- header ? header : <>
132
- {showLabelOnModal && <InputLabel label={modalLabel || label} style={variantStyles.modalLabelText}/>}
133
- {showClose && <Button
134
- icon={modalCloseIconName as IconPlaceholder}
135
- onPress={close}
136
- styles={closeButtonStyles}
137
- {...closeButtonProps}
138
- />}
139
- </>
140
- }
141
- </View>
142
- )
143
- }
144
- <ListComponent style={variantStyles.modalList}>
145
- {
146
- options.map((item, idx) => {
147
- const isSelected = value === item.value
148
- if (renderItem) {
149
- return renderItem({
150
- ...item,
151
- selected: isSelected,
152
- onPress: close,
153
- styles: variantStyles,
154
-
155
- })
156
- }
157
-
158
- return <Touchable key={idx} style={[
159
- variantStyles.modalItem,
160
- isSelected && variantStyles['modalItem:selected'],
161
- ]} onPress={() => select(item.value)}>
162
- <InputLabel label={item.label} style={[variantStyles.modalItemText, isSelected && variantStyles['modalItemText:selected']]}/>
163
- </Touchable>
164
- })
165
- }
166
- </ListComponent>
167
-
168
- {
169
- footer && <View style={variantStyles.modalFooter}>
170
- {footer}
171
- </View>
172
- }
173
- </View>
174
- </View>
175
- </Modal>
176
- </>
177
- }
178
-
179
-
180
- export * from './styles'
181
- export * from './types'
1
+ import { IconPlaceholder, useBooleanToggle, getNestedStylesByKey, useDefaultComponentStyle, TypeGuards } from '@codeleap/common'
2
+ import React, { useMemo } from 'react'
3
+ import { Modal, StyleSheet } from 'react-native'
4
+ import { Button } from '../Button'
5
+ import { Scroll } from '../Scroll'
6
+
7
+ import { InputLabel, TextInput } from '../TextInput'
8
+ import { Touchable } from '../Touchable'
9
+ import { AnimatedView, View } from '../View'
10
+ import { MobileSelectStyles } from './styles'
11
+ import { CustomSelectProps } from './types'
12
+
13
+ export const Select = <T extends string|number = string>(selectProps:CustomSelectProps<T>) => {
14
+ const {
15
+ value,
16
+ onValueChange,
17
+ label,
18
+ styles = {},
19
+ options,
20
+ style,
21
+ variants,
22
+ renderItem,
23
+ closeOnSelect = true,
24
+ scroll = false,
25
+ showClose = true,
26
+ showLabelOnModal = true,
27
+ placeholder = 'Select',
28
+ arrowIconName = 'selectArrow',
29
+ footer,
30
+ modalCloseIconName = 'close',
31
+ header,
32
+ closeButtonProps,
33
+ modalLabel,
34
+ ...props
35
+ } = selectProps
36
+
37
+ const [isModalVisible, setModalVisibility] = useBooleanToggle(false)
38
+
39
+ const variantStyles = useDefaultComponentStyle<'u:MobileSelect', typeof MobileSelectStyles>('u:MobileSelect', {
40
+ transform: StyleSheet.flatten,
41
+ rootElement: 'inputWrapper',
42
+ styles,
43
+ variants,
44
+ })
45
+
46
+ const inputStyles = useMemo(
47
+ () => getNestedStylesByKey('input', variantStyles),
48
+ [variantStyles],
49
+ )
50
+
51
+ const closeButtonStyles = useMemo(
52
+ () => getNestedStylesByKey('modalCloseButton', variantStyles),
53
+ [variantStyles],
54
+ )
55
+
56
+ const ListComponent = scroll ? Scroll : View
57
+
58
+ const close = () => setModalVisibility()
59
+ const select = (value) => {
60
+
61
+ onValueChange(value)
62
+ if (closeOnSelect) {
63
+ close()
64
+ }
65
+ }
66
+
67
+ const selectedLabel:string = useMemo(() => {
68
+ const current = options.find(o => o.value === value)
69
+
70
+ const display = current?.label ?? placeholder
71
+
72
+ return TypeGuards.isString(display) ? display : ''
73
+ }, [value, placeholder, options])
74
+
75
+ return <>
76
+ <TextInput
77
+
78
+ caretHidden
79
+ value={selectedLabel}
80
+ rightIcon={{
81
+ name: arrowIconName as IconPlaceholder,
82
+ }}
83
+ editable={false}
84
+ touchableWrapper
85
+ innerWrapperProps={{
86
+ debugName: 'Select',
87
+ onPress: close,
88
+ }}
89
+ label={label}
90
+ debugName={'Select input'}
91
+ styles={inputStyles}
92
+ style={style}
93
+ {...props}
94
+ />
95
+ <AnimatedView pointerEvents={'none'} transition='opacity' style={[
96
+ {
97
+ position: 'absolute',
98
+ top: 0,
99
+ right: 0,
100
+ left: 0,
101
+ bottom: 0,
102
+ },
103
+ variantStyles.backdrop,
104
+ isModalVisible ? variantStyles['backdrop:visible'] : variantStyles['backdrop:hidden'],
105
+ ]} />
106
+
107
+ <Modal
108
+ animationType='slide'
109
+ transparent={true}
110
+ visible={isModalVisible}
111
+ onRequestClose={() => {
112
+ setModalVisibility()
113
+ }}
114
+ pointerEvents={isModalVisible ? 'auto' : 'none'}
115
+ >
116
+ <Touchable
117
+ onPress={close}
118
+ style={{
119
+ position: 'absolute',
120
+ top: 0,
121
+ right: 0,
122
+ left: 0,
123
+ bottom: 0,
124
+ }}
125
+ debugName={`Close modal`}
126
+ />
127
+ <View style={variantStyles.modalWrapper}>
128
+
129
+ <View style={variantStyles.modalBox}>
130
+ {
131
+ (showClose || showLabelOnModal || header) && (
132
+ <View style={variantStyles.modalHeader}>
133
+ {
134
+ header ? header : <>
135
+ {showLabelOnModal && <InputLabel label={modalLabel || label} style={variantStyles.modalLabelText}/>}
136
+ {showClose && <Button
137
+ icon={modalCloseIconName as IconPlaceholder}
138
+ onPress={close}
139
+ styles={closeButtonStyles}
140
+ debugName={'Close modal'}
141
+ {...closeButtonProps}
142
+ />}
143
+ </>
144
+ }
145
+ </View>
146
+ )
147
+ }
148
+ <ListComponent style={variantStyles.modalList}>
149
+ {
150
+ options.map((item, idx) => {
151
+ const isSelected = value === item.value
152
+ if (renderItem) {
153
+ return renderItem({
154
+ ...item,
155
+ selected: isSelected,
156
+ onPress: close,
157
+ styles: variantStyles,
158
+
159
+ })
160
+ }
161
+
162
+ return <Touchable key={idx} style={[
163
+ variantStyles.modalItem,
164
+ isSelected && variantStyles['modalItem:selected'],
165
+ ]} onPress={() => select(item.value)} debugName={`Select ${item.value}`}>
166
+ <InputLabel label={item.label} style={[variantStyles.modalItemText, isSelected && variantStyles['modalItemText:selected']]}/>
167
+ </Touchable>
168
+ })
169
+ }
170
+ </ListComponent>
171
+
172
+ {
173
+ footer && <View style={variantStyles.modalFooter}>
174
+ {footer}
175
+ </View>
176
+ }
177
+ </View>
178
+ </View>
179
+ </Modal>
180
+ </>
181
+ }
182
+
183
+ export * from './styles'
184
+ export * from './types'
@@ -1,81 +1,81 @@
1
- import { assignTextStyle, ButtonParts, createDefaultVariantFactory, TextInputComposition } from '@codeleap/common'
2
- import { MobileModalStyles } from '../Modal'
3
- type ModalParts =
4
- 'Box' |
5
- 'Wrapper' |
6
- 'Header' |
7
- 'Footer' |
8
- 'List' |
9
- 'Item' |
10
- 'ItemText' |
11
- 'Item:selected' |
12
- 'ItemText:selected' |
13
- 'LabelText' |
14
- `CloseButton${Capitalize<ButtonParts>}`
15
-
16
- type InputParts = `input${Capitalize<TextInputComposition>}`
17
-
18
- export type MobileSelectParts = InputParts
19
- | `backdrop`
20
- | `backdrop:visible`
21
- | `backdrop:hidden`
22
- | `modal${ModalParts}`
23
-
24
- export type MobileSelectComposition = MobileSelectParts
25
-
26
- const createSelectStyle = createDefaultVariantFactory<MobileSelectComposition>()
27
-
28
- export const MobileSelectStyles = {
29
- default: createSelectStyle((theme) => ({
30
- modalBox: {
31
- // ...MobileModalStyles.default(theme).box,
32
- backgroundColor: theme.colors.background,
33
- borderTopLeftRadius: 20,
34
- borderTopRightRadius: 20,
35
- zIndex: 1,
36
- elevation: 5,
37
- },
38
- modalWrapper: {
39
- // ...MobileModalStyles.default(theme).wrapper,
40
- flex: 1,
41
- alignItems: 'stretch',
42
- justifyContent: 'flex-end',
43
- },
44
- modalItem: {
45
- ...theme.spacing.paddingVertical(1),
46
- ...theme.spacing.paddingHorizontal(2),
47
- color: theme.colors.text,
48
- },
49
- 'modalItemText:selected': {
50
- color: theme.colors.primary,
51
- },
52
- modalList: {
53
- ...theme.spacing.marginVertical(0.6),
54
- },
55
- backdrop: {
56
- // ...MobileModalStyles.default(theme).overlay,
57
- zIndex: 10,
58
- flex: 1,
59
-
60
- backgroundColor: theme.colors.black,
61
- },
62
- 'backdrop:hidden': {
63
- opacity: 0,
64
- },
65
- 'backdrop:visible': {
66
- opacity: 0.4,
67
- },
68
- modalHeader: {
69
- ...theme.spacing.padding(2),
70
- flexDirection: 'row',
71
- ...theme.presets.alignCenter,
72
- ...theme.presets.justifySpaceBetween,
73
- },
74
- modalLabelText: {
75
- ...assignTextStyle('p2')(theme).text,
76
- },
77
- modalCloseButtonWrapper: {
78
- backgroundColor: 'transparent',
79
- },
80
- })),
81
- }
1
+ import { assignTextStyle, ButtonParts, createDefaultVariantFactory, TextInputComposition } from '@codeleap/common'
2
+ import { MobileModalStyles } from '../Modal'
3
+ type ModalParts =
4
+ 'Box' |
5
+ 'Wrapper' |
6
+ 'Header' |
7
+ 'Footer' |
8
+ 'List' |
9
+ 'Item' |
10
+ 'ItemText' |
11
+ 'Item:selected' |
12
+ 'ItemText:selected' |
13
+ 'LabelText' |
14
+ `CloseButton${Capitalize<ButtonParts>}`
15
+
16
+ type InputParts = `input${Capitalize<TextInputComposition>}`
17
+
18
+ export type MobileSelectParts = InputParts
19
+ | `backdrop`
20
+ | `backdrop:visible`
21
+ | `backdrop:hidden`
22
+ | `modal${ModalParts}`
23
+
24
+ export type MobileSelectComposition = MobileSelectParts
25
+
26
+ const createSelectStyle = createDefaultVariantFactory<MobileSelectComposition>()
27
+
28
+ export const MobileSelectStyles = {
29
+ default: createSelectStyle((theme) => ({
30
+ modalBox: {
31
+ // ...MobileModalStyles.default(theme).box,
32
+ backgroundColor: theme.colors.background,
33
+ borderTopLeftRadius: 20,
34
+ borderTopRightRadius: 20,
35
+ zIndex: 1,
36
+ elevation: 5,
37
+ },
38
+ modalWrapper: {
39
+ // ...MobileModalStyles.default(theme).wrapper,
40
+ flex: 1,
41
+ alignItems: 'stretch',
42
+ justifyContent: 'flex-end',
43
+ },
44
+ modalItem: {
45
+ ...theme.spacing.paddingVertical(1),
46
+ ...theme.spacing.paddingHorizontal(2),
47
+ color: theme.colors.text,
48
+ },
49
+ 'modalItemText:selected': {
50
+ color: theme.colors.primary,
51
+ },
52
+ modalList: {
53
+ ...theme.spacing.marginVertical(0.6),
54
+ },
55
+ backdrop: {
56
+ // ...MobileModalStyles.default(theme).overlay,
57
+ zIndex: 10,
58
+ flex: 1,
59
+
60
+ backgroundColor: theme.colors.black,
61
+ },
62
+ 'backdrop:hidden': {
63
+ opacity: 0,
64
+ },
65
+ 'backdrop:visible': {
66
+ opacity: 0.4,
67
+ },
68
+ modalHeader: {
69
+ ...theme.spacing.padding(2),
70
+ flexDirection: 'row',
71
+ ...theme.presets.alignCenter,
72
+ ...theme.presets.justifySpaceBetween,
73
+ },
74
+ modalLabelText: {
75
+ ...assignTextStyle('p2')(theme).text,
76
+ },
77
+ modalCloseButtonWrapper: {
78
+ backgroundColor: 'transparent',
79
+ },
80
+ })),
81
+ }