@codeleap/mobile 1.2.1 → 1.4.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 (194) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.js +3 -0
  3. package/.vscode/settings.json +11 -0
  4. package/CodeLeap-Mobile-Packages.code-workspace +8 -0
  5. package/dist/components/ActivityIndicator.js +9 -6
  6. package/dist/components/ActivityIndicator.js.map +1 -1
  7. package/dist/components/Animated.d.ts +15 -0
  8. package/dist/components/Animated.js +55 -0
  9. package/dist/components/Animated.js.map +1 -0
  10. package/dist/components/Button.d.ts +107 -104
  11. package/dist/components/Button.js +30 -9
  12. package/dist/components/Button.js.map +1 -1
  13. package/dist/components/Checkbox/index.d.ts +1 -1
  14. package/dist/components/Checkbox/index.js +7 -8
  15. package/dist/components/Checkbox/index.js.map +1 -1
  16. package/dist/components/Checkbox/styles.d.ts +47 -43
  17. package/dist/components/Checkbox/styles.js +8 -8
  18. package/dist/components/Checkbox/styles.js.map +1 -1
  19. package/dist/components/ContentView.js +4 -2
  20. package/dist/components/ContentView.js.map +1 -1
  21. package/dist/components/FileInput.d.ts +26 -2
  22. package/dist/components/FileInput.js +151 -4
  23. package/dist/components/FileInput.js.map +1 -1
  24. package/dist/components/Icon.d.ts +4 -6
  25. package/dist/components/Icon.js +25 -11
  26. package/dist/components/Icon.js.map +1 -1
  27. package/dist/components/Image.d.ts +7 -6
  28. package/dist/components/Image.js +4 -4
  29. package/dist/components/Image.js.map +1 -1
  30. package/dist/components/List.d.ts +11 -0
  31. package/dist/components/List.js +77 -0
  32. package/dist/components/List.js.map +1 -0
  33. package/dist/components/Modal/index.d.ts +25 -0
  34. package/dist/components/Modal/index.js +109 -0
  35. package/dist/components/Modal/index.js.map +1 -0
  36. package/dist/components/Modal/styles.d.ts +66 -0
  37. package/dist/components/Modal/styles.js +57 -0
  38. package/dist/components/Modal/styles.js.map +1 -0
  39. package/dist/components/Navigation/Navigation.d.ts +3 -0
  40. package/dist/components/Navigation/Navigation.js +76 -0
  41. package/dist/components/Navigation/Navigation.js.map +1 -0
  42. package/dist/components/Navigation/constants.d.ts +5 -0
  43. package/dist/components/Navigation/constants.js +11 -0
  44. package/dist/components/Navigation/constants.js.map +1 -0
  45. package/dist/components/Navigation/index.d.ts +3 -0
  46. package/dist/components/Navigation/index.js +16 -0
  47. package/dist/components/Navigation/index.js.map +1 -0
  48. package/dist/components/Navigation/types.d.ts +26 -0
  49. package/dist/components/Navigation/types.js +8 -0
  50. package/dist/components/Navigation/types.js.map +1 -0
  51. package/dist/components/Navigation/utils.d.ts +3 -0
  52. package/dist/components/Navigation/utils.js +67 -0
  53. package/dist/components/Navigation/utils.js.map +1 -0
  54. package/dist/components/Overlay.d.ts +16 -0
  55. package/dist/components/Overlay.js +66 -0
  56. package/dist/components/Overlay.js.map +1 -0
  57. package/dist/components/Pager/index.d.ts +19 -0
  58. package/dist/components/Pager/index.js +164 -0
  59. package/dist/components/Pager/index.js.map +1 -0
  60. package/dist/components/Pager/styles.d.ts +51 -0
  61. package/dist/components/Pager/styles.js +44 -0
  62. package/dist/components/Pager/styles.js.map +1 -0
  63. package/dist/components/RadioInput/index.d.ts +1 -0
  64. package/dist/components/RadioInput/index.js +13 -19
  65. package/dist/components/RadioInput/index.js.map +1 -1
  66. package/dist/components/RadioInput/styles.d.ts +48 -44
  67. package/dist/components/RadioInput/styles.js +4 -4
  68. package/dist/components/RadioInput/styles.js.map +1 -1
  69. package/dist/components/Scroll.d.ts +3 -96
  70. package/dist/components/Scroll.js +11 -8
  71. package/dist/components/Scroll.js.map +1 -1
  72. package/dist/components/Sections.d.ts +11 -0
  73. package/dist/components/Sections.js +77 -0
  74. package/dist/components/Sections.js.map +1 -0
  75. package/dist/components/Select/index.d.ts +5 -2
  76. package/dist/components/Select/index.js +118 -5
  77. package/dist/components/Select/index.js.map +1 -1
  78. package/dist/components/Select/styles.d.ts +9 -0
  79. package/dist/components/Select/styles.js +57 -0
  80. package/dist/components/Select/styles.js.map +1 -0
  81. package/dist/components/Select/types.d.ts +33 -0
  82. package/dist/components/Select/types.js +3 -0
  83. package/dist/components/Select/types.js.map +1 -0
  84. package/dist/components/Slider/Mark.d.ts +3 -0
  85. package/dist/components/Slider/Mark.js +32 -0
  86. package/dist/components/Slider/Mark.js.map +1 -0
  87. package/dist/components/Slider/Thumb.d.ts +7 -0
  88. package/dist/components/Slider/Thumb.js +30 -0
  89. package/dist/components/Slider/Thumb.js.map +1 -0
  90. package/dist/components/Slider/index.d.ts +3 -0
  91. package/dist/components/Slider/index.js +94 -0
  92. package/dist/components/Slider/index.js.map +1 -0
  93. package/dist/components/{Slider.d.ts → Slider/types.d.ts} +12 -7
  94. package/dist/components/Slider/types.js +3 -0
  95. package/dist/components/Slider/types.js.map +1 -0
  96. package/dist/components/Switch.d.ts +2 -2
  97. package/dist/components/Switch.js +6 -7
  98. package/dist/components/Switch.js.map +1 -1
  99. package/dist/components/Text.js +5 -5
  100. package/dist/components/Text.js.map +1 -1
  101. package/dist/components/TextInput.d.ts +108 -94
  102. package/dist/components/TextInput.js +42 -35
  103. package/dist/components/TextInput.js.map +1 -1
  104. package/dist/components/Touchable.d.ts +9 -14
  105. package/dist/components/Touchable.js +11 -15
  106. package/dist/components/Touchable.js.map +1 -1
  107. package/dist/components/View.d.ts +105 -181
  108. package/dist/components/View.js +6 -8
  109. package/dist/components/View.js.map +1 -1
  110. package/dist/components/{index.d.ts → components.d.ts} +6 -0
  111. package/dist/components/{index.js → components.js} +7 -1
  112. package/dist/components/components.js.map +1 -0
  113. package/dist/index.d.ts +4 -1
  114. package/dist/index.js +7 -2
  115. package/dist/index.js.map +1 -1
  116. package/dist/modules/documentPicker.d.ts +3 -0
  117. package/dist/modules/documentPicker.js +12 -0
  118. package/dist/modules/documentPicker.js.map +1 -0
  119. package/dist/modules/fastImage.js +1 -1
  120. package/dist/modules/fastImage.js.map +1 -1
  121. package/dist/modules/reactNavigation.d.ts +3 -0
  122. package/dist/modules/reactNavigation.js +11 -0
  123. package/dist/modules/reactNavigation.js.map +1 -0
  124. package/dist/modules/types/fileTypes.d.ts +138 -0
  125. package/dist/modules/types/fileTypes.js +3 -0
  126. package/dist/modules/types/fileTypes.js.map +1 -0
  127. package/dist/types/utility.d.ts +1 -1
  128. package/dist/utils/OSAlert.d.ts +3 -3
  129. package/dist/utils/OSAlert.js.map +1 -1
  130. package/dist/utils/misc.d.ts +2 -0
  131. package/dist/utils/misc.js +26 -0
  132. package/dist/utils/misc.js.map +1 -0
  133. package/dist/utils/styles.js +1 -1
  134. package/dist/utils/styles.js.map +1 -1
  135. package/package.json +10 -4
  136. package/src/components/ActivityIndicator.tsx +38 -28
  137. package/src/components/Animated.tsx +34 -0
  138. package/src/components/Button.tsx +68 -34
  139. package/src/components/Checkbox/index.tsx +60 -48
  140. package/src/components/Checkbox/styles.ts +39 -30
  141. package/src/components/ContentView.tsx +24 -18
  142. package/src/components/FileInput.tsx +177 -5
  143. package/src/components/Icon.tsx +36 -23
  144. package/src/components/Image.tsx +41 -35
  145. package/src/components/List.tsx +100 -0
  146. package/src/components/Modal/index.tsx +158 -0
  147. package/src/components/Modal/styles.ts +118 -0
  148. package/src/components/Navigation/Navigation.tsx +51 -0
  149. package/src/components/Navigation/constants.ts +8 -0
  150. package/src/components/Navigation/index.tsx +3 -0
  151. package/src/components/Navigation/types.ts +37 -0
  152. package/src/components/Navigation/utils.tsx +54 -0
  153. package/src/components/Overlay.tsx +76 -0
  154. package/src/components/Pager/index.tsx +241 -0
  155. package/src/components/Pager/styles.ts +51 -0
  156. package/src/components/RadioInput/index.tsx +76 -52
  157. package/src/components/RadioInput/styles.ts +23 -18
  158. package/src/components/Scroll.tsx +84 -73
  159. package/src/components/Select/index.tsx +179 -6
  160. package/src/components/Select/styles.ts +81 -0
  161. package/src/components/Select/types.ts +41 -0
  162. package/src/components/Slider/Mark.tsx +46 -0
  163. package/src/components/Slider/Thumb.tsx +29 -0
  164. package/src/components/Slider/index.tsx +123 -0
  165. package/src/components/Slider/types.ts +25 -0
  166. package/src/components/Switch.tsx +63 -54
  167. package/src/components/Text.tsx +22 -23
  168. package/src/components/TextInput.tsx +194 -191
  169. package/src/components/Touchable.tsx +45 -35
  170. package/src/components/View.tsx +33 -40
  171. package/src/components/components.ts +26 -0
  172. package/src/index.ts +6 -2
  173. package/src/modules/documentPicker.ts +8 -0
  174. package/src/modules/fastImage.ts +2 -2
  175. package/src/modules/index.d.ts +496 -0
  176. package/src/modules/reactNavigation.ts +4 -0
  177. package/src/modules/types/documentPicker.d.ts +215 -0
  178. package/src/modules/types/fileTypes.ts +138 -0
  179. package/src/types/utility.ts +2 -2
  180. package/src/utils/OSAlert.ts +35 -33
  181. package/src/utils/misc.ts +24 -0
  182. package/src/utils/styles.ts +13 -16
  183. package/dist/components/Drawer.d.ts +0 -23
  184. package/dist/components/Drawer.js +0 -78
  185. package/dist/components/Drawer.js.map +0 -1
  186. package/dist/components/Navigation.d.ts +0 -30
  187. package/dist/components/Navigation.js +0 -126
  188. package/dist/components/Navigation.js.map +0 -1
  189. package/dist/components/Slider.js +0 -130
  190. package/dist/components/Slider.js.map +0 -1
  191. package/dist/components/index.js.map +0 -1
  192. package/src/components/Navigation.tsx +0 -125
  193. package/src/components/Slider.tsx +0 -198
  194. package/src/components/index.ts +0 -19
