@codeleap/mobile 2.3.5 → 2.3.7

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 (118) hide show
  1. package/dist/components/Text/index.js +1 -1
  2. package/dist/components/Text/index.js.map +1 -1
  3. package/package.json +3 -2
  4. package/src/components/ActionIcon/index.tsx +0 -32
  5. package/src/components/ActionIcon/styles.ts +0 -97
  6. package/src/components/ActivityIndicator/index.tsx +0 -50
  7. package/src/components/ActivityIndicator/styles.ts +0 -68
  8. package/src/components/Animated.tsx +0 -34
  9. package/src/components/AutoComplete/index.tsx +0 -163
  10. package/src/components/AutoComplete/styles.ts +0 -44
  11. package/src/components/Backdrop/index.tsx +0 -48
  12. package/src/components/Backdrop/styles.ts +0 -33
  13. package/src/components/Button/index.tsx +0 -155
  14. package/src/components/Button/styles.ts +0 -129
  15. package/src/components/Calendar/index.tsx +0 -65
  16. package/src/components/Calendar/style.ts +0 -35
  17. package/src/components/Calendar/types.ts +0 -102
  18. package/src/components/Checkbox/index.tsx +0 -91
  19. package/src/components/Checkbox/styles.ts +0 -81
  20. package/src/components/ContentView/index.tsx +0 -63
  21. package/src/components/ContentView/styles.ts +0 -24
  22. package/src/components/Drawer/index.tsx +0 -33
  23. package/src/components/Drawer/styles.ts +0 -43
  24. package/src/components/EmptyPlaceholder/index.tsx +0 -88
  25. package/src/components/EmptyPlaceholder/styles.ts +0 -58
  26. package/src/components/FileInput/index.tsx +0 -181
  27. package/src/components/FileInput/styles.ts +0 -15
  28. package/src/components/Grid/index.tsx +0 -117
  29. package/src/components/Grid/styles.ts +0 -11
  30. package/src/components/Icon/index.tsx +0 -69
  31. package/src/components/Icon/styles.ts +0 -57
  32. package/src/components/Image/index.tsx +0 -91
  33. package/src/components/Image/styles.ts +0 -20
  34. package/src/components/ImageView/Spotlight.tsx +0 -157
  35. package/src/components/ImageView/component.tsx +0 -38
  36. package/src/components/ImageView/index.ts +0 -2
  37. package/src/components/InputLabel/index.tsx +0 -38
  38. package/src/components/InputLabel/styles.ts +0 -19
  39. package/src/components/List/PaginationIndicator.tsx +0 -71
  40. package/src/components/List/index.tsx +0 -114
  41. package/src/components/List/styles.ts +0 -19
  42. package/src/components/Modal/index.tsx +0 -218
  43. package/src/components/Modal/styles.ts +0 -153
  44. package/src/components/MultiSelect/index.tsx +0 -138
  45. package/src/components/MultiSelect/styles.ts +0 -18
  46. package/src/components/MultiSelect/types.ts +0 -42
  47. package/src/components/Navigation/Navigation.tsx +0 -54
  48. package/src/components/Navigation/constants.ts +0 -8
  49. package/src/components/Navigation/index.tsx +0 -3
  50. package/src/components/Navigation/types.ts +0 -35
  51. package/src/components/Navigation/utils.tsx +0 -57
  52. package/src/components/Pager/index.tsx +0 -121
  53. package/src/components/Pager/styles.ts +0 -81
  54. package/src/components/RadioInput/index.tsx +0 -106
  55. package/src/components/RadioInput/styles.ts +0 -67
  56. package/src/components/Scroll/index.tsx +0 -124
  57. package/src/components/Scroll/styles.ts +0 -18
  58. package/src/components/Sections/index.tsx +0 -91
  59. package/src/components/SegmentedControl/index.tsx +0 -204
  60. package/src/components/SegmentedControl/styles.ts +0 -89
  61. package/src/components/Select/index.tsx +0 -167
  62. package/src/components/Select/styles.ts +0 -62
  63. package/src/components/Select/types.ts +0 -43
  64. package/src/components/Slider/Mark.tsx +0 -46
  65. package/src/components/Slider/Thumb.tsx +0 -29
  66. package/src/components/Slider/index.tsx +0 -130
  67. package/src/components/Slider/styles.ts +0 -76
  68. package/src/components/Slider/types.ts +0 -30
  69. package/src/components/Switch/index.tsx +0 -91
  70. package/src/components/Switch/styles.ts +0 -38
  71. package/src/components/Text/index.tsx +0 -123
  72. package/src/components/Text/styles.ts +0 -50
  73. package/src/components/TextInput/index.tsx +0 -319
  74. package/src/components/TextInput/styles.ts +0 -127
  75. package/src/components/Touchable/index.tsx +0 -174
  76. package/src/components/Touchable/styles.ts +0 -28
  77. package/src/components/View/index.tsx +0 -103
  78. package/src/components/View/styles.ts +0 -24
  79. package/src/components/components.ts +0 -42
  80. package/src/components/defaultStyles.ts +0 -62
  81. package/src/components/legacy/Modal/index.tsx +0 -163
  82. package/src/components/legacy/Modal/styles.ts +0 -125
  83. package/src/components/legacy/Pager/index.tsx +0 -242
  84. package/src/components/legacy/Pager/styles.ts +0 -51
  85. package/src/components/legacy/index.ts +0 -2
  86. package/src/modules/documentPicker.ts +0 -7
  87. package/src/modules/fastImage.ts +0 -2
  88. package/src/modules/imageCropPicker.d.ts +0 -497
  89. package/src/modules/index.d.ts +0 -682
  90. package/src/modules/reactNavigation.ts +0 -15
  91. package/src/modules/textInputMask.ts +0 -11
  92. package/src/modules/types/documentPicker.d.ts +0 -215
  93. package/src/modules/types/fileTypes.ts +0 -138
  94. package/src/modules/types/textInputMask.ts +0 -9
  95. package/src/types/index.ts +0 -1
  96. package/src/types/utility.ts +0 -9
  97. package/src/utils/KeyboardAware/context.tsx +0 -75
  98. package/src/utils/KeyboardAware/index.ts +0 -17
  99. package/src/utils/KeyboardAware/keyboardHooks.ts +0 -124
  100. package/src/utils/KeyboardAware/lib/KeyboardAwareFlatList.ts +0 -4
  101. package/src/utils/KeyboardAware/lib/KeyboardAwareHOC.tsx +0 -618
  102. package/src/utils/KeyboardAware/lib/KeyboardAwareInterface.ts +0 -13
  103. package/src/utils/KeyboardAware/lib/KeyboardAwareScrollView.ts +0 -6
  104. package/src/utils/KeyboardAware/lib/KeyboardAwareSectionList.ts +0 -6
  105. package/src/utils/KeyboardAware/types.ts +0 -159
  106. package/src/utils/ModalManager/components.tsx +0 -112
  107. package/src/utils/ModalManager/context.tsx +0 -260
  108. package/src/utils/ModalManager/index.ts +0 -16
  109. package/src/utils/OSAlert.ts +0 -180
  110. package/src/utils/PermissionManager/context.tsx +0 -302
  111. package/src/utils/PermissionManager/index.ts +0 -20
  112. package/src/utils/PermissionManager/types.ts +0 -24
  113. package/src/utils/hooks.ts +0 -163
  114. package/src/utils/index.ts +0 -11
  115. package/src/utils/input.ts +0 -51
  116. package/src/utils/misc.ts +0 -83
  117. package/src/utils/notifications.ts +0 -206
  118. 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
- }