@codeleap/mobile 1.9.11 → 1.9.14

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/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 +15 -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 +77 -77
  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 +48 -48
  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 +30 -27
  21. package/dist/components/FileInput.js +204 -178
  22. package/dist/components/FileInput.js.map +1 -1
  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/Overlay.d.ts +16 -16
  54. package/dist/components/Overlay.js +69 -69
  55. package/dist/components/Overlay.js.map +0 -0
  56. package/dist/components/Pager/index.d.ts +20 -20
  57. package/dist/components/Pager/index.js +167 -167
  58. package/dist/components/Pager/index.js.map +0 -0
  59. package/dist/components/Pager/styles.d.ts +54 -54
  60. package/dist/components/Pager/styles.js +43 -43
  61. package/dist/components/Pager/styles.js.map +0 -0
  62. package/dist/components/RadioInput/index.d.ts +26 -26
  63. package/dist/components/RadioInput/index.js +72 -72
  64. package/dist/components/RadioInput/index.js.map +0 -0
  65. package/dist/components/RadioInput/styles.d.ts +57 -57
  66. package/dist/components/RadioInput/styles.js +44 -44
  67. package/dist/components/RadioInput/styles.js.map +0 -0
  68. package/dist/components/Scroll.d.ts +13 -13
  69. package/dist/components/Scroll.js +81 -81
  70. package/dist/components/Scroll.js.map +0 -0
  71. package/dist/components/Sections.d.ts +11 -11
  72. package/dist/components/Sections.js +80 -80
  73. package/dist/components/Sections.js.map +0 -0
  74. package/dist/components/Select/index.d.ts +5 -5
  75. package/dist/components/Select/index.js +150 -150
  76. package/dist/components/Select/index.js.map +0 -0
  77. package/dist/components/Select/styles.d.ts +9 -9
  78. package/dist/components/Select/styles.js +56 -56
  79. package/dist/components/Select/styles.js.map +0 -0
  80. package/dist/components/Select/types.d.ts +40 -40
  81. package/dist/components/Select/types.js +2 -2
  82. package/dist/components/Select/types.js.map +0 -0
  83. package/dist/components/Slider/Mark.d.ts +3 -3
  84. package/dist/components/Slider/Mark.js +31 -31
  85. package/dist/components/Slider/Mark.js.map +0 -0
  86. package/dist/components/Slider/Thumb.d.ts +7 -7
  87. package/dist/components/Slider/Thumb.js +29 -29
  88. package/dist/components/Slider/Thumb.js.map +0 -0
  89. package/dist/components/Slider/index.d.ts +3 -3
  90. package/dist/components/Slider/index.js +97 -97
  91. package/dist/components/Slider/index.js.map +0 -0
  92. package/dist/components/Slider/types.d.ts +25 -25
  93. package/dist/components/Slider/types.js +2 -2
  94. package/dist/components/Slider/types.js.map +0 -0
  95. package/dist/components/Switch.d.ts +13 -13
  96. package/dist/components/Switch.js +75 -75
  97. package/dist/components/Switch.js.map +0 -0
  98. package/dist/components/Text.d.ts +12 -12
  99. package/dist/components/Text.js +52 -52
  100. package/dist/components/Text.js.map +0 -0
  101. package/dist/components/TextInput.d.ts +54 -183
  102. package/dist/components/TextInput.js +179 -178
  103. package/dist/components/TextInput.js.map +1 -1
  104. package/dist/components/Touchable.d.ts +14 -14
  105. package/dist/components/Touchable.js +61 -61
  106. package/dist/components/Touchable.js.map +0 -0
  107. package/dist/components/View.d.ts +120 -120
  108. package/dist/components/View.js +54 -54
  109. package/dist/components/View.js.map +0 -0
  110. package/dist/components/components.d.ts +25 -25
  111. package/dist/components/components.js +41 -41
  112. package/dist/components/components.js.map +0 -0
  113. package/dist/index.d.ts +5 -5
  114. package/dist/index.js +28 -28
  115. package/dist/index.js.map +0 -0
  116. package/dist/modules/documentPicker.d.ts +3 -3
  117. package/dist/modules/documentPicker.js +11 -11
  118. package/dist/modules/documentPicker.js.map +0 -0
  119. package/dist/modules/fastImage.d.ts +1 -1
  120. package/dist/modules/fastImage.js +9 -9
  121. package/dist/modules/fastImage.js.map +0 -0
  122. package/dist/modules/reactNavigation.d.ts +3 -3
  123. package/dist/modules/reactNavigation.js +10 -10
  124. package/dist/modules/reactNavigation.js.map +0 -0
  125. package/dist/modules/textInputMask.d.ts +2 -12
  126. package/dist/modules/textInputMask.js +7 -7
  127. package/dist/modules/types/fileTypes.d.ts +138 -138
  128. package/dist/modules/types/fileTypes.js +2 -2
  129. package/dist/modules/types/fileTypes.js.map +0 -0
  130. package/dist/modules/types/textInputMask.d.ts +12 -12
  131. package/dist/modules/types/textInputMask.js +2 -2
  132. package/dist/types/utility.d.ts +2 -2
  133. package/dist/types/utility.js +2 -2
  134. package/dist/types/utility.js.map +0 -0
  135. package/dist/utils/OSAlert.d.ts +31 -31
  136. package/dist/utils/OSAlert.js +141 -141
  137. package/dist/utils/OSAlert.js.map +0 -0
  138. package/dist/utils/misc.d.ts +2 -2
  139. package/dist/utils/misc.js +25 -25
  140. package/dist/utils/misc.js.map +0 -0
  141. package/dist/utils/styles.d.ts +1 -1
  142. package/dist/utils/styles.js +12 -12
  143. package/dist/utils/styles.js.map +0 -0
  144. package/package.json +40 -40
  145. package/src/components/ActivityIndicator.tsx +46 -46
  146. package/src/components/Animated.tsx +34 -34
  147. package/src/components/Button.tsx +95 -95
  148. package/src/components/Checkbox/index.tsx +83 -83
  149. package/src/components/Checkbox/styles.ts +72 -72
  150. package/src/components/ContentView.tsx +58 -58
  151. package/src/components/FileInput.tsx +220 -181
  152. package/src/components/Icon.tsx +58 -58
  153. package/src/components/Image.tsx +61 -61
  154. package/src/components/List.tsx +111 -111
  155. package/src/components/Modal/index.tsx +161 -161
  156. package/src/components/Modal/styles.ts +133 -133
  157. package/src/components/Navigation/Navigation.tsx +58 -58
  158. package/src/components/Navigation/constants.ts +8 -8
  159. package/src/components/Navigation/index.tsx +3 -3
  160. package/src/components/Navigation/types.ts +35 -35
  161. package/src/components/Navigation/utils.tsx +59 -59
  162. package/src/components/Overlay.tsx +77 -77
  163. package/src/components/Pager/index.tsx +242 -242
  164. package/src/components/Pager/styles.ts +51 -51
  165. package/src/components/RadioInput/index.tsx +101 -101
  166. package/src/components/RadioInput/styles.ts +67 -67
  167. package/src/components/Scroll.tsx +106 -106
  168. package/src/components/Sections.tsx +101 -101
  169. package/src/components/Select/index.tsx +195 -195
  170. package/src/components/Select/styles.ts +81 -81
  171. package/src/components/Select/types.ts +46 -46
  172. package/src/components/Slider/Mark.tsx +46 -46
  173. package/src/components/Slider/Thumb.tsx +29 -29
  174. package/src/components/Slider/index.tsx +123 -123
  175. package/src/components/Slider/types.ts +25 -25
  176. package/src/components/Switch.tsx +81 -81
  177. package/src/components/Text.tsx +30 -30
  178. package/src/components/TextInput.tsx +245 -247
  179. package/src/components/Touchable.tsx +64 -64
  180. package/src/components/View.tsx +46 -46
  181. package/src/components/components.ts +26 -26
  182. package/src/index.ts +6 -6
  183. package/src/modules/documentPicker.ts +7 -7
  184. package/src/modules/fastImage.ts +2 -2
  185. package/src/modules/index.d.ts +496 -496
  186. package/src/modules/reactNavigation.ts +4 -4
  187. package/src/modules/textInputMask.ts +9 -9
  188. package/src/modules/types/documentPicker.d.ts +215 -215
  189. package/src/modules/types/fileTypes.ts +138 -138
  190. package/src/modules/types/textInputMask.ts +13 -12
  191. package/src/types/utility.ts +3 -3
  192. package/src/utils/OSAlert.ts +180 -180
  193. package/src/utils/misc.ts +24 -24
  194. package/src/utils/styles.ts +14 -14