@@ -0,0 +1,241 @@
1
+ import {
2
+ ComponentVariants,
3
+ onUpdate,
4
+ useDefaultComponentStyle,
5
+ useDebounce,
6
+ useCodeleapContext,
7
+ } from '@codeleap/common'
8
+ import React, {
9
+ forwardRef,
10
+ useImperativeHandle,
11
+ useMemo,
12
+ useRef,
13
+ useState,
14
+ } from 'react'
15
+ import { StyleSheet } from 'react-native'
16
+ import { StylesOf } from '../../types/utility'
17
+ import { Animated } from '../Animated'
18
+ import { Button } from '../Button'
19
+ import { View } from '../View'
20
+ import { Text } from '../Text'
21
+ import { MobilePagerStyles, PagerComposition } from './styles'
22
+
23
+ export * from './styles'
24
+
25
+ export type PagerProps = {
26
+ variants?: ComponentVariants<typeof MobilePagerStyles>['variants'];
27
+ styles?: StylesOf<PagerComposition>;
28
+ page?: number;
29
+ loop?: boolean;
30
+ debug?: boolean;
31
+ onPageChange?: (page: number) => void;
32
+ };
33
+
34
+ export type PagerRef = {
35
+ forward(by?: number): void;
36
+ back(by?: number): void;
37
+ to(index?: number): void;
38
+ };
39
+
40
+
41
+ export const Pager = forwardRef<PagerRef, PagerProps>((pagerProps, ref) => {
42
+ const {
43
+ children,
44
+ styles,
45
+ variants,
46
+ page: propPage,
47
+ debug,
48
+ loop,
49
+ onPageChange,
50
+ } = pagerProps
51
+
52
+ const [page, setPage] = useState(() => propPage ?? 0)
53
+
54
+ const variantStyles = useDefaultComponentStyle<'u:Pager', typeof MobilePagerStyles>(
55
+ 'u:Pager',
56
+ {
57
+ styles,
58
+ transform: StyleSheet.flatten,
59
+ variants,
60
+ },
61
+ )
62
+ const { logger } = useCodeleapContext()
63
+ const nChildren = React.Children.count(children)
64
+
65
+ const lastPage = nChildren - 1
66
+
67
+ const pagerRef = useRef<PagerRef>({
68
+ forward: (by = 1) => {
69
+ setPage((currentPage) => {
70
+ if (currentPage < lastPage) {
71
+ return currentPage + by
72
+ } else if (loop) {
73
+ return by - 1
74
+ }
75
+ return currentPage
76
+ })
77
+ },
78
+ back: (by = 1) => {
79
+ setPage((currentPage) => {
80
+ if (currentPage > 0) {
81
+ return currentPage - by
82
+ } else if (loop) {
83
+ return nChildren - by
84
+ }
85
+ return currentPage
86
+ })
87
+ },
88
+ to: (n: number) => {
89
+ if (n >= 0 && n <= lastPage) {
90
+ setPage(n)
91
+ } else {
92
+ logger.warn(
93
+ 'Attempted to go to a page which falls outside range',
94
+ { currentPage: page, attemptedToGoTo: n, pageRange: [0, lastPage] },
95
+ 'Component',
96
+ )
97
+ }
98
+ },
99
+ })
100
+
101
+ onUpdate(() => {
102
+ onPageChange?.(page)
103
+ }, [page])
104
+
105
+ onUpdate(() => {
106
+ if (typeof propPage === 'number') {
107
+ setPage(propPage)
108
+ }
109
+ }, [propPage])
110
+
111
+ useImperativeHandle(ref, () => pagerRef.current)
112
+
113
+ const pagePoses = useMemo(() => {
114
+ return {
115
+ current: variantStyles['page:pose:current'],
116
+ next: variantStyles['page:pose:next'],
117
+ previous: variantStyles['page:pose:previous'],
118
+ }
119
+ }, [variantStyles])
120
+
121
+ return (
122
+ <View style={variantStyles.wrapper}>
123
+ {React.Children.map(children, (child, idx) => (
124
+ <Page
125
+ {...pagerProps}
126
+ idx={idx}
127
+ lastPage={lastPage}
128
+ pagePoses={pagePoses}
129
+ style={[variantStyles.page]}
130
+ page={page}
131
+ >
132
+ {child}
133
+ </Page>
134
+ ))}
135
+
136
+ {debug && (
137
+ <View
138
+ variants={['absolute']}
139
+ style={{ bottom: 0, left: 0, right: 0 }}
140
+ >
141
+ <Button text='previous' onPress={pagerRef.current.back} />
142
+ <Text text={page.toString()} />
143
+ <Button text='next' onPress={pagerRef.current.forward} />
144
+ </View>
145
+ )}
146
+ </View>
147
+
148
+ )
149
+ })
150
+ type PageProps = PagerProps & {
151
+ idx: number;
152
+ lastPage: number;
153
+ page: number;
154
+ pagePoses: any;
155
+ style: any;
156
+ };
157
+ const Page: React.FC<PageProps> = (pageProps) => {
158
+ const {
159
+ children: child,
160
+ idx,
161
+ loop,
162
+ lastPage,
163
+ page,
164
+ style,
165
+ pagePoses,
166
+ } = pageProps
167
+
168
+ if (!React.isValidElement(child)) return null
169
+
170
+ // const isLast = idx === lastPage
171
+ // const isFirst = idx === 0
172
+
173
+ // const isLoopNext = (loop && isFirst && page === lastPage)
174
+ // const isLoopPrevious = (loop && isLast && page === 0)
175
+
176
+ // const isCurrent = idx === page
177
+ // const isSequenceNext = idx === page + 1
178
+ // const isSequencePrevious = idx === page - 1
179
+
180
+ // const isNext = isSequenceNext || isLoopNext
181
+
182
+ // const isPrevious = isSequencePrevious || isLoopPrevious
183
+
184
+ // const isCurrentOrAdjacent = [
185
+ // isCurrent,
186
+ // isNext,
187
+ // isPrevious
188
+ // ].includes(true)
189
+
190
+ // if(isCurrentOrAdjacent){
191
+ // return <Animated
192
+ // key={idx}
193
+ // component='View'
194
+ // config={pagePoses}
195
+ // pose={isCurrent ? 'current' : (isNext ? 'next' : 'previous')}
196
+ // style={[{
197
+ // position: 'absolute',
198
+ // top: 0,
199
+
200
+ // },style]}
201
+ // >
202
+ // {child}
203
+ // </Animated>
204
+ // }
205
+ const isCurrent = idx === page
206
+ const isNext = idx > page
207
+ const [_opacity, setOpacity] = useState(isCurrent ? 1 : 0)
208
+
209
+ const [opacity, resetDebounceTimer] = useDebounce(_opacity, 800)
210
+
211
+ onUpdate(() => {
212
+ if (isCurrent) {
213
+ setOpacity(1)
214
+ } else {
215
+ setOpacity(0)
216
+ }
217
+
218
+ return resetDebounceTimer
219
+ }, [idx, page])
220
+
221
+ return (
222
+ <Animated
223
+ key={idx}
224
+ component='View'
225
+ config={pagePoses}
226
+ pose={isCurrent ? 'current' : isNext ? 'next' : 'previous'}
227
+ style={[
228
+ {
229
+ position: 'absolute',
230
+ top: 0,
231
+ opacity: isCurrent ? _opacity : opacity,
232
+ },
233
+ style,
234
+ ]}
235
+ >
236
+ {child}
237
+ </Animated>
238
+ )
239
+
240
+ // return <View style={{display:'none'}} key={idx}>{child}</View>
241
+ }
@@ -0,0 +1,51 @@
1
+ import {
2
+ createDefaultVariantFactory,
3
+ includePresets,
4
+ } from '@codeleap/common'
5
+
6
+ export type PagerComposition =
7
+ | 'page'
8
+ | 'page:transition'
9
+ | 'page:pose:previous'
10
+ | 'page:pose:next'
11
+ | 'page:pose:current'
12
+ | 'wrapper';
13
+
14
+ const createPagerStyle = createDefaultVariantFactory<PagerComposition>()
15
+
16
+ const presets = includePresets((style) => createPagerStyle(() => ({ wrapper: style })),
17
+ )
18
+
19
+ export const MobilePagerStyles = {
20
+ ...presets,
21
+ default: createPagerStyle((Theme) => {
22
+ const transition = {
23
+ duration: 500,
24
+ ease: 'easeInOut',
25
+ useNativeDriver: true,
26
+ }
27
+
28
+ return {
29
+ wrapper: {
30
+ ...Theme.presets.full,
31
+ },
32
+ 'page:pose:next': {
33
+ left: Theme.values.width * 1.8,
34
+ transition: transition,
35
+ },
36
+ 'page:pose:current': {
37
+ left: 0,
38
+ transition: transition,
39
+ },
40
+ 'page:pose:previous': {
41
+ left: -Theme.values.width * 1.8,
42
+ transition: transition,
43
+ },
44
+ page: {
45
+ width: '100%',
46
+ height: '100%',
47
+ },
48
+ }
49
+ }),
50
+ pageless: createPagerStyle(() => ({})),
51
+ }
@@ -2,75 +2,99 @@ import * as React from 'react'
2
2
  import { ReactNode, useRef, ComponentPropsWithoutRef } from 'react'
