@codeleap/mobile 1.9.25 → 1.9.26

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 (202) hide show
  1. package/CodeLeap-Mobile-Packages.code-workspace +7 -7
  2. package/dist/components/ActivityIndicator.d.ts +13 -13
  3. package/dist/components/ActivityIndicator.js +54 -54
  4. package/dist/components/ActivityIndicator.js.map +0 -0
  5. package/dist/components/Animated.d.ts +123 -15
  6. package/dist/components/Animated.js +58 -58
  7. package/dist/components/Animated.js.map +0 -0
  8. package/dist/components/Button.d.ts +125 -125
  9. package/dist/components/Button.js +82 -82
  10. package/dist/components/Button.js.map +0 -0
  11. package/dist/components/Checkbox/index.d.ts +15 -15
  12. package/dist/components/Checkbox/index.js +79 -79
  13. package/dist/components/Checkbox/index.js.map +0 -0
  14. package/dist/components/Checkbox/styles.d.ts +55 -55
  15. package/dist/components/Checkbox/styles.js +51 -51
  16. package/dist/components/Checkbox/styles.js.map +0 -0
  17. package/dist/components/ContentView.d.ts +10 -10
  18. package/dist/components/ContentView.js +50 -50
  19. package/dist/components/ContentView.js.map +0 -0
  20. package/dist/components/FileInput.d.ts +31 -31
  21. package/dist/components/FileInput.js +230 -230
  22. package/dist/components/FileInput.js.map +0 -0
  23. package/dist/components/Icon.d.ts +12 -12
  24. package/dist/components/Icon.js +70 -70
  25. package/dist/components/Icon.js.map +0 -0
  26. package/dist/components/Image.d.ts +18 -18
  27. package/dist/components/Image.js +59 -59
  28. package/dist/components/Image.js.map +0 -0
  29. package/dist/components/List.d.ts +14 -14
  30. package/dist/components/List.js +83 -83
  31. package/dist/components/List.js.map +0 -0
  32. package/dist/components/Modal/index.d.ts +26 -26
  33. package/dist/components/Modal/index.js +112 -112
  34. package/dist/components/Modal/index.js.map +0 -0
  35. package/dist/components/Modal/styles.d.ts +69 -69
  36. package/dist/components/Modal/styles.js +64 -64
  37. package/dist/components/Modal/styles.js.map +0 -0
  38. package/dist/components/Navigation/Navigation.d.ts +3 -3
  39. package/dist/components/Navigation/Navigation.js +87 -87
  40. package/dist/components/Navigation/Navigation.js.map +0 -0
  41. package/dist/components/Navigation/constants.d.ts +5 -5
  42. package/dist/components/Navigation/constants.js +10 -10
  43. package/dist/components/Navigation/constants.js.map +0 -0
  44. package/dist/components/Navigation/index.d.ts +3 -3
  45. package/dist/components/Navigation/index.js +19 -19
  46. package/dist/components/Navigation/index.js.map +0 -0
  47. package/dist/components/Navigation/types.d.ts +26 -26
  48. package/dist/components/Navigation/types.js +7 -7
  49. package/dist/components/Navigation/types.js.map +0 -0
  50. package/dist/components/Navigation/utils.d.ts +3 -3
  51. package/dist/components/Navigation/utils.js +69 -69
  52. package/dist/components/Navigation/utils.js.map +0 -0
  53. package/dist/components/NewPager/index.d.ts +26 -0
  54. package/dist/components/NewPager/index.js +92 -0
  55. package/dist/components/NewPager/index.js.map +1 -0
  56. package/dist/components/NewPager/styles.d.ts +87 -0
  57. package/dist/components/NewPager/styles.js +70 -0
  58. package/dist/components/NewPager/styles.js.map +1 -0
  59. package/dist/components/Overlay.d.ts +16 -16
  60. package/dist/components/Overlay.js +69 -69
  61. package/dist/components/Overlay.js.map +0 -0
  62. package/dist/components/Pager/index.d.ts +20 -20
  63. package/dist/components/Pager/index.js +167 -167
  64. package/dist/components/Pager/index.js.map +0 -0
  65. package/dist/components/Pager/styles.d.ts +54 -54
  66. package/dist/components/Pager/styles.js +43 -43
  67. package/dist/components/Pager/styles.js.map +0 -0
  68. package/dist/components/RadioInput/index.d.ts +26 -26
  69. package/dist/components/RadioInput/index.js +72 -72
  70. package/dist/components/RadioInput/index.js.map +0 -0
  71. package/dist/components/RadioInput/styles.d.ts +57 -57
  72. package/dist/components/RadioInput/styles.js +44 -44
  73. package/dist/components/RadioInput/styles.js.map +0 -0
  74. package/dist/components/Scroll.d.ts +13 -13
  75. package/dist/components/Scroll.js +81 -81
  76. package/dist/components/Scroll.js.map +0 -0
  77. package/dist/components/Sections.d.ts +11 -11
  78. package/dist/components/Sections.js +80 -80
  79. package/dist/components/Sections.js.map +0 -0
  80. package/dist/components/Select/index.d.ts +5 -5
  81. package/dist/components/Select/index.js +150 -150
  82. package/dist/components/Select/index.js.map +0 -0
  83. package/dist/components/Select/styles.d.ts +9 -9
  84. package/dist/components/Select/styles.js +56 -56
  85. package/dist/components/Select/styles.js.map +0 -0
  86. package/dist/components/Select/types.d.ts +40 -40
  87. package/dist/components/Select/types.js +2 -2
  88. package/dist/components/Select/types.js.map +0 -0
  89. package/dist/components/Slider/Mark.d.ts +3 -3
  90. package/dist/components/Slider/Mark.js +31 -31
  91. package/dist/components/Slider/Mark.js.map +0 -0
  92. package/dist/components/Slider/Thumb.d.ts +7 -7
  93. package/dist/components/Slider/Thumb.js +29 -29
  94. package/dist/components/Slider/Thumb.js.map +0 -0
  95. package/dist/components/Slider/index.d.ts +3 -3
  96. package/dist/components/Slider/index.js +97 -97
  97. package/dist/components/Slider/index.js.map +0 -0
  98. package/dist/components/Slider/types.d.ts +25 -25
  99. package/dist/components/Slider/types.js +2 -2
  100. package/dist/components/Slider/types.js.map +0 -0
  101. package/dist/components/Switch.d.ts +13 -13
  102. package/dist/components/Switch.js +75 -75
  103. package/dist/components/Switch.js.map +0 -0
  104. package/dist/components/Text.d.ts +12 -12
  105. package/dist/components/Text.js +52 -52
  106. package/dist/components/Text.js.map +0 -0
  107. package/dist/components/TextInput.d.ts +183 -183
  108. package/dist/components/TextInput.js +180 -180
  109. package/dist/components/TextInput.js.map +0 -0
  110. package/dist/components/Touchable.d.ts +14 -14
  111. package/dist/components/Touchable.js +75 -75
  112. package/dist/components/Touchable.js.map +0 -0
  113. package/dist/components/View.d.ts +123 -120
  114. package/dist/components/View.js +55 -54
  115. package/dist/components/View.js.map +1 -1
  116. package/dist/components/components.d.ts +26 -25
  117. package/dist/components/components.js +42 -41
  118. package/dist/components/components.js.map +1 -1
  119. package/dist/index.d.ts +5 -5
  120. package/dist/index.js +28 -28
  121. package/dist/index.js.map +0 -0
  122. package/dist/modules/documentPicker.d.ts +3 -3
  123. package/dist/modules/documentPicker.js +11 -11
  124. package/dist/modules/documentPicker.js.map +0 -0
  125. package/dist/modules/fastImage.d.ts +1 -1
  126. package/dist/modules/fastImage.js +9 -9
  127. package/dist/modules/fastImage.js.map +0 -0
  128. package/dist/modules/reactNavigation.d.ts +3 -3
  129. package/dist/modules/reactNavigation.js +10 -10
  130. package/dist/modules/reactNavigation.js.map +0 -0
  131. package/dist/modules/textInputMask.d.ts +12 -12
  132. package/dist/modules/textInputMask.js +7 -7
  133. package/dist/modules/types/fileTypes.d.ts +138 -138
  134. package/dist/modules/types/fileTypes.js +2 -2
  135. package/dist/modules/types/fileTypes.js.map +0 -0
  136. package/dist/modules/types/textInputMask.d.ts +12 -12
  137. package/dist/modules/types/textInputMask.js +2 -2
  138. package/dist/types/utility.d.ts +2 -2
  139. package/dist/types/utility.js +2 -2
  140. package/dist/types/utility.js.map +0 -0
  141. package/dist/utils/OSAlert.d.ts +31 -31
  142. package/dist/utils/OSAlert.js +141 -141
  143. package/dist/utils/OSAlert.js.map +0 -0
  144. package/dist/utils/misc.d.ts +2 -2
  145. package/dist/utils/misc.js +25 -25
  146. package/dist/utils/misc.js.map +0 -0
  147. package/dist/utils/styles.d.ts +1 -1
  148. package/dist/utils/styles.js +12 -12
  149. package/dist/utils/styles.js.map +0 -0
  150. package/package.json +42 -40
  151. package/src/components/ActivityIndicator.tsx +46 -46
  152. package/src/components/Animated.tsx +34 -34
  153. package/src/components/Button.tsx +95 -95
  154. package/src/components/Checkbox/index.tsx +85 -85
  155. package/src/components/Checkbox/styles.ts +76 -76
  156. package/src/components/ContentView.tsx +58 -58
  157. package/src/components/FileInput.tsx +230 -230
  158. package/src/components/Icon.tsx +58 -58
  159. package/src/components/Image.tsx +61 -61
  160. package/src/components/List.tsx +111 -111
  161. package/src/components/Modal/index.tsx +161 -161
  162. package/src/components/Modal/styles.ts +133 -133
  163. package/src/components/Navigation/Navigation.tsx +58 -58
  164. package/src/components/Navigation/constants.ts +8 -8
  165. package/src/components/Navigation/index.tsx +3 -3
  166. package/src/components/Navigation/types.ts +35 -35
  167. package/src/components/Navigation/utils.tsx +59 -59
  168. package/src/components/NewPager/index.tsx +123 -0
  169. package/src/components/NewPager/styles.ts +76 -0
  170. package/src/components/Overlay.tsx +77 -77
  171. package/src/components/Pager/index.tsx +242 -242
  172. package/src/components/Pager/styles.ts +52 -51
  173. package/src/components/RadioInput/index.tsx +101 -101
  174. package/src/components/RadioInput/styles.ts +67 -67
  175. package/src/components/Scroll.tsx +106 -106
  176. package/src/components/Sections.tsx +101 -101
  177. package/src/components/Select/index.tsx +195 -195
  178. package/src/components/Select/styles.ts +81 -81
  179. package/src/components/Select/types.ts +46 -46
  180. package/src/components/Slider/Mark.tsx +46 -46
  181. package/src/components/Slider/Thumb.tsx +29 -29
  182. package/src/components/Slider/index.tsx +123 -123
  183. package/src/components/Slider/types.ts +25 -25
  184. package/src/components/Switch.tsx +81 -81
  185. package/src/components/Text.tsx +30 -30
  186. package/src/components/TextInput.tsx +247 -247
  187. package/src/components/Touchable.tsx +78 -78
  188. package/src/components/View.tsx +48 -46
  189. package/src/components/components.ts +27 -26
  190. package/src/index.ts +6 -6
  191. package/src/modules/documentPicker.ts +7 -7
  192. package/src/modules/fastImage.ts +2 -2
  193. package/src/modules/index.d.ts +496 -496
  194. package/src/modules/reactNavigation.ts +4 -4
  195. package/src/modules/textInputMask.ts +9 -9
  196. package/src/modules/types/documentPicker.d.ts +215 -215
  197. package/src/modules/types/fileTypes.ts +138 -138
  198. package/src/modules/types/textInputMask.ts +13 -13
  199. package/src/types/utility.ts +3 -3
  200. package/src/utils/OSAlert.ts +180 -180
  201. package/src/utils/misc.ts +24 -24
  202. package/src/utils/styles.ts +14 -14