@@ -1,181 +1,220 @@
1
- import React, { forwardRef, useImperativeHandle } from 'react'
2
- import { DocumentPicker, ImageCropPicker } from '../modules/documentPicker'
3
- import {
4
- ComponentVariants,
5
- FileInputComposition,
6
- FileInputStyles,
7
- IconPlaceholder,
8
- MobileInputFile,
9
- parseFilePathData,
10
- useDefaultComponentStyle,
11
- useCodeleapContext,
12
- } from '@codeleap/common'
13
- import { StylesOf } from '../types/utility'
14
- import { Button, ButtonProps } from './Button'
15
- import { View } from './View'
16
- import { InputLabel } from './TextInput'
17
- import OSAlert from '../utils/OSAlert'
18
- import { Options } from 'react-native-image-crop-picker'
19
- import { DocumentPickerOptions } from '../modules/types/documentPicker'
20
-
21
- export type FileInputRef = {
22
- openFilePicker: () => void
23
- }
24
-
25
- export type FileInputProps = {
26
- label?: string
27
- iconName?: IconPlaceholder
28
- styles?: StylesOf<FileInputComposition>
29
- mode: 'hidden' | 'button'
30
- variants?: ComponentVariants<typeof FileInputStyles>['variants']
31
- onFileSelect(files: MobileInputFile[]): void
32
- options?: DocumentPickerOptions<any>
33
- buttonProps?: ButtonProps
34
- ref?: FileInputRef
35
- placeholder?: string
36
- type?: 'image' | 'anyFile'
37
- alertProps?: Parameters<typeof OSAlert.ask>[0]
38
- pickerOptions?: Partial<Options>
39
- required?: boolean
40
- }
41
-
42
- const pickerDefaults = {
43
- width: 300,
44
- height: 400,
45
- cropping: true,
46
- }
47
-
48
- function parsePickerData(data:any):MobileInputFile {
49
-
50
- const filePathData = parseFilePathData(data.path)
51
- const d:MobileInputFile['file'] = {
52
- name: filePathData.name,
53
- size: data.size,
54
- type: data.mime,
55
- uri: data.path,
56
- fileCopyUri: data.path,
57
- }
58
-
59
- return {
60
- file: d,
61
- preview: data.path,
62
- }
63
- }
64
-
65
- export const FileInput = forwardRef<
66
- FileInputRef,
67
- FileInputProps
68
- >((fileInputProps, ref) => {
69
- const {
70
- mode = 'hidden',
71
- onFileSelect,
72
- iconName,
73
- styles,
74
- label,
75
- variants,
76
- options,
77
- type = 'image',
78
- alertProps,
79
- placeholder = 'Select a file',
80
- pickerOptions,
81
- required,
82
- buttonProps,
83
- } = fileInputProps
84
-
85
- const [file, setFile] = React.useState(null)
86
-
87
- const { logger } = useCodeleapContext()
88
-
89
- async function openFileSystem() {
90
- try {
91
- let files = await DocumentPicker.pick(options)
92
- if (!Array.isArray(files)) {
93
- files = [files]
94
- }
95
- setFile(files)
96
- onFileSelect(files.map((file) => ({ preview: file.uri, file })))
97
- } catch (err) {
98
- if (DocumentPicker.isCancel(err)) {
99
- logger.log('User cancelled the picker.', null, 'Component')
100
- } else {
101
- throw err
102
- }
103
- }
104
- }
105
-
106
- const mergedOptions = {
107
- ...pickerDefaults,
108
- ...pickerOptions,
109
- } as Options
110
-
111
- const handlePickerResolution = data => {
112
- onFileSelect(mergedOptions.multiple ? data.map(parsePickerData) : [
113
- parsePickerData(data),
114
- ])
115
- }
116
-
117
- const openFilePicker = async () => {
118
-
119
- if (type === 'image') {
120
- OSAlert.ask({
121
- title: 'Change Image',
122
- body: 'Do you want to take a new picture or select an existing one?',
123
- ...alertProps,
124
- options: [
125
- {
126
- text: alertProps?.options?.[0]?.text || 'Camera',
127
- onPress: () => {
128
- ImageCropPicker.openCamera(mergedOptions).then(handlePickerResolution)
129
- },
130
- ...alertProps?.options[1],
131
- },
132
- {
133
- text: 'Library',
134
- onPress: () => {
135
- ImageCropPicker.openPicker(mergedOptions).then(handlePickerResolution)
136
- },
137
- ...alertProps?.options[2],
138
- },
139
- {
140
- text: 'Cancel',
141
- style: 'cancel',
142
- onPress: () => {},
143
- ...alertProps?.options[0],
144
- },
145
-
146
- ],
147
- })
148
- } else {
149
- openFileSystem()
150
- }
151
-
152
- }
153
-
154
- const variantStyles = useDefaultComponentStyle('FileInput', {
155
- styles,
156
- variants,
157
- })
158
-
159
- useImperativeHandle(ref, () => ({
160
- openFilePicker,
161
- }))
162
-
163
- const filenames = file ? file.map((f) => f.name) : ''
164
- if (mode === 'button') {
165
- return (
166
- <View style={variantStyles.wrapper}>
167
- <InputLabel label={label} style={variantStyles.label} required={required}/>
168
- <Button
169
- onPress={() => openFilePicker()}
170
- text={filenames || placeholder}
171
- debugName={'Open file picker'}
172
- icon={iconName || ('fileInputButton' as IconPlaceholder)}
173
- variants={filenames ? '' : 'icon'}
174
- {...buttonProps}
175
- />
176
- </View>
177
- )
178
- }
179
-
180
- return null
181
- })
1
+ import React, { forwardRef, useImperativeHandle } from 'react'
2
+ import { DocumentPicker, ImageCropPicker } from '../modules/documentPicker'
3
+ import {
4
+ ComponentVariants,
5
+ FileInputComposition,
6
+ FileInputStyles,
7
+ IconPlaceholder,
8
+ MobileInputFile,
9
+ parseFilePathData,
10
+ useDefaultComponentStyle,
11
+ useCodeleapContext,
12
+ } from '@codeleap/common'
13
+ import { StylesOf } from '../types/utility'
14
+ import { Button, ButtonProps } from './Button'
15
+ import { View } from './View'
16
+ import { InputLabel } from './TextInput'
17
+ import OSAlert from '../utils/OSAlert'
18
+ import { Options } from 'react-native-image-crop-picker'
19
+ import { DocumentPickerOptions } from '../modules/types/documentPicker'
20
+
21
+ export type FileInputRef = {
22
+ openFilePicker: () => void
23
+ }
24
+
25
+ export type FileInputProps = {
26
+ label?: string
27
+ iconName?: IconPlaceholder
28
+ styles?: StylesOf<FileInputComposition>
29
+ mode: 'hidden' | 'button'
30
+ variants?: ComponentVariants<typeof FileInputStyles>['variants']
31
+ onFileSelect(files: MobileInputFile[]): void
32
+ options?: DocumentPickerOptions<any>
33
+ buttonProps?: ButtonProps
34
+ ref?: FileInputRef
35
+ placeholder?: string
36
+ type?: 'image' | 'anyFile'
37
+ alertProps?: Parameters<typeof OSAlert.ask>[0]
38
+ pickerOptions?: Partial<Options>
39
+ required?: boolean
40
+ onOpenCamera?: (resolve: (() => void)) => Promise<void>
41
+ onOpenGallery?: (resolve: (() => void)) => Promise<void>
42
+ onError?: (error: any) => void
43
+ }
44
+
45
+ const pickerDefaults = {
46
+ width: 300,
47
+ height: 400,
48
+ cropping: true,
49
+ }
50
+
51
+ function parsePickerData(data:any):MobileInputFile {
52
+
53
+ const filePathData = parseFilePathData(data.path)
54
+ const d:MobileInputFile['file'] = {
55
+ name: filePathData.name,
56
+ size: data.size,
57
+ type: data.mime,
58
+ uri: data.path,
59
+ fileCopyUri: data.path,
60
+ }
61
+
62
+ return {
63
+ file: d,
64
+ preview: data.path,
65
+ }
66
+ }
67
+
68
+ const emptyPromise = async () => {
69
+ return
70
+ }
71
+
72
+ export const FileInput = forwardRef<
73
+ FileInputRef,
74
+ FileInputProps
75
+ >((fileInputProps, ref) => {
76
+ const {
77
+ mode = 'hidden',
78
+ onFileSelect,
79
+ iconName,
80
+ styles,
81
+ label,
82
+ variants,
83
+ options,
84
+ type = 'image',
85
+ alertProps,
86
+ placeholder = 'Select a file',
87
+ pickerOptions,
88
+ required,
89
+ buttonProps,
90
+ onOpenCamera = emptyPromise,
91
+ onOpenGallery = emptyPromise,
92
+ onError,
93
+ } = fileInputProps
94
+
95
+ const [file, setFile] = React.useState(null)
96
+
97
+ const { logger } = useCodeleapContext()
98
+
99
+ async function openFileSystem() {
100
+ try {
101
+ let files = await DocumentPicker.pick(options)
102
+ if (!Array.isArray(files)) {
103
+ files = [files]
104
+ }
105
+ setFile(files)
106
+ onFileSelect(files.map((file) => ({ preview: file.uri, file })))
107
+ } catch (err) {
108
+ handleError(err)
109
+ }
110
+ }
111
+
112
+ function handleError(err) {
113
+ const warn = DocumentPicker.isCancel(err) || String(err).includes('Error: User cancelled')
114
+ if (warn) {
115
+ // NOTE yeah, it should not be both of course but just logger.* isn't showing for some reason
116
+ logger.warn(err)
117
+ console.warn(err)
118
+ } else {
119
+ // NOTE yeah, it should not be both of course but just logger.* isn't showing for some reason
120
+ logger.error(err)
121
+ console.error(err)
122
+ if (onError) {
123
+ onError(err)
124
+ } else {
125
+ OSAlert.error({
126
+ title: 'Error',
127
+ body: err.message,
128
+ })
129
+ }
130
+ }
131
+ }
132
+
133
+ const mergedOptions = {
134
+ ...pickerDefaults,
135
+ ...pickerOptions,
136
+ } as Options
137
+
138
+ const handlePickerResolution = data => {
139
+ onFileSelect(mergedOptions.multiple ? data.map(parsePickerData) : [
140
+ parsePickerData(data),
141
+ ])
142
+ }
143
+ const onPress = (open?: 'camera' | 'library') => {
144
+ const call = open === 'camera' ? 'openCamera' : 'openPicker'
145
+ ImageCropPicker[call](mergedOptions).then(handlePickerResolution)
146
+ }
147
+ const openFilePicker = async () => {
148
+ if (type === 'image') {
149
+ OSAlert.ask({
150
+ title: 'Change Image',
151
+ body: 'Do you want to take a new picture or select an existing one?',
152
+ ...alertProps,
153
+ options: [
154
+ {
155
+ text: alertProps?.options?.[0]?.text || 'Camera',
156
+ onPress: () => {
157
+ if (onOpenCamera) {
158
+ onOpenCamera(() => onPress('camera'))
159
+ } else {
160
+ onPress('camera')
161
+ }
162
+
163
+ },
164
+ ...alertProps?.options[1],
165
+ },
166
+ {
167
+ text: 'Library',
168
+ onPress: () => {
169
+ if (onOpenGallery) {
170
+ onOpenGallery(() => onPress('library'))
171
+ } else {
172
+ onPress('library')
173
+ }
174
+
175
+ },
176
+ ...alertProps?.options[2],
177
+ },
178
+ {
179
+ text: 'Cancel',
180
+ style: 'cancel',
181
+ onPress: () => {},
182
+ ...alertProps?.options[0],
183
+ },
184
+
185
+ ],
186
+ })
187
+ } else {
188
+ openFileSystem()
189
+ }
190
+
191
+ }
192
+
193
+ const variantStyles = useDefaultComponentStyle('FileInput', {
194
+ styles,
195
+ variants,
196
+ })
197
+
198
+ useImperativeHandle(ref, () => ({
199
+ openFilePicker,
200
+ }))
201
+
202
+ const filenames = file ? file.map((f) => f.name) : ''
203
+ if (mode === 'button') {
204
+ return (
205
+ <View style={variantStyles.wrapper}>
206
+ <InputLabel label={label} style={variantStyles.label} required={required}/>
207
+ <Button
208
+ onPress={() => openFilePicker()}
209
+ text={filenames || placeholder}
210
+ debugName={'Open file picker'}
211
+ icon={iconName || ('fileInputButton' as IconPlaceholder)}
212
+ variants={filenames ? '' : 'icon'}
213
+ {...buttonProps}
214
+ />
215
+ </View>
216
+ )
217
+ }
218
+
219
+ return null
220
+ })
@@ -1,58 +1,58 @@
1
- import * as React from 'react'
2
- import {
3
- ComponentVariants,
4
- IconPlaceholder,
5
- IconStyles,
6
- useDefaultComponentStyle,
7
- useCodeleapContext,
8
- arePropsEqual,
9
- } from '@codeleap/common'
10
- import { StyleSheet } from 'react-native'
11
- import { View } from './View'
12
-
13
- export type IconProps = {
14
- name: IconPlaceholder
15
- style?: any
16
- color?: string
17
- variants?: ComponentVariants<typeof IconStyles>['variants']
18
- renderEmptySpace?: boolean
19
- size?: number
20
- }
21
-
22
- export const IconComponent: React.FC<IconProps> = ({ name, style, variants, renderEmptySpace, ...otherProps }) => {
23
- const { Theme, logger } = useCodeleapContext()
24
-
25
- const variantStyles = useDefaultComponentStyle('Icon', {
26
- variants,
27
- transform: StyleSheet.flatten,
28
- styles: {
29
- icon: style,
30
- },
31
- rootElement: 'icon',
32
- })
33
-
34
- if (!name) {
35
- return renderEmptySpace ? <View style={variantStyles.icon}/> : null
36
- }
37
-
38
- const Component = Theme?.icons?.[name]
39
-
40
- if (!Component) {
41
- logger.warn(
42
- `Icon: No icon found in theme for name "${name}".`,
43
- { props: { style, name, variants, variantStyles }},
44
- 'Component',
45
- )
46
- return null
47
- }
48
- return <Component {...otherProps} style={variantStyles.icon} />
49
- }
50
-
51
- function areEqual(prevProps, nextProps) {
52
- const check = ['name', 'style', 'variants', 'renderEmptySpace']
53
- const res = arePropsEqual(prevProps, nextProps, { check })
54
- return res
55
- }
56
-
57
- export const Icon = React.memo(IconComponent, areEqual)
58
-
1
+ import * as React from 'react'
2
+ import {
3
+ ComponentVariants,
4
+ IconPlaceholder,
5
+ IconStyles,
6
+ useDefaultComponentStyle,
7
+ useCodeleapContext,
8
+ arePropsEqual,
9
+ } from '@codeleap/common'
10
+ import { StyleSheet } from 'react-native'
11
+ import { View } from './View'
12
+
13
+ export type IconProps = {
14
+ name: IconPlaceholder
15
+ style?: any
16
+ color?: string
17
+ variants?: ComponentVariants<typeof IconStyles>['variants']
18
+ renderEmptySpace?: boolean
19
+ size?: number
20
+ }
21
+
22
+ export const IconComponent: React.FC<IconProps> = ({ name, style, variants, renderEmptySpace, ...otherProps }) => {
23
+ const { Theme, logger } = useCodeleapContext()
24
+
25
+ const variantStyles = useDefaultComponentStyle('Icon', {
26
+ variants,
27
+ transform: StyleSheet.flatten,
28
+ styles: {
29
+ icon: style,
30
+ },
31
+ rootElement: 'icon',
32
+ })
33
+
34
+ if (!name) {
35
+ return renderEmptySpace ? <View style={variantStyles.icon}/> : null
36
+ }
37
+
38
+ const Component = Theme?.icons?.[name]
39
+
40
+ if (!Component) {
41
+ logger.warn(
42
+ `Icon: No icon found in theme for name "${name}".`,
43
+ { props: { style, name, variants, variantStyles }},
44
+ 'Component',
45
+ )
46
+ return null
47
+ }
48
+ return <Component {...otherProps} style={variantStyles.icon} />
49
+ }
50
+
51
+ function areEqual(prevProps, nextProps) {
52
+ const check = ['name', 'style', 'variants', 'renderEmptySpace']
53
+ const res = arePropsEqual(prevProps, nextProps, { check })
54
+ return res
55
+ }
56
+
57
+ export const Icon = React.memo(IconComponent, areEqual)
58
+
@@ -1,61 +1,61 @@
1
- import * as React from 'react'
2
- import {
3
- ComponentVariants,
4
- ImageStyles,
5
- MobileInputFile,
6
- useDefaultComponentStyle,
7
- arePropsEqual,
8
- } from '@codeleap/common'
9
- import { ComponentPropsWithoutRef } from 'react'
10
- import {
11
- Image as NativeImage,
12
- ImageStyle,
13
- StyleProp,
14
- TextStyle,
15
- ViewStyle,
16
- } from 'react-native'
17
- import { FastImage } from '../modules/fastImage'
18
-
19
- type NativeImageProps = ComponentPropsWithoutRef<typeof NativeImage>
20
- export type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
21
- variants?: ComponentVariants<typeof ImageStyles>['variants']
22
- fast?: boolean
23
- style?: StyleProp<ImageStyle | TextStyle | ViewStyle>
24
- source:
25
- | (NativeImageProps['source'] & {
26
- priority?: keyof typeof FastImage.priority
27
- })
28
- | MobileInputFile
29
- | string
30
- resizeMode?: keyof typeof FastImage.resizeMode
31
- }
32
-
33
- export const ImageComponent: React.FC<ImageProps> = (props) => {
34
- const { variants, style, fast = true, resizeMode = 'contain', ...imageProps } = props
35
-
36
- const variantStyles = useDefaultComponentStyle('Image', { variants })
37
-
38
- const styles = [variantStyles.wrapper, style]
39
-
40
- if (fast) {
41
- return (
42
- <FastImage
43
- style={styles}
44
- // @ts-ignore
45
- tintColor={style?.tintColor}
46
- resizeMode={FastImage.resizeMode[resizeMode || 'contain']}
47
- {...imageProps}
48
- />
49
- )
50
- }
51
- return <NativeImage style={styles} resizeMode={resizeMode} {...(imageProps as any)} />
52
- }
53
-
54
- function areEqual(prevProps, nextProps) {
55
- const check = ['source', 'style', 'variants', 'resizeMode', 'fast']
56
- const res = arePropsEqual(prevProps, nextProps, { check })
57
- return res
58
- }
59
-
60
- export const Image = React.memo(ImageComponent, areEqual)
61
-
1
+ import * as React from 'react'
2
+ import {
3
+ ComponentVariants,
4
+ ImageStyles,
5
+ MobileInputFile,
6
+ useDefaultComponentStyle,
7
+ arePropsEqual,
8
+ } from '@codeleap/common'
9
+ import { ComponentPropsWithoutRef } from 'react'
10
+ import {
11
+ Image as NativeImage,
12
+ ImageStyle,
13
+ StyleProp,
14
+ TextStyle,
15
+ ViewStyle,
16
+ } from 'react-native'
17
+ import { FastImage } from '../modules/fastImage'
18
+
19
+ type NativeImageProps = ComponentPropsWithoutRef<typeof NativeImage>
20
+ export type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
21
+ variants?: ComponentVariants<typeof ImageStyles>['variants']
22
+ fast?: boolean
23
+ style?: StyleProp<ImageStyle | TextStyle | ViewStyle>
24
+ source:
25
+ | (NativeImageProps['source'] & {
26
+ priority?: keyof typeof FastImage.priority
27
+ })
28
+ | MobileInputFile
29
+ | string
30
+ resizeMode?: keyof typeof FastImage.resizeMode
31
+ }
32
+
33
+ export const ImageComponent: React.FC<ImageProps> = (props) => {
34
+ const { variants, style, fast = true, resizeMode = 'contain', ...imageProps } = props
35
+
36
+ const variantStyles = useDefaultComponentStyle('Image', { variants })
37
+
38
+ const styles = [variantStyles.wrapper, style]
39
+
40
+ if (fast) {
41
+ return (
42
+ <FastImage
43
+ style={styles}
44
+ // @ts-ignore
45
+ tintColor={style?.tintColor}
46
+ resizeMode={FastImage.resizeMode[resizeMode || 'contain']}
47
+ {...imageProps}
48
+ />
49
+ )
50
+ }
51
+ return <NativeImage style={styles} resizeMode={resizeMode} {...(imageProps as any)} />
52
+ }
53
+
54
+ function areEqual(prevProps, nextProps) {
55
+ const check = ['source', 'style', 'variants', 'resizeMode', 'fast']
56
+ const res = arePropsEqual(prevProps, nextProps, { check })
57
+ return res
58
+ }
59
+
60
+ export const Image = React.memo(ImageComponent, areEqual)
61
+