3
3
  import { v4 } from 'uuid'
4
4
 
5
- import {Text } from '../Text'
5
+ import { Text } from '../Text'
6
6
  import { Touchable } from '../Touchable'
7
- import { ComponentVariants, StylesOf, useComponentStyle } from '@codeleap/common'
7
+ import {
8
+ ComponentVariants,
9
+ StylesOf,
10
+ useDefaultComponentStyle,
11
+ } from '@codeleap/common'
8
12
  import { View } from '../View'
9
- import { MobileRadioInputStyles, MobileRadioInputComposition} from './styles'
13
+ import { MobileRadioInputStyles, MobileRadioInputComposition } from './styles'
10
14
 
11
15
  export * from './styles'
12
16
 
13
17
  type RadioItem<T extends unknown = any> = {
14
- value: T,
15
- label: ReactNode
16
- }
18
+ value: T;
19
+ label: ReactNode;
20
+ };
17
21
 
18
- const getRadioStyle = (props) => useComponentStyle('RadioInput', props)
22
+ const getRadioStyle = (props) => useDefaultComponentStyle('RadioInput', props)
19
23
 
20
- export type RadioButtonProps = Omit<ComponentPropsWithoutRef<typeof Touchable>, 'style'> & {
21
- item: RadioItem
22
- select: () => void
23
- style: StylesOf<MobileRadioInputComposition>
24
- checked: boolean
25
- }
24
+ export type RadioButtonProps = Omit<
25
+ ComponentPropsWithoutRef<typeof Touchable>,
26
+ 'style'
27
+ > & {
28
+ item: RadioItem;
29
+ select: () => void;
30
+ style: StylesOf<MobileRadioInputComposition>;
31
+ checked: boolean;
32
+ defaultValue?: number;
33
+ };
26
34
 
