@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,69 +0,0 @@
1
- import * as React from 'react'
2
- import {
3
- ComponentVariants,
4
-
5
- useDefaultComponentStyle,
6
- useCodeleapContext,
7
- arePropsEqual,
8
- IconPlaceholder,
9
- onMount,
10
- onUpdate,
11
- } from '@codeleap/common'
12
- import { StyleSheet } from 'react-native'
13
- import { View } from '../View'
14
- export * from './styles'
15
-
16
- import {
17
- IconStyles,
18
- } from './styles'
19
-
20
- export type IconProps = {
21
- name: IconPlaceholder
22
- style?: any
23
- color?: string
24
- variants?: ComponentVariants<typeof IconStyles>['variants']
25
- renderEmptySpace?: boolean
26
- size?: number
27
- }
28
-
29
- export const IconComponent: React.FC<IconProps> = ({ name, style, variants, renderEmptySpace, ...otherProps }) => {
30
- const { Theme, logger } = useCodeleapContext()
31
-
32
- const variantStyles = useDefaultComponentStyle<'u:Icon', typeof IconStyles>('u:Icon', {
33
- variants,
34
- transform: StyleSheet.flatten,
35
- styles: {
36
- icon: style,
37
- },
38
- rootElement: 'icon',
39
- })
40
- const Component = Theme?.icons?.[name]
41
- onUpdate(() => {
42
- if (!Component && !!name) {
43
- logger.warn(
44
- `Icon: No icon found in theme for name "${name}".`,
45
- { props: { style, name, variants, variantStyles }},
46
- 'Component',
47
- )
48
- }
49
- }, [name])
50
-
51
- if (!name) {
52
- return renderEmptySpace ? <View style={variantStyles.icon}/> : null
53
- }
54
-
55
- if (!Component) {
56
-
57
- return null
58
- }
59
- return <Component {...otherProps} style={variantStyles.icon} />
60
- }
61
-
62
- function areEqual(prevProps, nextProps) {
63
- const check = ['name', 'style', 'variants', 'renderEmptySpace']
64
- const res = arePropsEqual(prevProps, nextProps, { check })
65
- return res
66
- }
67
-
68
- export const Icon = React.memo(IconComponent, areEqual)
69
-
@@ -1,57 +0,0 @@
1
- import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
-
3
- export type IconComposition = 'icon'
4
-
5
- const createIconStyle = createDefaultVariantFactory<IconComposition>()
6
-
7
- const presets = includePresets((styles) => createIconStyle(() => ({ icon: styles })))
8
-
9
- export const IconStyles = {
10
- ...presets,
11
- default: createIconStyle((theme) => ({
12
- icon: {
13
- color: theme.colors.icon,
14
- },
15
- })),
16
- originalColor: createIconStyle(theme => ({
17
- icon: {
18
- color: 'auto',
19
- },
20
- })),
21
- white: createIconStyle((theme) => ({
22
- icon: {
23
- color: theme.colors.white,
24
- },
25
- })),
26
-
27
- primary: createIconStyle((theme) => ({
28
- icon: {
29
- color: theme.colors.primary,
30
- },
31
- })),
32
- negative: createIconStyle((theme) => ({
33
- icon: {
34
- color: theme.colors.negative,
35
- },
36
- })),
37
- positive: createIconStyle((theme) => ({
38
- icon: {
39
- color: theme.colors.positive,
40
- },
41
- })),
42
- small: createIconStyle((theme) => ({
43
- icon: {
44
- ...theme.sized(1),
45
- },
46
- })),
47
- medium: createIconStyle((theme) => ({
48
- icon: {
49
- ...theme.sized(2),
50
- },
51
- })),
52
- large: createIconStyle((theme) => ({
53
- icon: {
54
- ...theme.sized(3),
55
- },
56
- })),
57
- }
@@ -1,91 +0,0 @@
1
- import * as React from 'react'
2
- import {
3
- ComponentVariants,
4
-
5
- useDefaultComponentStyle,
6
- arePropsEqual,
7
- FormTypes,
8
- TypeGuards,
9
- } from '@codeleap/common'
10
- import { ComponentPropsWithoutRef } from 'react'
11
- import {
12
- Image as NativeImage,
13
- ImageStyle,
14
- StyleProp,
15
- StyleSheet,
16
- TextStyle,
17
- ViewStyle,
18
- } from 'react-native'
19
- import { FastImage } from '../../modules/fastImage'
20
- import {
21
- ImageStyles,
22
- } from './styles'
23
- import { useImageSpotlight } from '../ImageView/Spotlight'
24
- import { Touchable } from '../Touchable'
25
- import { isFile, toMultipartFile } from '../../utils'
26
- export * from './styles'
27
- type NativeImageProps = ComponentPropsWithoutRef<typeof NativeImage>
28
- export type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
29
- variants?: ComponentVariants<typeof ImageStyles>['variants']
30
- fast?: boolean
31
- style?: StyleProp<ImageStyle | TextStyle | ViewStyle>
32
- source:
33
- | (NativeImageProps['source'] & {
34
- priority?: keyof typeof FastImage.priority
35
- })
36
- | FormTypes.AnyFile
37
- | string
38
- | number
39
- resizeMode?: keyof typeof FastImage.resizeMode
40
- spotlight?: string
41
- }
42
-
43
- export const ImageComponent: React.FC<ImageProps> = (props) => {
44
- const { variants, style, fast = true, spotlight = null, resizeMode = 'contain', source, ...imageProps } = props
45
-
46
- const variantStyles = useDefaultComponentStyle<'u:Image', typeof ImageStyles>('u:Image', { variants })
47
-
48
- const styles = StyleSheet.flatten([variantStyles.wrapper, style])
49
- let imSource = source
50
- if (isFile(imSource)) {
51
- imSource = toMultipartFile(imSource)
52
- } else if (TypeGuards.isString(source)) {
53
- imSource = { uri: source }
54
- }
55
- const spotlightActions = useImageSpotlight(spotlight, props.source)
56
- const Wrapper = !!spotlight ? Touchable : ({ children }) => <>{children}</>
57
- const wrapperProps = {
58
- onPress: spotlightActions.onImagePressed,
59
- debugName: `Press spotlight image ${props.source}`,
60
- style: [variantStyles.touchable],
61
- android_ripple: null,
62
- }
63
- if (fast) {
64
- return (
65
- <Wrapper {...wrapperProps}>
66
-
67
- <FastImage
68
- style={styles}
69
- // @ts-ignore
70
- tintColor={styles?.tintColor}
71
- source={imSource}
72
- resizeMode={FastImage.resizeMode[resizeMode || 'contain']}
73
- {...imageProps}
74
- />
75
- </Wrapper>
76
- )
77
- }
78
- return <Wrapper {...wrapperProps}>
79
- <NativeImage style={styles} resizeMode={resizeMode} source={imSource} {...(imageProps as any)} />
80
-
81
- </Wrapper>
82
- }
83
-
84
- function areEqual(prevProps, nextProps) {
85
- const check = ['source', 'style', 'variants', 'resizeMode', 'fast']
86
- const res = arePropsEqual(prevProps, nextProps, { check })
87
- return res
88
- }
89
-
90
- export const Image = React.memo(ImageComponent, areEqual)
91
-
@@ -1,20 +0,0 @@
1
- import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
-
3
- export type ImageComposition = 'wrapper' | 'touchable'
4
- const createImageStyle = createDefaultVariantFactory<ImageComposition>()
5
-
6
- const presets = includePresets((styles) => createImageStyle(() => ({ wrapper: styles, touchable: styles })),
7
- )
8
-
9
- export const ImageStyles = {
10
- ...presets,
11
- default: createImageStyle(() => ({
12
- wrapper: {},
13
- })),
14
-
15
- round: createImageStyle(() => ({
16
- wrapper: {
17
- borderRadius: 100,
18
- },
19
- })),
20
- }
@@ -1,157 +0,0 @@
1
- import React, { useContext, useState } from 'react'
2
- import { deepEqual, onUpdate, ReactState, TypeGuards, usePrevious, useUnmount } from '@codeleap/common'
3
- // @ts-ignore
4
- import { ImageSource } from 'react-native-image-viewing/dist/@types'
5
- import uuid from 'react-native-uuid'
6
- import { ImageView } from './component'
7
- import { ImageProps } from '../Image'
8
- type TImage = {
9
- source: ImageSource
10
- created: number
11
- id: string
12
-
13
- }
14
- type ImageList = Record<string, TImage>
15
-
16
- type SpotlightState = ReactState<Record<string, ImageList>>
17
- type IndexState = ReactState<Record<string, number>>
18
- type TSpotlightCtx = {
19
- spotlights: SpotlightState[0]
20
- setSpotlights: SpotlightState[1]
21
- indexes: IndexState[0]
22
- setIndexes: IndexState[1]
23
-
24
- }
25
-
26
- const SpotlightCtx = React.createContext({} as TSpotlightCtx)
27
-
28
- export const SpotlightProvider:React.FC = ({ children }) => {
29
- const [spotlights, setSpotlights] = useState<TSpotlightCtx['spotlights']>({})
30
- const [indexes, setIndexes] = useState<TSpotlightCtx['indexes']>({})
31
- const ctxValue:TSpotlightCtx = {
32
- spotlights,
33
- setSpotlights,
34
- indexes,
35
- setIndexes,
36
- }
37
-
38
- return <SpotlightCtx.Provider value={ctxValue}>
39
- {children}
40
- </SpotlightCtx.Provider>
41
- }
42
-
43
- export function useSpotlight(name: string) {
44
- const ctx = useContext(SpotlightCtx)
45
-
46
- const imList =
47
- Object.values(ctx.spotlights[name] || {})
48
-
49
- return {
50
- images: imList,
51
- currentIndex: ctx.indexes[name],
52
- set(img: ImageSource, id?: string) {
53
- const newId = id || uuid.v4() as string
54
- ctx.setSpotlights((prev) => {
55
- const images = { ...prev[name] }
56
-
57
- if (id !== null) {
58
- images[id] = {
59
- ...images[id],
60
- source: img,
61
- }
62
- } else {
63
- const now = Date.now()
64
-
65
- images[newId] = {
66
- created: now,
67
- id: newId,
68
- source: img,
69
- }
70
- }
71
-
72
- return {
73
- ...prev,
74
- [name]: images,
75
- }
76
- })
77
-
78
- return newId
79
- },
80
- remove(id: string) {
81
- ctx.setSpotlights((prev) => {
82
- const images = { ...prev[name] }
83
- delete images[id]
84
- return {
85
- ...prev,
86
- [name]: images,
87
- }
88
- })
89
- },
90
- open(id: string) {
91
- const newIdx = imList.findIndex(x => x.id === id)
92
- ctx.setIndexes((prev) => ({
93
- ...prev,
94
- [name]: newIdx,
95
- }))
96
- },
97
- close() {
98
-
99
- ctx.setIndexes((prev) => ({
100
- ...prev,
101
- [name]: undefined,
102
- }))
103
- },
104
- clear() {
105
- ctx.setIndexes((prev) => ({
106
- ...prev,
107
- [name]: undefined,
108
- }))
109
- ctx.setSpotlights((prev) => {
110
-
111
- return {
112
- ...prev,
113
- [name]: {},
114
- }
115
- })
116
- },
117
- }
118
- }
119
-
120
- export const useImageSpotlight = (name: string | null, src: ImageProps['source']) => {
121
- const [id, setId] = useState(null)
122
- const spotlight = useSpotlight(name)
123
- const imSource = TypeGuards.isString(src) ? { uri: src } : src as TImage['source']
124
- const prevSource = usePrevious(imSource)
125
-
126
- onUpdate(() => {
127
- if (!name) return
128
- if (deepEqual(prevSource, imSource)) return
129
- setId(spotlight.set(imSource, id))
130
- }, [src, id])
131
-
132
- useUnmount(() => {
133
- if (!name) return
134
- spotlight.remove(id)
135
- })
136
-
137
- return {
138
- onImagePressed: () => {
139
- spotlight.open(id)
140
- },
141
- }
142
- }
143
-
144
- export const Spotlight = ({ name }) => {
145
- const spotlight = useSpotlight(name)
146
- useUnmount(() => {
147
- spotlight.clear()
148
- })
149
- return <ImageView
150
- imageIndex={spotlight.currentIndex}
151
- images={spotlight.images.map(x => x.source)}
152
- keyExtractor={(_, index) => index.toString()}
153
- onRequestClose={spotlight.close}
154
- visible={typeof spotlight.currentIndex !== 'undefined'}
155
-
156
- />
157
- }
@@ -1,38 +0,0 @@
1
- import * as React from 'react'
2
-
3
- import { onUpdate, PropsOf } from '@codeleap/common'
4
-
5
- // @ts-ignore
6
- import _ImageView from 'react-native-image-viewing'
7
- import { StatusBar } from 'react-native'
8
- import { View } from '../View'
9
- import { Text } from '../Text'
10
-
11
- type FooterComponentType = React.ComponentType<{
12
- imageIndex: number
13
- imagesLength: number
14
- }>
15
-
16
- const FooterComponent: FooterComponentType = ({ imageIndex, imagesLength }) => (
17
- <View variants={['marginBottom:5', 'alignCenter']}>
18
- <Text text={imageIndex + 1 + '/' + imagesLength}/>
19
- </View>
20
- )
21
-
22
- export type ImageViewProps = PropsOf<typeof _ImageView>
23
-
24
- export const ImageView: React.FC<ImageViewProps> = (props) => {
25
- onUpdate(() => {
26
- StatusBar.setHidden(props.visible)
27
- // StatusBar.setBarStyle(`${props.visible ? 'light' : 'dark'}-content`)
28
- }, [props.visible])
29
-
30
- return (
31
- <_ImageView
32
- doubleTapToZoomEnabled={false}
33
- FooterComponent={({ imageIndex }) => <FooterComponent imageIndex={imageIndex} imagesLength={props.images.length}/>}
34
- presentationStyle={'overFullScreen'}
35
- {...props}
36
- />
37
- )
38
- }
@@ -1,2 +0,0 @@
1
- export * from './Spotlight'
2
- export * from './component'
@@ -1,38 +0,0 @@
1
- import React from 'react'
2
- import { ComponentVariants, FormTypes, useDefaultComponentStyle } from '@codeleap/common'
3
- import { StylesOf } from '../../types'
4
- import { View, ViewProps } from '../View'
5
- import { InputLabelComposition, InputLabelStyles } from './styles'
6
- import { Text } from '../Text'
7
- import { StyleSheet } from 'react-native'
8
-
9
- export type InputLabelProps = ViewProps & {
10
- styles?: StylesOf<InputLabelComposition>
11
- label?: FormTypes.Label
12
- required?: boolean
13
- } & ComponentVariants<typeof InputLabelStyles>
14
-
15
- export * from './styles'
16
-
17
- export const InputLabel:React.FC<InputLabelProps> = (props) => {
18
- const { label, required = false, variants = [], styles = {}, style, ...viewProps } = props
19
- const variantStyles = useDefaultComponentStyle<'u:InputLabel', typeof InputLabelStyles>('u:InputLabel', {
20
- variants, styles, transform: StyleSheet.flatten,
21
- })
22
-
23
- if (!label) return null
24
-
25
- switch (typeof label) {
26
- case 'string':
27
- return <View {...viewProps} style={[variantStyles.wrapper, style]}>
28
- <Text style={variantStyles.text} text={label} />
29
- {required && <Text style={variantStyles.asterisk} text={' *'} />}
30
- </View>
31
- case 'object':
32
- return <>
33
- {label as React.ReactNode}
34
- </>
35
- default:
36
- return null
37
- }
38
- }
@@ -1,19 +0,0 @@
1
- import { assignTextStyle, createDefaultVariantFactory } from '@codeleap/common'
2
-
3
- export type InputLabelComposition = 'text' | 'wrapper' | 'asterisk'
4
-
5
- const createInputLabelStyle = createDefaultVariantFactory<InputLabelComposition>()
6
-
7
- export const InputLabelStyles = {
8
- default: createInputLabelStyle((theme) => ({
9
- asterisk: {
10
- color: theme.colors.negative,
11
- },
12
- wrapper: {
13
- ...theme.presets.row,
14
- },
15
- text: {
16
- ...assignTextStyle('h5')(theme).text,
17
- },
18
- })),
19
- }
@@ -1,71 +0,0 @@
1
- import React from 'react'
2
- import {
3
- assignTextStyle,
4
- ComponentVariants,
5
- createDefaultVariantFactory,
6
- getNestedStylesByKey,
7
- includePresets,
8
- TypeGuards,
9
- useDefaultComponentStyle,
10
- } from '@codeleap/common'
11
- import { StyleSheet, ViewStyle } from 'react-native'
12
- import { StylesOf } from '../../types'
13
- import { ActivityIndicator, ActivityIndicatorComposition } from '../ActivityIndicator'
14
- import { Text } from '../Text'
15
-
16
- export type PaginationIndicatorComposition = 'text' | `loader${Capitalize<ActivityIndicatorComposition>}`
17
-
18
- const createPaginationIndicatorStyle = createDefaultVariantFactory<PaginationIndicatorComposition>()
19
- const presets = includePresets((style) => createPaginationIndicatorStyle(() => ({ loaderWrapper: style, text: style })))
20
- export const PaginationIndicatorStyles = {
21
- ...presets,
22
- default: createPaginationIndicatorStyle((theme) => {
23
- return {
24
- loaderWrapper: {
25
- ...theme.presets.center,
26
- ...theme.spacing.marginVertical(3),
27
- },
28
- text: {
29
- ...assignTextStyle('h4')(theme).text,
30
- ...theme.presets.textCenter,
31
- ...theme.spacing.marginVertical(3),
32
- ...theme.presets.fullWidth,
33
- },
34
- }
35
- }),
36
- }
37
-
38
- export type PaginationIndicatorProps = {
39
- isFetching?: boolean
40
- noMoreItemsText: React.ReactChild
41
- hasMore?: boolean
42
- activityIndicator?: JSX.Element
43
- styles?: StylesOf<PaginationIndicatorComposition>
44
- style?: ViewStyle
45
- } & ComponentVariants<typeof PaginationIndicatorStyles>
46
-
47
- export const PaginationIndicator = (props: PaginationIndicatorProps) => {
48
- const { hasMore, isFetching, noMoreItemsText, style, activityIndicator, styles = {}, variants = [] } = props
49
-
50
- const variantStyles = useDefaultComponentStyle<
51
- 'u:PaginationIndicator',
52
- typeof PaginationIndicatorStyles
53
- >('u:PaginationIndicator', {
54
- variants,
55
- styles,
56
- transform: StyleSheet.flatten,
57
- })
58
-
59
- const loaderStyles = getNestedStylesByKey('loader', variantStyles)
60
-
61
- if (isFetching) {
62
- return activityIndicator || <ActivityIndicator style={style} styles={loaderStyles}/>
63
- }
64
- if (!hasMore) {
65
- if (TypeGuards.isString(noMoreItemsText) || TypeGuards.isNumber(noMoreItemsText)) {
66
- return <Text style={[variantStyles.text, style]} text={noMoreItemsText.toString()}/>
67
- }
68
- return noMoreItemsText
69
- }
70
- return null
71
- }
@@ -1,114 +0,0 @@
1
- import * as React from 'react'
2
- import { forwardRef } from 'react'
3
- import {
4
-
5
- useDefaultComponentStyle,
6
-
7
- ComponentVariants,
8
- useCallback,
9
- } from '@codeleap/common'
10
-
11
- import { RefreshControl, FlatList, FlatListProps as RNFlatListProps, ListRenderItemInfo, StyleSheet, RefreshControlProps } from 'react-native'
12
- import { View, ViewProps } from '../View'
13
- import { EmptyPlaceholder, EmptyPlaceholderProps } from '../EmptyPlaceholder'
14
- import { ListComposition, ListStyles } from './styles'
15
- import { StylesOf } from '../../types'
16
- import { GetKeyboardAwarePropsOptions, useKeyboardAwareView } from '../../utils'
17
-
18
- export type DataboundFlatListPropsTypes = 'data' | 'renderItem' | 'keyExtractor' | 'getItemLayout'
19
-
20
- export type ReplaceFlatlistProps<P, T> = Omit<P, DataboundFlatListPropsTypes> & {
21
- data: T[]
22
- keyExtractor?: (item: T, index: number) => string
23
- renderItem: (data: ListRenderItemInfo<T>) => React.ReactElement
24
- onRefresh?: () => void
25
- getItemLayout?: ((
26
- data:T,
27
- index: number,
28
- ) => { length: number; offset: number; index: number })
29
- }
30
-
31
- export * from './styles'
32
- export * from './PaginationIndicator'
33
-
34
- export type FlatListProps<
35
- T = any[],
36
- Data = T extends Array<infer D> ? D : never
37
- > =RNFlatListProps<Data> &
38
- Omit<ViewProps, 'variants'> & {
39
- separators?: boolean
40
- placeholder?: EmptyPlaceholderProps
41
- keyboardAware?: GetKeyboardAwarePropsOptions
42
- styles?: StylesOf<ListComposition>
43
- refreshControlProps?: Partial<RefreshControlProps>
44
- } & ComponentVariants<typeof ListStyles>
45
-
46
- const ListCP = forwardRef<FlatList, FlatListProps>(
47
- (flatListProps, ref) => {
48
- const {
49
- variants = [],
50
- style,
51
- styles = {},
52
- onRefresh,
53
- component,
54
- refreshing,
55
- placeholder,
56
- keyboardAware,
57
- refreshControlProps = {},
58
- ...props
59
- } = flatListProps
60
-
61
- const variantStyles = useDefaultComponentStyle<'u:List', typeof ListStyles>('u:List', {
62
- variants,
63
- styles,
64
- transform: StyleSheet.flatten,
65
-
66
- })
67
-
68
- const renderSeparator = useCallback(() => {
69
- return (
70
- <View style={variantStyles.separator}></View>
71
- )
72
- }, [])
73
-
74
- const isEmpty = !props.data || !props.data.length
75
- const separator = !isEmpty && props?.separators && renderSeparator
76
-
77
- const Component:any = component || FlatList
78
- const refreshStyles = StyleSheet.flatten([variantStyles.refreshControl, styles.refreshControl])
79
-
80
- const _listProps = {
81
- style: [variantStyles.wrapper, style],
82
- contentContainerStyle: variantStyles.content,
83
- ref: ref as unknown as FlatList,
84
- ItemSeparatorComponent: separator,
85
- refreshControl: !!onRefresh && (
86
- <RefreshControl
87
- refreshing={refreshing}
88
- onRefresh={onRefresh}
89
- tintColor={refreshStyles?.color}
90
- colors={[refreshStyles?.color]}
91
- {...refreshControlProps}
92
- />
93
- ),
94
- ListEmptyComponent: <EmptyPlaceholder {...placeholder}/>,
95
- ...props,
96
- }
97
- const keyboard = useKeyboardAwareView()
98
- const listProps = keyboard.getKeyboardAwareProps(_listProps, {
99
- adapt: 'paddingBottom',
100
- baseStyleProp: 'contentContainerStyle',
101
- ...keyboardAware,
102
- })
103
- return (
104
- <Component
105
- {...listProps}
106
- />
107
- )
108
- },
109
- )
110
-
111
- export type ListComponentType = <T extends any[] = any[]>(props: FlatListProps<T>) => React.ReactElement
112
-
113
- export const List = ListCP as ListComponentType
114
-