@@ -1,101 +1,101 @@
1
- import * as React from 'react'
2
- import { ReactNode, useRef, ComponentPropsWithoutRef } from 'react'
3
- import { v4 } from 'uuid'
4
-
5
- import { Text } from '../Text'
6
- import { Touchable } from '../Touchable'
7
- import {
8
- ComponentVariants,
9
- StylesOf,
10
- useDefaultComponentStyle,
11
- } from '@codeleap/common'
12
- import { View } from '../View'
13
- import { MobileRadioInputStyles, MobileRadioInputComposition } from './styles'
14
-
15
- export * from './styles'
16
-
17
- type RadioItem<T extends unknown = any> = {
18
- value: T
19
- label: ReactNode
20
- }
21
-
22
- const getRadioStyle = (props) => useDefaultComponentStyle('RadioInput', props)
23
-
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
- }
34
-
35
- export type RadioGroupProps<T> = {
36
- options: RadioItem<T>[]
37
- value: T
38
- onValueChange(value: T): void
39
- label: ReactNode
40
- styles?: StylesOf<MobileRadioInputComposition>
41
- } & ComponentVariants<typeof MobileRadioInputStyles>
42
-
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} debugName={'Change radioButton value'}>
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
- )
64
- }
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
78
-
79
- const radioStyle = getRadioStyle({
80
- responsiveVariants,
81
- variants,
82
- styles,
83
- })
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
- debugName={'RadioButton'}
91
- item={item}
92
- key={idx}
93
- style={radioStyle}
94
- checked={value === item.value}
95
- select={() => onValueChange(item.value)}
96
- />
97
- ))}
98
- </View>
99
- </View>
100
- )
101
- }
1
+ import * as React from 'react'
2
+ import { ReactNode, useRef, ComponentPropsWithoutRef } from 'react'
3
+ import { v4 } from 'uuid'
4
+
5
+ import { Text } from '../Text'
6
+ import { Touchable } from '../Touchable'
7
+ import {
8
+ ComponentVariants,
9
+ StylesOf,
10
+ useDefaultComponentStyle,
11
+ } from '@codeleap/common'
12
+ import { View } from '../View'
13
+ import { MobileRadioInputStyles, MobileRadioInputComposition } from './styles'
14
+
15
+ export * from './styles'
16
+
17
+ type RadioItem<T extends unknown = any> = {
18
+ value: T
19
+ label: ReactNode
20
+ }
21
+
22
+ const getRadioStyle = (props) => useDefaultComponentStyle('RadioInput', props)
23
+
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
+ }
34
+
35
+ export type RadioGroupProps<T> = {
36
+ options: RadioItem<T>[]
37
+ value: T
38
+ onValueChange(value: T): void
39
+ label: ReactNode
40
+ styles?: StylesOf<MobileRadioInputComposition>
41
+ } & ComponentVariants<typeof MobileRadioInputStyles>
42
+
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} debugName={'Change radioButton value'}>
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
+ )
64
+ }
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
78
+
79
+ const radioStyle = getRadioStyle({
80
+ responsiveVariants,
81
+ variants,
82
+ styles,
83
+ })
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
+ debugName={'RadioButton'}
91
+ item={item}
92
+ key={idx}
93
+ style={radioStyle}
94
+ checked={value === item.value}
95
+ select={() => onValueChange(item.value)}
96
+ />
97
+ ))}
98
+ </View>
99
+ </View>
100
+ )
101
+ }
@@ -1,67 +1,67 @@
1
- import {
2
- createDefaultVariantFactory,
3
- RadioInputStyles,
4
- } from '@codeleap/common'
5
- type RadioParts = 'button' | 'itemWrapper' | 'text' | 'buttonMark'
6
-
7
- type RadioGroupParts = 'label' | 'wrapper' | 'list'
8
-
9
- export type MobileRadioInputComposition =
10
- | `${RadioParts}:checked`
11
- | RadioParts
12
- | RadioGroupParts
13
-
14
- const createRadioStyle =
15
- createDefaultVariantFactory<MobileRadioInputComposition>()
16
-
17
- const defaultStyles = RadioInputStyles.default
18
-
19
- export const MobileRadioInputStyles = {
20
- ...RadioInputStyles,
21
- default: createRadioStyle((theme) => {
22
- const style = defaultStyles(theme)
23
-
24
- const itemHeight = theme.typography.baseFontSize * 1.2
25
- const markHeight = itemHeight / 2
26
- const translateX = -(markHeight / 2)
27
- const translateY = -(markHeight / 2)
28
- return {
29
- ...style,
30
- itemWrapper: {
31
- ...style.itemWrapper,
32
- },
33
- button: {
34
- height: itemHeight,
35
- width: itemHeight,
36
- ...theme.border.primary(1),
37
- borderRadius: theme.borderRadius.large,
38
-
39
- position: 'relative',
40
- ...theme.spacing.marginRight(1),
41
- },
42
- buttonMark: {
43
- backgroundColor: theme.colors.primary,
44
- position: 'absolute',
45
- left: '50%',
46
- top: '50%',
47
- height: markHeight,
48
- width: markHeight,
49
-
50
- transform: [{ translateX }, { translateY }],
51
- borderRadius: theme.borderRadius.large,
52
- opacity: 0,
53
- },
54
- 'buttonMark:checked': {
55
- opacity: 1,
56
- },
57
- }
58
- }),
59
- square: createRadioStyle(() => ({
60
- buttonMark: {
61
- borderRadius: 0,
62
- },
63
- button: {
64
- borderRadius: 0,
65
- },
66
- })),
67
- }
1
+ import {
2
+ createDefaultVariantFactory,
3
+ RadioInputStyles,
4
+ } from '@codeleap/common'
5
+ type RadioParts = 'button' | 'itemWrapper' | 'text' | 'buttonMark'
6
+
7
+ type RadioGroupParts = 'label' | 'wrapper' | 'list'
8
+
9
+ export type MobileRadioInputComposition =
10
+ | `${RadioParts}:checked`
11
+ | RadioParts
12
+ | RadioGroupParts
13
+
14
+ const createRadioStyle =
15
+ createDefaultVariantFactory<MobileRadioInputComposition>()
16
+
17
+ const defaultStyles = RadioInputStyles.default
18
+
19
+ export const MobileRadioInputStyles = {
20
+ ...RadioInputStyles,
21
+ default: createRadioStyle((theme) => {
22
+ const style = defaultStyles(theme)
23
+
24
+ const itemHeight = theme.typography.baseFontSize * 1.2
25
+ const markHeight = itemHeight / 2
26
+ const translateX = -(markHeight / 2)
27
+ const translateY = -(markHeight / 2)
28
+ return {
29
+ ...style,
30
+ itemWrapper: {
31
+ ...style.itemWrapper,
32
+ },
33
+ button: {
34
+ height: itemHeight,
35
+ width: itemHeight,
36
+ ...theme.border.primary(1),
37
+ borderRadius: theme.borderRadius.large,
38
+
39
+ position: 'relative',
40
+ ...theme.spacing.marginRight(1),
41
+ },
42
+ buttonMark: {
43
+ backgroundColor: theme.colors.primary,
44
+ position: 'absolute',
45
+ left: '50%',
46
+ top: '50%',
47
+ height: markHeight,
48
+ width: markHeight,
49
+
50
+ transform: [{ translateX }, { translateY }],
51
+ borderRadius: theme.borderRadius.large,
52
+ opacity: 0,
53
+ },
54
+ 'buttonMark:checked': {
55
+ opacity: 1,
56
+ },
57
+ }
58
+ }),
59
+ square: createRadioStyle(() => ({
60
+ buttonMark: {
61
+ borderRadius: 0,
62
+ },
63
+ button: {
64
+ borderRadius: 0,
65
+ },
66
+ })),
67
+ }
@@ -1,106 +1,106 @@
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
-
11
- import {
12
- KeyboardAwareScrollViewProps,
13
- KeyboardAwareScrollView as KBDView,
14
- // @ts-ignore
15
- } from 'react-native-keyboard-aware-scroll-view'
16
- import { RefreshControl, ScrollView, ScrollViewProps, ViewStyle } from 'react-native'
17
- import { ViewProps } from './View'
18
-
19
- export type ScrollProps = KeyboardAwareScrollViewProps &
20
- ViewProps & {
21
- onRefresh?: () => void
22
- refreshTimeout?: number
23
- changeData?: any
24
- keyboardAware?: boolean
25
- refreshing?: boolean
26
- styles?: ViewStyle
27
- }
28
-
29
- const KeyboardAwareScrollView =
30
- KBDView as unknown as React.ForwardRefExoticComponent<
31
- ViewProps & {
32
- refreshControl?: JSX.Element
33
- ref?: ScrollView
34
-
35
- } & ScrollViewProps
36
- >
37
-
38
- export const Scroll = forwardRef<ScrollView, ScrollProps>(
39
- (scrollProps, ref) => {
40
- const {
41
- variants = [],
42
- style,
43
- refreshTimeout = 3000,
44
- children,
45
- changeData,
46
- styles,
47
- keyboardAware = true,
48
- ...props
49
- } = scrollProps
50
- const hasRefresh = !!props.onRefresh
51
- const [refreshingState, setRefreshing] = useState(false)
52
- const refreshingDisplay = props.refreshing !== undefined ? props.refreshing : refreshingState
53
-
54
- const timer = React.useRef(null)
55
- const previousData = usePrevious(changeData)
56
-
57
- const onRefresh = () => {
58
- if (timer.current) {
59
- clearTimeout(timer.current)
60
- }
61
-
62
- setRefreshing(true)
63
-
64
- props.onRefresh()
65
-
66
- timer.current = setTimeout(() => {
67
- setRefreshing(false)
68
- }, refreshTimeout)
69
- }
70
- onUpdate(() => {
71
- if (refreshingDisplay && !deepEqual(previousData, changeData)) {
72
- setRefreshing(false)
73
- if (timer.current) {
74
- clearTimeout(timer.current)
75
- }
76
- }
77
- }, [refreshingDisplay, changeData])
78
- const { Theme } = useCodeleapContext()
79
-
80
- const variantStyles = useDefaultComponentStyle('View', {
81
- variants,
82
- styles: {
83
- wrapper: styles,
84
- },
85
- rootElement: 'wrapper',
86
- })
87
-
88
- const Component = keyboardAware ? KeyboardAwareScrollView : ScrollView
89
-
90
- return (
91
- <Component
92
- style={[Theme.presets.full, style]}
93
- contentContainerStyle={[variantStyles.wrapper]}
94
- ref={ref as unknown as ScrollView}
95
- refreshControl={
96
- hasRefresh && (
97
- <RefreshControl refreshing={refreshingDisplay} onRefresh={onRefresh} />
98
- )
99
- }
100
- {...props}
101
- >
102
- {children}
103
- </Component>
104
- )
105
- },
106
- )
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
+
11
+ import {
12
+ KeyboardAwareScrollViewProps,
13
+ KeyboardAwareScrollView as KBDView,
14
+ // @ts-ignore
15
+ } from 'react-native-keyboard-aware-scroll-view'
16
+ import { RefreshControl, ScrollView, ScrollViewProps, ViewStyle } from 'react-native'
17
+ import { ViewProps } from './View'
18
+
19
+ export type ScrollProps = KeyboardAwareScrollViewProps &
20
+ ViewProps & {
21
+ onRefresh?: () => void
22
+ refreshTimeout?: number
23
+ changeData?: any
24
+ keyboardAware?: boolean
25
+ refreshing?: boolean
26
+ styles?: ViewStyle
27
+ }
28
+
29
+ const KeyboardAwareScrollView =
30
+ KBDView as unknown as React.ForwardRefExoticComponent<
31
+ ViewProps & {
32
+ refreshControl?: JSX.Element
33
+ ref?: ScrollView
34
+
35
+ } & ScrollViewProps
36
+ >
37
+
38
+ export const Scroll = forwardRef<ScrollView, ScrollProps>(
39
+ (scrollProps, ref) => {
40
+ const {
41
+ variants = [],
42
+ style,
43
+ refreshTimeout = 3000,
44
+ children,
45
+ changeData,
46
+ styles,
47
+ keyboardAware = true,
48
+ ...props
49
+ } = scrollProps
50
+ const hasRefresh = !!props.onRefresh
51
+ const [refreshingState, setRefreshing] = useState(false)
52
+ const refreshingDisplay = props.refreshing !== undefined ? props.refreshing : refreshingState
53
+
54
+ const timer = React.useRef(null)
55
+ const previousData = usePrevious(changeData)
56
+
57
+ const onRefresh = () => {
58
+ if (timer.current) {
59
+ clearTimeout(timer.current)
60
+ }
61
+
62
+ setRefreshing(true)
63
+
64
+ props.onRefresh()
65
+
66
+ timer.current = setTimeout(() => {
67
+ setRefreshing(false)
68
+ }, refreshTimeout)
69
+ }
70
+ onUpdate(() => {
71
+ if (refreshingDisplay && !deepEqual(previousData, changeData)) {
72
+ setRefreshing(false)
73
+ if (timer.current) {
74
+ clearTimeout(timer.current)
75
+ }
76
+ }
77
+ }, [refreshingDisplay, changeData])
78
+ const { Theme } = useCodeleapContext()
79
+
80
+ const variantStyles = useDefaultComponentStyle('View', {
81
+ variants,
82
+ styles: {
83
+ wrapper: styles,
84
+ },
85
+ rootElement: 'wrapper',
86
+ })
87
+
88
+ const Component = keyboardAware ? KeyboardAwareScrollView : ScrollView
89
+
90
+ return (
91
+ <Component
92
+ style={[Theme.presets.full, style]}
93
+ contentContainerStyle={[variantStyles.wrapper]}
94
+ ref={ref as unknown as ScrollView}
95
+ refreshControl={
96
+ hasRefresh && (
97
+ <RefreshControl refreshing={refreshingDisplay} onRefresh={onRefresh} />
98
+ )
99
+ }
100
+ {...props}
101
+ >
102
+ {children}
103
+ </Component>
104
+ )
105
+ },
106
+ )