27
35
  export type RadioGroupProps<T> = {
28
- options: RadioItem<T>[]
29
- value: T
30
- onValueChange(value:T):void
31
- label:ReactNode
32
- styles?: StylesOf<MobileRadioInputComposition>
33
- } & ComponentVariants<typeof MobileRadioInputStyles>
34
-
36
+ options: RadioItem<T>[];
37
+ value: T;
38
+ onValueChange(value: T): void;
39
+ label: ReactNode;
40
+ styles?: StylesOf<MobileRadioInputComposition>;
41
+ } & ComponentVariants<typeof MobileRadioInputStyles>;
35
42
 
36
- export const RadioButton:React.FC<RadioButtonProps> = ({item, select, style, checked, ...props}) => {
37
-
38
- return <Touchable onPress={select} style={style.itemWrapper} >
39
- <View style={[
40
- style.button,
41
- checked && style['button:checked'],
42
- ]}>
43
- <View style={[
44
- style['buttonMark'],
45
- checked && style['buttonMark:checked'],
46
- ]} />
47
- </View>
48
- {typeof item.label === 'string' ? <Text text={item.label} style={style.text}/> : item.label }
49
- </Touchable>
43
+ export const RadioButton: React.FC<RadioButtonProps> = ({
44
+ item,
45
+ select,
46
+ style,
47
+ checked,
48
+ ...props
49
+ }) => {
50
+ return (
51
+ <Touchable onPress={select} style={style.itemWrapper}>
52
+ <View style={[style.button, checked && style['button:checked']]}>
53
+ <View
54
+ style={[style.buttonMark, checked && style['buttonMark:checked']]}
55
+ />
56
+ </View>
57
+ {typeof item.label === 'string' ? (
58
+ <Text text={item.label} style={style.text} />
59
+ ) : (
60
+ item.label
61
+ )}
62
+ </Touchable>
63
+ )
50
64
  }
51
65
 
66
+ export const RadioGroup = <T extends unknown>(
67
+ radioGroupProps: RadioGroupProps<T>,
68
+ ) => {
69
+ const {
70
+ options,
71
+ value,
72
+ onValueChange,
73
+ label,
74
+ responsiveVariants,
75
+ variants,
76
+ styles,
77
+ } = radioGroupProps
52
78
 
53
- export const RadioGroup = <T extends unknown>(radioGroupProps:RadioGroupProps<T>) => {
54
- const {options, value, onValueChange, label, responsiveVariants, variants, styles} = radioGroupProps
55
-
56
79
  const radioStyle = getRadioStyle({
57
80
  responsiveVariants,
58
81
  variants,
59
- styles,
82
+ styles,
60
83
  })
61
- return <View style={radioStyle.wrapper}>
62
- {typeof label === 'string' ? <Text text={label}/> : label }
63
- <View style={radioStyle.listWrapper}>
64
- {
65
- options?.map((item, idx) => <RadioButton
66
- item={item}
67
- key={idx}
68
- style={radioStyle}
69
-
70
- checked={value === item.value}
71
- select={() => onValueChange(item.value)}
72
- />)
73
- }
84
+ return (
85
+ <View style={radioStyle.wrapper}>
86
+ {typeof label === 'string' ? <Text text={label} /> : label}
87
+ <View style={radioStyle.listWrapper}>
88
+ {options?.map((item, idx) => (
89
+ <RadioButton
90
+ item={item}
91
+ key={idx}
92
+ style={radioStyle}
93
+ checked={value === item.value}
94
+ select={() => onValueChange(item.value)}
95
+ />
96
+ ))}
97
+ </View>
74
98
  </View>
75
- </View>
99
+ )
76
100
  }
@@ -1,11 +1,18 @@
1
- import { createDefaultVariantFactory, RadioInputStyles } from '@codeleap/common';
2
- type RadioParts = 'button' | 'itemWrapper' | 'text' | 'buttonMark'
3
-
4
- type RadioGroupParts = 'label' |'wrapper' |'list'
1
+ import {
2
+ createDefaultVariantFactory,
3
+ RadioInputStyles,
4
+ } from '@codeleap/common'
5
+ type RadioParts = 'button' | 'itemWrapper' | 'text' | 'buttonMark';
5
6
 
6
- export type MobileRadioInputComposition = `${RadioParts}:checked` | RadioParts | RadioGroupParts
7
+ type RadioGroupParts = 'label' | 'wrapper' | 'list';
7
8
 
8
- const createRadioStyle = createDefaultVariantFactory<MobileRadioInputComposition>()
9
+ export type MobileRadioInputComposition =
10
+ | `${RadioParts}:checked`
11
+ | RadioParts
12
+ | RadioGroupParts;
13
+
14
+ const createRadioStyle =
15
+ createDefaultVariantFactory<MobileRadioInputComposition>()
9
16
 
10
17
  const defaultStyles = RadioInputStyles.default
11
18
 
@@ -16,47 +23,45 @@ export const MobileRadioInputStyles = {
16
23
 
17
24
  const itemHeight = theme.typography.baseFontSize * 1.2
18
25
  const markHeight = itemHeight / 2
19
- const translateX = -(markHeight/2)
20
- const translateY = -(markHeight/2)
26
+ const translateX = -(markHeight / 2)
27
+ const translateY = -(markHeight / 2)
21
28
  return {
22
29
  ...style,
23
30
  itemWrapper: {
24
31
  ...style.itemWrapper,
25
32
  },
26
- button: {
33
+ button: {
27
34
  height: itemHeight,
28
35
  width: itemHeight,
29
36
  ...theme.border.primary(1),
30
37
  borderRadius: theme.borderRadius.large,
31
-
38
+
32
39
  position: 'relative',
33
40
  ...theme.spacing.marginRight(1),
34
-
35
41
  },
36
- 'buttonMark': {
42
+ buttonMark: {
37
43
  backgroundColor: theme.colors.primary,
38
44
  position: 'absolute',
39
45
  left: '50%',
40
46
  top: '50%',
41
47
  height: markHeight,
42
48
  width: markHeight,
43
-
44
- transform: [{translateX},{translateY}],
49
+
50
+ transform: [{ translateX }, { translateY }],
45
51
  borderRadius: theme.borderRadius.large,
46
- opacity: 0
52
+ opacity: 0,
47
53
  },
48
54
  'buttonMark:checked': {
49
- opacity: 1
55
+ opacity: 1,
50
56
  },
51
57
  }
52
58
  }),
53
59
  square: createRadioStyle(() => ({
54
- 'buttonMark': {
60
+ buttonMark: {
55
61
  borderRadius: 0,
56
62
  },
57
63
  button: {
58
64
  borderRadius: 0,
59
-
60
65
  },
61
66
  })),
62
67
  }
@@ -1,87 +1,98 @@
1
1
  import * as React from 'react'
2
2
  import { forwardRef, useState } from 'react'
3
- import { deepEqual, onUpdate, useComponentStyle, usePrevious, useStyle } from '@codeleap/common'
4
- import { KeyboardAwareScrollViewProps, KeyboardAwareScrollView as KBDView} from 'react-native-keyboard-aware-scroll-view'
5
- import { RefreshControl, ScrollView } from 'react-native'
3
+ import {
4
+ deepEqual,
5
+ onUpdate,
6
+ useDefaultComponentStyle,
7
+ usePrevious,
8
+ useCodeleapContext,
9
+ } from '@codeleap/common'
10
+ import {
11
+ KeyboardAwareScrollViewProps,
12
+ KeyboardAwareScrollView as KBDView,
13
+ } from 'react-native-keyboard-aware-scroll-view'
14
+ import { RefreshControl, ScrollView, ScrollViewProps, ViewStyle } from 'react-native'
6
15
  import { ViewProps } from './View'
7
16
 
17
+ export type ScrollProps = KeyboardAwareScrollViewProps &
18
+ ViewProps & {
19
+ onRefresh?: () => void;
20
+ refreshTimeout?: number;
21
+ changeData?: any;
22
+ styles?: ViewStyle
23
+ };
8
24
 
9
- export type ScrollProps = KeyboardAwareScrollViewProps & ViewProps & {
10
- onRefresh?:() => void
11
- refreshTimeout?: number
12
- changeData?:any
13
- }
25
+ const KeyboardAwareScrollView =
26
+ KBDView as unknown as React.ForwardRefExoticComponent<
27
+ ViewProps & {
28
+ refreshControl?: JSX.Element;
29
+ ref?: ScrollView;
30
+
31
+ } & ScrollViewProps
32
+ >
14
33
 
15
- const KeyboardAwareScrollView = KBDView as unknown as React.ForwardRefExoticComponent<
16
- ViewProps &
17
- {
18
- refreshControl?: JSX.Element
19
- ref?: ScrollView
20
-
21
- }
22
- >
34
+ export const Scroll = forwardRef<ScrollView, ScrollProps>(
35
+ (scrollProps, ref) => {
36
+ const {
37
+ variants = [],
38
+ style,
39
+ refreshTimeout = 3000,
40
+ children,
41
+ changeData,
42
+ styles,
43
+ ...props
44
+ } = scrollProps
45
+ const hasRefresh = !!props.onRefresh
46
+ const [refreshing, setRefreshing] = useState(false)
23
47
 
48
+ const timer = React.useRef(null)
49
+ const previousData = usePrevious(changeData)
24
50
 
25
- export const Scroll = forwardRef<ScrollView, ScrollProps>((scrollProps, ref) => {
26
- const {
27
- variants = [],
28
- style,
29
- refreshTimeout = 3000,
30
- children,
31
- changeData,
32
- ...props
33
- } = scrollProps
34
- const hasRefresh = !!props.onRefresh
35
- const [refreshing, setRefreshing] = useState(false)
36
-
37
- const timer = React.useRef(null)
38
- const previousData = usePrevious(changeData)
39
-
40
- const onRefresh = () => {
41
- if(timer.current){
42
- clearTimeout(timer.current)
43
- }
44
-
45
- setRefreshing(true)
46
-
47
- props.onRefresh()
48
-
49
- timer.current = setTimeout(() => {
50
- setRefreshing(false)
51
- }, refreshTimeout)
52
-
53
- }
54
- onUpdate(() => {
55
- if(refreshing && !deepEqual(previousData, changeData)){
56
- setRefreshing(false)
57
- if(timer.current){
51
+ const onRefresh = () => {
52
+ if (timer.current) {
58
53
  clearTimeout(timer.current)
59
54
  }
60
- }
61
- },[refreshing, changeData])
62
- const {
63
- Theme
64
- } = useStyle()
65
55
 
66
- const variantStyles = useComponentStyle('View', {
67
- variants
68
- })
56
+ setRefreshing(true)
69
57
 
70
- return (
58
+ props.onRefresh()
71
59
 
72
- <KeyboardAwareScrollView
73
- style={[Theme.presets.full, variantStyles.wrapper, style]}
74
- ref={ref as unknown as ScrollView}
75
- {...props}
76
- refreshControl={
77
- hasRefresh &&
78
- <RefreshControl
79
- refreshing={refreshing}
80
- onRefresh={onRefresh}
81
- />
60
+ timer.current = setTimeout(() => {
61
+ setRefreshing(false)
62
+ }, refreshTimeout)
63
+ }
64
+ onUpdate(() => {
65
+ if (refreshing && !deepEqual(previousData, changeData)) {
66
+ setRefreshing(false)
67
+ if (timer.current) {
68
+ clearTimeout(timer.current)
69
+ }
82
70
  }
83
- >
84
- { children }
85
- </KeyboardAwareScrollView>
86
- )
87
- })
71
+ }, [refreshing, changeData])
72
+ const { Theme } = useCodeleapContext()
73
+
74
+ const variantStyles = useDefaultComponentStyle('View', {
75
+ variants,
76
+ styles: {
77
+ wrapper: styles,
78
+ },
79
+ rootElement: 'wrapper',
80
+ })
81
+
82
+ return (
83
+ <KeyboardAwareScrollView
84
+ style={[Theme.presets.full, style]}
85
+ contentContainerStyle={[variantStyles.wrapper]}
86
+ ref={ref as unknown as ScrollView}
87
+ {...props}
88
+ refreshControl={
89
+ hasRefresh && (
90
+ <RefreshControl refreshing={refreshing} onRefresh={onRefresh} />
91
+ )
92
+ }
93
+ >
94
+ {children}
95
+ </KeyboardAwareScrollView>
96
+ )
97
+ },
98
+ )