@codeleap/mobile 2.3.5 → 2.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/package.json +3 -2
  2. package/src/components/ActionIcon/index.tsx +0 -32
  3. package/src/components/ActionIcon/styles.ts +0 -97
  4. package/src/components/ActivityIndicator/index.tsx +0 -50
  5. package/src/components/ActivityIndicator/styles.ts +0 -68
  6. package/src/components/Animated.tsx +0 -34
  7. package/src/components/AutoComplete/index.tsx +0 -163
  8. package/src/components/AutoComplete/styles.ts +0 -44
  9. package/src/components/Backdrop/index.tsx +0 -48
  10. package/src/components/Backdrop/styles.ts +0 -33
  11. package/src/components/Button/index.tsx +0 -155
  12. package/src/components/Button/styles.ts +0 -129
  13. package/src/components/Calendar/index.tsx +0 -65
  14. package/src/components/Calendar/style.ts +0 -35
  15. package/src/components/Calendar/types.ts +0 -102
  16. package/src/components/Checkbox/index.tsx +0 -91
  17. package/src/components/Checkbox/styles.ts +0 -81
  18. package/src/components/ContentView/index.tsx +0 -63
  19. package/src/components/ContentView/styles.ts +0 -24
  20. package/src/components/Drawer/index.tsx +0 -33
  21. package/src/components/Drawer/styles.ts +0 -43
  22. package/src/components/EmptyPlaceholder/index.tsx +0 -88
  23. package/src/components/EmptyPlaceholder/styles.ts +0 -58
  24. package/src/components/FileInput/index.tsx +0 -181
  25. package/src/components/FileInput/styles.ts +0 -15
  26. package/src/components/Grid/index.tsx +0 -117
  27. package/src/components/Grid/styles.ts +0 -11
  28. package/src/components/Icon/index.tsx +0 -69
  29. package/src/components/Icon/styles.ts +0 -57
  30. package/src/components/Image/index.tsx +0 -91
  31. package/src/components/Image/styles.ts +0 -20
  32. package/src/components/ImageView/Spotlight.tsx +0 -157
  33. package/src/components/ImageView/component.tsx +0 -38
  34. package/src/components/ImageView/index.ts +0 -2
  35. package/src/components/InputLabel/index.tsx +0 -38
  36. package/src/components/InputLabel/styles.ts +0 -19
  37. package/src/components/List/PaginationIndicator.tsx +0 -71
  38. package/src/components/List/index.tsx +0 -114
  39. package/src/components/List/styles.ts +0 -19
  40. package/src/components/Modal/index.tsx +0 -218
  41. package/src/components/Modal/styles.ts +0 -153
  42. package/src/components/MultiSelect/index.tsx +0 -138
  43. package/src/components/MultiSelect/styles.ts +0 -18
  44. package/src/components/MultiSelect/types.ts +0 -42
  45. package/src/components/Navigation/Navigation.tsx +0 -54
  46. package/src/components/Navigation/constants.ts +0 -8
  47. package/src/components/Navigation/index.tsx +0 -3
  48. package/src/components/Navigation/types.ts +0 -35
  49. package/src/components/Navigation/utils.tsx +0 -57
  50. package/src/components/Pager/index.tsx +0 -121
  51. package/src/components/Pager/styles.ts +0 -81
  52. package/src/components/RadioInput/index.tsx +0 -106
  53. package/src/components/RadioInput/styles.ts +0 -67
  54. package/src/components/Scroll/index.tsx +0 -124
  55. package/src/components/Scroll/styles.ts +0 -18
  56. package/src/components/Sections/index.tsx +0 -91
  57. package/src/components/SegmentedControl/index.tsx +0 -204
  58. package/src/components/SegmentedControl/styles.ts +0 -89
  59. package/src/components/Select/index.tsx +0 -167
  60. package/src/components/Select/styles.ts +0 -62
  61. package/src/components/Select/types.ts +0 -43
  62. package/src/components/Slider/Mark.tsx +0 -46
  63. package/src/components/Slider/Thumb.tsx +0 -29
  64. package/src/components/Slider/index.tsx +0 -130
  65. package/src/components/Slider/styles.ts +0 -76
  66. package/src/components/Slider/types.ts +0 -30
  67. package/src/components/Switch/index.tsx +0 -91
  68. package/src/components/Switch/styles.ts +0 -38
  69. package/src/components/Text/index.tsx +0 -123
  70. package/src/components/Text/styles.ts +0 -50
  71. package/src/components/TextInput/index.tsx +0 -319
  72. package/src/components/TextInput/styles.ts +0 -127
  73. package/src/components/Touchable/index.tsx +0 -174
  74. package/src/components/Touchable/styles.ts +0 -28
  75. package/src/components/View/index.tsx +0 -103
  76. package/src/components/View/styles.ts +0 -24
  77. package/src/components/components.ts +0 -42
  78. package/src/components/defaultStyles.ts +0 -62
  79. package/src/components/legacy/Modal/index.tsx +0 -163
  80. package/src/components/legacy/Modal/styles.ts +0 -125
  81. package/src/components/legacy/Pager/index.tsx +0 -242
  82. package/src/components/legacy/Pager/styles.ts +0 -51
  83. package/src/components/legacy/index.ts +0 -2
  84. package/src/modules/documentPicker.ts +0 -7
  85. package/src/modules/fastImage.ts +0 -2
  86. package/src/modules/imageCropPicker.d.ts +0 -497
  87. package/src/modules/index.d.ts +0 -682
  88. package/src/modules/reactNavigation.ts +0 -15
  89. package/src/modules/textInputMask.ts +0 -11
  90. package/src/modules/types/documentPicker.d.ts +0 -215
  91. package/src/modules/types/fileTypes.ts +0 -138
  92. package/src/modules/types/textInputMask.ts +0 -9
  93. package/src/types/index.ts +0 -1
  94. package/src/types/utility.ts +0 -9
  95. package/src/utils/KeyboardAware/context.tsx +0 -75
  96. package/src/utils/KeyboardAware/index.ts +0 -17
  97. package/src/utils/KeyboardAware/keyboardHooks.ts +0 -124
  98. package/src/utils/KeyboardAware/lib/KeyboardAwareFlatList.ts +0 -4
  99. package/src/utils/KeyboardAware/lib/KeyboardAwareHOC.tsx +0 -618
  100. package/src/utils/KeyboardAware/lib/KeyboardAwareInterface.ts +0 -13
  101. package/src/utils/KeyboardAware/lib/KeyboardAwareScrollView.ts +0 -6
  102. package/src/utils/KeyboardAware/lib/KeyboardAwareSectionList.ts +0 -6
  103. package/src/utils/KeyboardAware/types.ts +0 -159
  104. package/src/utils/ModalManager/components.tsx +0 -112
  105. package/src/utils/ModalManager/context.tsx +0 -260
  106. package/src/utils/ModalManager/index.ts +0 -16
  107. package/src/utils/OSAlert.ts +0 -180
  108. package/src/utils/PermissionManager/context.tsx +0 -302
  109. package/src/utils/PermissionManager/index.ts +0 -20
  110. package/src/utils/PermissionManager/types.ts +0 -24
  111. package/src/utils/hooks.ts +0 -163
  112. package/src/utils/index.ts +0 -11
  113. package/src/utils/input.ts +0 -51
  114. package/src/utils/misc.ts +0 -83
  115. package/src/utils/notifications.ts +0 -206
  116. package/src/utils/theme.ts +0 -58
@@ -1,63 +0,0 @@
1
- import React from 'react'
2
- import {
3
-
4
- ComponentVariants,
5
- useDefaultComponentStyle,
6
-
7
- } from '@codeleap/common'
8
- import {
9
- ContentViewStyles,
10
- } from './styles'
11
- import { ViewProps, View, ViewComposition } from '../View'
12
- import { Text } from '../Text'
13
- import { StylesOf } from '../../types'
14
- import { ActivityIndicator } from '../ActivityIndicator'
15
- import { StyleSheet } from 'react-native'
16
-
17
- export * from './styles'
18
-
19
- export type ContentViewProps = Omit<
20
- ViewProps,
21
- 'variants' | 'responsiveVariants'
22
- > & {
23
- message?: string
24
- loading?: boolean
25
- styles?: StylesOf<ViewComposition>
26
- } & ComponentVariants<typeof ContentViewStyles>
27
-
28
- const WrapContent = ({ children, ...props }) => (
29
- <View {...props}>{children}</View>
30
- )
31
-
32
- export const ContentView: React.FC<ContentViewProps> = (rawProps) => {
33
- const { children, message, loading, variants, styles, ...props } =
34
- rawProps
35
-
36
- const variantStyle = useDefaultComponentStyle('ContentView', {
37
- variants,
38
- transform: StyleSheet.flatten,
39
- styles,
40
- })
41
-
42
- if (loading) {
43
- return (
44
- <WrapContent {...props} style={variantStyle.wrapper}>
45
- <ActivityIndicator styles={{ wrapper: variantStyle.loader }} />
46
- </WrapContent>
47
- )
48
- }
49
- const hasChildren = Object.keys(children || {}).length > 0
50
- if (hasChildren) {
51
- return (
52
- <WrapContent {...props} style={variantStyle.wrapper}>
53
- {children}
54
- </WrapContent>
55
- )
56
- }
57
-
58
- return (
59
- <WrapContent {...props} style={styles}>
60
- <Text text={message} />
61
- </WrapContent>
62
- )
63
- }
@@ -1,24 +0,0 @@
1
- import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
-
3
- export type ContentViewComposition = 'placeholder' | 'wrapper' | 'loader'
4
-
5
- const createContentViewStyle =
6
- createDefaultVariantFactory<ContentViewComposition>()
7
-
8
- const presets = includePresets((styles) => createContentViewStyle(() => ({ wrapper: styles })),
9
- )
10
-
11
- export const ContentViewStyles = {
12
- ...presets,
13
- default: createContentViewStyle((theme) => ({
14
- wrapper: {
15
- display: 'flex',
16
- ...theme.presets.column,
17
- },
18
- loader: {
19
- alignSelf: 'center',
20
- height: theme.values.width * 0.15,
21
- width: theme.values.width * 0.15,
22
- },
23
- })),
24
- }
@@ -1,33 +0,0 @@
1
- import * as React from 'react'
2
-
3
- import { ComponentVariants, useDefaultComponentStyle } from '@codeleap/common'
4
- import { StyleSheet } from 'react-native'
5
- import Modal, { ModalProps } from '../Modal'
6
- import { DrawerStyles } from './styles'
7
- export * from './styles'
8
- export type DrawerProps = Omit<ModalProps, 'variants'> & ComponentVariants<typeof DrawerStyles>
9
-
10
- export const Drawer:React.FC<DrawerProps> = (props) => {
11
- const { variants, styles, scrollProps, ...modalProps } = props
12
-
13
- const variantStyles = useDefaultComponentStyle('u:Drawer', {
14
- variants,
15
- styles,
16
- transform: StyleSheet.flatten,
17
- })
18
-
19
- return <Modal
20
- styles={variantStyles}
21
- scroll={false}
22
-
23
- {...modalProps}
24
- scrollProps={{
25
- ...scrollProps,
26
- keyboardAware: {
27
-
28
- enabled: false,
29
- ...scrollProps?.keyboardAware,
30
- },
31
- }}
32
- />
33
- }
@@ -1,43 +0,0 @@
1
- import { createDefaultVariantFactory } from '@codeleap/common'
2
- import { ModalComposition, ModalStyles } from '../Modal'
3
-
4
- export type DrawerComposition = ModalComposition
5
- const createDrawerStyle = createDefaultVariantFactory<DrawerComposition>()
6
-
7
- export const DrawerStyles = {
8
- ...ModalStyles,
9
- default: createDrawerStyle((theme) => {
10
- const defaultStyle = ModalStyles.default(theme)
11
-
12
- return {
13
- ...defaultStyle,
14
- box: {
15
- width: '100%',
16
- paddingBottom: 0,
17
- paddingTop: 0,
18
- borderBottomLeftRadius: 0,
19
- borderBottomRightRadius: 0,
20
- maxHeight: '100%',
21
-
22
- },
23
- innerWrapper: {
24
- ...theme.presets.justifyEnd,
25
-
26
- },
27
-
28
- 'box:hidden': {
29
- translateY: theme.values.height,
30
- opacity: 1,
31
- scale: 1,
32
- },
33
- 'box:visible': {
34
- translateY: 0,
35
- scale: 1,
36
- opacity: 1,
37
- },
38
- 'box:transition': {
39
- translateY: theme.values.transitions.modal,
40
- },
41
- }
42
- }),
43
- }
@@ -1,88 +0,0 @@
1
- import React, { useMemo } from 'react'
2
- import { Icon } from '../Icon'
3
- import { View } from '../View'
4
- import { Text } from '../Text'
5
- import { ActivityIndicator, ActivityIndicatorComposition } from '../ActivityIndicator'
6
- import {
7
- ComponentVariants,
8
-
9
- getNestedStylesByKey,
10
- IconPlaceholder,
11
- useDefaultComponentStyle,
12
- } from '@codeleap/common'
13
-
14
- import {
15
- EmptyPlaceholderComposition,
16
- EmptyPlaceholderStyles,
17
- } from './styles'
18
-
19
- import { StyleSheet } from 'react-native'
20
- import { StylesOf } from '../../types'
21
-
22
- export * from './styles'
23
-
24
- export type EmptyPlaceholderProps = {
25
- itemName?: string
26
- title?: React.ReactElement
27
- loading?: boolean
28
- styles?: StylesOf<EmptyPlaceholderComposition>
29
- variants?: ComponentVariants<typeof EmptyPlaceholderStyles>['variants']
30
- emptyIconName?: IconPlaceholder
31
- renderEmpty?: (props: {
32
- emptyText:string | React.ReactElement
33
- emptyIconName?: IconPlaceholder
34
- styles: StylesOf<EmptyPlaceholderComposition> & {activityIndicatorStyles: StylesOf<ActivityIndicatorComposition>}
35
- }) => React.ReactElement
36
- }
37
-
38
- export const EmptyPlaceholder:React.FC<EmptyPlaceholderProps> = (props: EmptyPlaceholderProps) => {
39
- const {
40
- itemName,
41
- title,
42
- loading,
43
- styles = {},
44
- variants = [],
45
- emptyIconName = 'placeholder',
46
- renderEmpty,
47
- } = props
48
- const emptyText = title || (itemName && `No ${itemName} found.`) || 'No items.'
49
-
50
- const componentStyles = useDefaultComponentStyle('EmptyPlaceholder', {
51
- variants,
52
- transform: StyleSheet.flatten,
53
- styles,
54
- })
55
-
56
- const activityIndicatorStyles = useMemo(() => getNestedStylesByKey('loader', componentStyles)
57
- , [componentStyles])
58
-
59
- if (loading) {
60
- return (
61
- <View style={[componentStyles.wrapper, componentStyles['wrapper:loading']]} >
62
- <ActivityIndicator styles={activityIndicatorStyles}/>
63
- </View>
64
- )
65
- }
66
-
67
- if (renderEmpty) {
68
- return (
69
- <View style={componentStyles.wrapper}>
70
- {renderEmpty({
71
- emptyText,
72
- emptyIconName: emptyIconName as IconPlaceholder,
73
- styles: {
74
- ...componentStyles,
75
- activityIndicatorStyles,
76
- },
77
- })}
78
- </View>
79
- )
80
- }
81
-
82
- return (
83
- <View style={componentStyles.wrapper}>
84
- <Icon name={emptyIconName as IconPlaceholder} style={componentStyles.icon}/>
85
- <Text text={emptyText} style={componentStyles.text}/>
86
- </View>
87
- )
88
- }
@@ -1,58 +0,0 @@
1
- import { assignTextStyle, createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
- import { ActivityIndicatorComposition } from '../ActivityIndicator'
3
-
4
- export type EmptyPlaceholderComposition =
5
- | 'wrapper:loading'
6
- | `loader${Capitalize<ActivityIndicatorComposition>}`
7
- | 'wrapper'
8
- | 'text'
9
- | 'icon'
10
-
11
- const createEmptyPlaceholderStyle = createDefaultVariantFactory<EmptyPlaceholderComposition>()
12
-
13
- const presets = includePresets((styles) => createEmptyPlaceholderStyle(() => ({ wrapper: styles })),
14
- )
15
-
16
- export const EmptyPlaceholderStyles = {
17
- ...presets,
18
- default: createEmptyPlaceholderStyle((theme) => ({
19
- wrapper: {
20
- ...theme.presets.center,
21
- minHeight: theme.values.window.height / 2,
22
- height: '100%',
23
- flex: 1,
24
- },
25
- loaderWrapper: {
26
-
27
- ...theme.spacing.marginVertical(8),
28
- ...theme.presets.center,
29
- ...theme.presets.flex,
30
- },
31
- icon: {
32
- color: theme.colors.placeholder,
33
- size: theme.spacing.value(24),
34
- },
35
- text: {
36
- ...assignTextStyle('p1')(theme).text,
37
- ...theme.presets.textCenter,
38
- },
39
- })),
40
- compact: createEmptyPlaceholderStyle((theme) => ({
41
- wrapper: {
42
- ...theme.spacing.marginVertical(0),
43
- marginBottom: theme.spacing.value(6),
44
- },
45
- })),
46
- absolute: createEmptyPlaceholderStyle((theme) => ({
47
- 'wrapper:loading': {
48
- ...theme.presets.absolute,
49
- ...theme.presets.whole,
50
- backgroundColor: theme.colors.background,
51
- },
52
- wrapper: {
53
- ...theme.presets.absolute,
54
- ...theme.presets.whole,
55
- backgroundColor: theme.colors.background,
56
- },
57
- })),
58
- }
@@ -1,181 +0,0 @@
1
- import React, { forwardRef, useImperativeHandle } from 'react'
2
- import { DocumentPicker, ImageCropPicker } from '../../modules/documentPicker'
3
- import {
4
- MobileInputFile,
5
- parseFilePathData,
6
- useCodeleapContext,
7
- MobileFile,
8
- } from '@codeleap/common'
9
- import { OSAlert } from '../../utils'
10
- import { ImageOrVideo, Options } from 'react-native-image-crop-picker'
11
- import { DocumentPickerOptions } from '../../modules/types/documentPicker'
12
-
13
- export * from './styles'
14
-
15
- export type FileInputRef = {
16
- openFilePicker: (string?: 'camera' | 'library') => void
17
- }
18
-
19
- export type FileInputProps = {
20
- mode: 'hidden' | 'button'
21
- onFileSelect(files: MobileInputFile<ImageOrVideo>[]): void
22
- options?: DocumentPickerOptions<any>
23
-
24
- ref?: FileInputRef
25
-
26
- type?: 'image' | 'anyFile'
27
- alertProps?: Parameters<typeof OSAlert.ask>[0]
28
- pickerOptions?: Partial<Options>
29
- required?: boolean
30
- onOpenCamera?: (resolve: (() => void)) => Promise<void>
31
- onOpenFileSystem?: (resolve: (() => void)) => Promise<void>
32
- onOpenGallery?: (resolve: (() => void)) => Promise<void>
33
- onError?: (error: any) => void
34
- }
35
-
36
- const pickerDefaults = {
37
- cropping: true,
38
- }
39
-
40
- function parsePickerData(data:ImageOrVideo):MobileInputFile<ImageOrVideo> {
41
-
42
- const filePathData = parseFilePathData(data.path)
43
- const d:MobileFile = {
44
- ...data,
45
- name: filePathData.name,
46
- size: data.size,
47
- type: data.mime,
48
- uri: data.path,
49
- fileCopyUri: data.path,
50
- }
51
-
52
- return {
53
- file: d,
54
- preview: data.path,
55
- }
56
- }
57
-
58
- export const FileInput = forwardRef<
59
- FileInputRef,
60
- FileInputProps
61
- >((fileInputProps, ref) => {
62
- const {
63
-
64
- onFileSelect,
65
-
66
- options,
67
- type = 'image',
68
- alertProps,
69
-
70
- pickerOptions,
71
-
72
- onOpenCamera = null,
73
- onOpenGallery = null,
74
- onOpenFileSystem = null,
75
- onError,
76
- } = fileInputProps
77
-
78
- const { logger } = useCodeleapContext()
79
-
80
- async function openFileSystem() {
81
- try {
82
- let files = await DocumentPicker.pick(options)
83
- if (!Array.isArray(files)) {
84
- files = [files]
85
- }
86
-
87
- onFileSelect(files.map((file) => ({ preview: file.uri, file })))
88
- } catch (err) {
89
- handleError(err)
90
- }
91
- }
92
-
93
- function handleError(err) {
94
-
95
- logger.warn('File Input Error', err, 'FILE INPUT')
96
- onError?.(err)
97
-
98
- }
99
-
100
- const mergedOptions = {
101
- ...pickerDefaults,
102
- ...pickerOptions,
103
- } as Options
104
-
105
- const handlePickerResolution = (data: ImageOrVideo | ImageOrVideo[]) => {
106
- let imageArray:ImageOrVideo[] = []
107
- if (!Array.isArray(data)) {
108
- imageArray = [data]
109
- } else {
110
- imageArray = data
111
- }
112
- onFileSelect(imageArray.map(parsePickerData))
113
- }
114
- const onPress = (open?: 'camera' | 'library' | 'fs', options?: Options) => {
115
- if (open == 'fs') {
116
- openFileSystem()
117
- } else {
118
- const call = open === 'camera' ? 'openCamera' : 'openPicker'
119
- ImageCropPicker[call]({ ...mergedOptions, ...(options || {}) }).then(handlePickerResolution)
120
- }
121
- }
122
- const openFilePicker = async (imageSource = null) => {
123
- if (type === 'image') {
124
- if (imageSource === 'camera') {
125
- onPress('camera')
126
- } else if (imageSource === 'library') {
127
- onPress('library')
128
- } else {
129
- OSAlert.ask({
130
- title: 'Change Image',
131
- body: 'Do you want to take a new picture or select an existing one?',
132
- ...alertProps,
133
- options: [
134
- {
135
- text: alertProps?.options?.[0]?.text || 'Camera',
136
- onPress: () => {
137
- if (onOpenCamera) {
138
- onOpenCamera(() => onPress('camera'))
139
- } else {
140
- onPress('camera')
141
- }
142
- },
143
- ...alertProps?.options[1],
144
- },
145
- {
146
- text: 'Library',
147
- onPress: () => {
148
- if (onOpenGallery) {
149
- onOpenGallery(() => onPress('library'))
150
- } else {
151
- onPress('library')
152
- }
153
- },
154
- ...alertProps?.options[2],
155
- },
156
- {
157
- text: 'Cancel',
158
- style: 'cancel',
159
- onPress: () => {},
160
- ...alertProps?.options[0],
161
- },
162
- ],
163
- })
164
- }
165
- } else {
166
- if (onOpenFileSystem) {
167
- onOpenFileSystem(() => onPress('fs'))
168
- } else {
169
-
170
- onPress('fs')
171
- }
172
- }
173
-
174
- }
175
-
176
- useImperativeHandle(ref, () => ({
177
- openFilePicker,
178
- }))
179
-
180
- return null
181
- })
@@ -1,15 +0,0 @@
1
- import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
-
3
- export type FileInputComposition = 'label' | 'wrapper' | 'input'
4
-
5
- const createFileInputStyle =
6
- createDefaultVariantFactory<FileInputComposition>()
7
-
8
- const presets = includePresets((styles) => createFileInputStyle(() => ({ wrapper: styles })),
9
- )
10
-
11
- export const FileInputStyles = {
12
- ...presets,
13
- default: createFileInputStyle((theme) => ({})),
14
-
15
- }
@@ -1,117 +0,0 @@
1
- import * as React from 'react'
2
- import { forwardRef } from 'react'
3
- import {
4
- useDefaultComponentStyle,
5
- ComponentVariants,
6
- } from '@codeleap/common'
7
-
8
- import { FlatGrid, FlatGridProps, GridRenderItemInfo } from 'react-native-super-grid'
9
- import { RefreshControl, StyleSheet, RefreshControlProps } from 'react-native'
10
- import { View, ViewProps } from '../View'
11
- import { EmptyPlaceholder, EmptyPlaceholderProps } from '../EmptyPlaceholder'
12
- import { GridComposition, GridStyles } from './styles'
13
- import { StylesOf } from '../../types'
14
- import { GetKeyboardAwarePropsOptions, useKeyboardAwareView } from '../../utils'
15
-
16
- export type DataboundFlatGridPropsTypes = 'data' | 'renderItem' | 'keyExtractor' | 'getItemLayout'
17
-
18
- export type ReplaceFlatGridProps<P, T> = Omit<P, DataboundFlatGridPropsTypes> & {
19
- data: T[]
20
- keyExtractor?: (item: T, index: number) => string
21
- renderItem: (data: GridRenderItemInfo<T>) => React.ReactElement
22
- onRefresh?: () => void
23
- getItemLayout?: ((
24
- data:T,
25
- index: number,
26
- ) => { length: number; offset: number; index: number })
27
- }
28
-
29
- export * from './styles'
30
-
31
- export type GridProps<
32
- T = any[],
33
- Data = T extends Array<infer D> ? D : never
34
- > =FlatGridProps<Data> &
35
- Omit<ViewProps, 'variants'> & {
36
- separators?: boolean
37
- placeholder?: EmptyPlaceholderProps
38
- keyboardAware?: GetKeyboardAwarePropsOptions
39
- debugName?: string
40
- styles?: StylesOf<GridComposition>
41
- refreshControlProps?: Partial<RefreshControlProps>
42
- } & ComponentVariants<typeof GridStyles>
43
-
44
- const GridCP = forwardRef<FlatGrid, GridProps>(
45
- (flatGridProps, ref) => {
46
- const {
47
- variants = [],
48
- style,
49
- styles = {},
50
- onRefresh,
51
- refreshing,
52
- placeholder,
53
- keyboardAware,
54
- debugName,
55
- refreshControlProps = {},
56
- ...props
57
- } = flatGridProps
58
-
59
- const variantStyles = useDefaultComponentStyle<'u:Grid', typeof GridStyles>('u:Grid', {
60
- variants,
61
- styles,
62
- transform: StyleSheet.flatten,
63
-
64
- })
65
-
66
- const renderSeparator = () => {
67
- return (
68
- <View variants={['separator']}></View>
69
- )
70
- }
71
-
72
- const separatorProp = props.separators
73
- const isEmpty = !props.data || !props.data.length
74
- const separator = !isEmpty && separatorProp == true && renderSeparator
75
-
76
- const refreshStyles = StyleSheet.flatten([variantStyles.refreshControl, styles.refreshControl])
77
- const Component = FlatGrid
78
-
79
- const _gridProps = {
80
- style: [variantStyles.wrapper, style],
81
- contentContainerStyle: variantStyles.content,
82
- ref: ref as unknown as FlatGrid,
83
- ItemSeparatorComponent: separator,
84
- refreshControl:
85
- !!onRefresh && (
86
- <RefreshControl
87
- refreshing={refreshing}
88
- onRefresh={onRefresh}
89
- tintColor={refreshStyles?.color}
90
- colors={[refreshStyles?.color]}
91
- {...refreshControlProps}
92
- />
93
- ),
94
-
95
- ListEmptyComponent: <EmptyPlaceholder {...placeholder}/>,
96
- ...props,
97
- }
98
- const keyboard = useKeyboardAwareView({
99
- debugName,
100
- })
101
- const gridProps = keyboard.getKeyboardAwareProps(_gridProps, {
102
- baseStyleProp: 'contentContainerStyle',
103
- adapt: 'paddingBottom',
104
- ...keyboardAware,
105
- })
106
- return (
107
- <Component
108
- {...gridProps}
109
- />
110
- )
111
- },
112
- )
113
-
114
- export type GridComponentType = <T extends any[] = any[]>(props: FlatGridProps<T>) => React.ReactElement
115
-
116
- export const Grid = GridCP as GridComponentType
117
-
@@ -1,11 +0,0 @@
1
- import { createDefaultVariantFactory } from '@codeleap/common'
2
- import { ListComposition, ListStyles } from '../List'
3
-
4
- export type GridComposition = ListComposition
5
-
6
- const createGridStyle = createDefaultVariantFactory<GridComposition>()
7
-
8
- export const GridStyles = {
9
- ...ListStyles,
10
-
11
- }