ordering-ui-react-native 0.11.30 → 0.11.34

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ordering-ui-react-native",
3
- "version": "0.11.30",
3
+ "version": "0.11.34",
4
4
  "description": "Reusable components made in react native",
5
5
  "main": "src/index.tsx",
6
6
  "author": "ordering.inc",
@@ -35,7 +35,7 @@ export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
35
35
  alignItems: 'center',
36
36
  },
37
37
  categoryStyle: {
38
- width: isOpenAllCategories ? windowWidth / 3 - 27 : windowWidth / 4 - 20,
38
+ width: isOpenAllCategories ? windowWidth / 3 - 27 : windowWidth / 4 - 10,
39
39
  height: 150,
40
40
  flexDirection: 'column',
41
41
  justifyContent: 'center',
@@ -119,9 +119,7 @@ const CheckoutUI = (props: any) => {
119
119
  const [userErrors, setUserErrors] = useState<any>([]);
120
120
  const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
121
121
  const [phoneUpdate, setPhoneUpdate] = useState(false);
122
- const [prog, setProg] = useState(true);
123
122
  const [showGateway, setShowGateway] = useState<any>({closedByUsed: false, open: false});
124
- const [progClr, setProgClr] = useState('#424242');
125
123
  const [paypalMethod, setPaypalMethod] = useState<any>(null)
126
124
 
127
125
  const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
@@ -130,7 +128,6 @@ const CheckoutUI = (props: any) => {
130
128
 
131
129
  const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
132
130
  const isPreOrderSetting = configs?.preorder_status_enabled?.value === '1'
133
-
134
131
  const cartsWithProducts = carts && Object.values(carts).filter((cart: any) => cart.products.length) || null
135
132
 
136
133
  const handlePlaceOrder = () => {
@@ -205,8 +202,12 @@ const CheckoutUI = (props: any) => {
205
202
  }
206
203
 
207
204
  const handlePaymentMethodClick = (paymethod : any) => {
208
- setShowGateway({closedByUser: false, open: true})
209
- setPaypalMethod(paymethod)
205
+ setShowGateway({closedByUser: false, open: true})
206
+ setPaypalMethod(paymethod)
207
+ }
208
+
209
+ const handleCloseWebview = () => {
210
+ setShowGateway({open: false, closedByUser: true})
210
211
  }
211
212
 
212
213
  useEffect(() => {
@@ -558,9 +559,9 @@ const CheckoutUI = (props: any) => {
558
559
  )}
559
560
  <OModal
560
561
  open={paypalMethod && showGateway.open}
561
- onCancel={() => setShowGateway({open: false, closedByUser: true})}
562
- onAccept={() => setShowGateway({open: false, closedByUser: true})}
563
- onClose={() => setShowGateway({open: false, closedByUser: true})}
562
+ onCancel={handleCloseWebview}
563
+ onAccept={handleCloseWebview}
564
+ onClose={handleCloseWebview}
564
565
  entireModal
565
566
  >
566
567
  <OText
@@ -573,9 +574,6 @@ const CheckoutUI = (props: any) => {
573
574
  }}>
574
575
  {t('PAYPAL_GATEWAY', 'PayPal GateWay')}
575
576
  </OText>
576
- <View style={{padding: 13, opacity: prog ? 1 : 0}}>
577
- <ActivityIndicator size={24} color={progClr} />
578
- </View>
579
577
  <WebView
580
578
  source={{ uri: `${ordering.root}/html/paypal_react_native` }}
581
579
  onMessage={onMessage}
@@ -585,18 +583,6 @@ const CheckoutUI = (props: any) => {
585
583
  cacheEnabled={false}
586
584
  cacheMode='LOAD_NO_CACHE'
587
585
  style={{ flex: 1 }}
588
- onLoadStart={() => {
589
- setProg(true);
590
- setProgClr('#424242');
591
- }}
592
- onLoadProgress={() => {
593
- setProg(true);
594
- setProgClr('#00457C');
595
- }}
596
- onLoad={() => {
597
- setProg(true);
598
- setProgClr('#00457C');
599
- }}
600
586
  onLoadEnd={(e) => {
601
587
  const message = {
602
588
  action: 'init',
@@ -614,7 +600,6 @@ const CheckoutUI = (props: any) => {
614
600
  clientId: paypalMethod?.credentials?.client_id
615
601
  }
616
602
  }
617
- setProg(false);
618
603
  webviewRef.current.postMessage(JSON.stringify(message))
619
604
  }}
620
605
  />
@@ -30,7 +30,7 @@ const CouponControlUI = (props: any) => {
30
30
  borderColor: theme.colors.secundaryContrast,
31
31
  borderRadius: 50,
32
32
  flex: 1,
33
- marginRight: 30
33
+ marginRight: 20
34
34
  },
35
35
  });
36
36
 
@@ -102,7 +102,8 @@ const CouponControlUI = (props: any) => {
102
102
  onClick={() => handleButtonApplyClick()}
103
103
  bgColor={theme.colors.primary}
104
104
  borderColor={theme.colors.primary}
105
- textStyle={{color: 'white'}}
105
+ textStyle={{ color: 'white', fontSize: 18, maxWidth: 110, minWidth: 60 }}
106
+ textProps={{numberOfLines: 1}}
106
107
  imgRightSrc={null}
107
108
  text={t('APPLY', 'Apply')}
108
109
  isDisabled={!couponInput}
@@ -118,8 +118,9 @@ const DriverTipsUI = (props: any) => {
118
118
  text={t('APPLY_TIP', 'Apply Tip')}
119
119
  bgColor={theme.colors.primary}
120
120
  borderColor={theme.colors.primary}
121
- textStyle={{ color: 'white', fontSize: 20 }}
121
+ textStyle={{ color: 'white', fontSize: 18, maxWidth: 110, minWidth: 60 }}
122
122
  imgRightSrc={null}
123
+ textProps={{numberOfLines: 1}}
123
124
  isDisabled={!(value > 0 && value !== driverTip) || !value}
124
125
  onClick={() => {
125
126
  handlerChangeOption(value)
@@ -73,9 +73,9 @@ export const SelectItemBtn = styled(SelectItem)`
73
73
  border-width: 1px;
74
74
  border-color: transparent;
75
75
  border-radius: 10px;
76
- width: 70px;
76
+ width: 65px;
77
77
  max-width: 140px;
78
78
  margin-vertical: 5px;
79
- padding: 15px 20px;
79
+ padding: 15px;
80
80
  background-color: ${(props: any) => props.theme.colors.inputDisabled};
81
81
  `
@@ -77,6 +77,7 @@ interface Props {
77
77
  borderColor?: string;
78
78
  loadingStyle?: ViewStyle;
79
79
  theme?: any;
80
+ textProps?: any
80
81
  }
81
82
 
82
83
  const OButton = (props: Props): React.ReactElement => {
@@ -84,7 +85,7 @@ const OButton = (props: Props): React.ReactElement => {
84
85
  return (
85
86
  <View style={props.parentStyle}>
86
87
  <StyledButtonDisabled style={props.style}>
87
- <StyledTextDisabled style={props.textStyle}>
88
+ <StyledTextDisabled style={props.textStyle} {...props.textProps}>
88
89
  {props.text}
89
90
  </StyledTextDisabled>
90
91
  </StyledButtonDisabled>
@@ -112,7 +113,7 @@ const OButton = (props: Props): React.ReactElement => {
112
113
  <StyledImage style={{transform: [{scaleX: I18nManager.isRTL ? -1 : 1}], ...props.imgLeftStyle}} source={props.imgLeftSrc} />
113
114
  ) : null}
114
115
  {props.text ? (
115
- <StyledText style={props.textStyle}>{props.text}</StyledText>
116
+ <StyledText style={props.textStyle} {...props.textProps}>{props.text}</StyledText>
116
117
  ) : null}
117
118
  {props.imgRightSrc ? (
118
119
  <EndImage style={props.imgRightStyle} source={props.imgRightSrc} />
package/src/config.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "app_id": "react-native-app",
3
3
  "notification_app": "orderingapp",
4
4
  "app_name": "Ordering",
5
- "project": "reactdemo",
5
+ "project": "luisv4",
6
6
  "api": {
7
7
  "url": "https://apiv4.ordering.co",
8
8
  "language": "en",
@@ -13,6 +13,7 @@ import { AddressFormParams } from '../../types'
13
13
  import { getTraduction } from '../../utils'
14
14
  import { GoogleMap } from '../GoogleMap'
15
15
  import NavBar from '../NavBar'
16
+ import { Container } from '../../layouts/Container';
16
17
 
17
18
  import {
18
19
  AddressFormContainer,
@@ -398,13 +399,13 @@ const AddressFormUI = (props: AddressFormParams) => {
398
399
  }, [])
399
400
 
400
401
  return (
401
- <>
402
+ <Container>
402
403
  <NavBar
403
404
  title={t('WHERE_DO_WE_DELIVERY', 'Where do we delivery?')}
404
405
  titleAlign={'center'}
405
406
  onActionLeft={goToBack}
406
407
  showCall={false}
407
- style={{ paddingHorizontal: 14 }}
408
+ style={{ paddingHorizontal: 0, marginHorizontal: -7 }}
408
409
  />
409
410
  <TouchableWithoutFeedback onPress={Keyboard.dismiss}>
410
411
  <AddressFormContainer
@@ -650,7 +651,7 @@ const AddressFormUI = (props: AddressFormParams) => {
650
651
  <Spinner visible={saveMapLocation} />
651
652
  </AddressFormContainer>
652
653
  </TouchableWithoutFeedback>
653
- </>
654
+ </Container>
654
655
  )
655
656
  }
656
657
 
@@ -2,7 +2,7 @@ import styled from 'styled-components/native'
2
2
 
3
3
  export const AddressFormContainer = styled.View`
4
4
  flex: 1;
5
- padding: 5px 40px;
5
+ padding-vertical: 5px;
6
6
  background-color: ${(props: any) => props.theme.colors.backgroundPage};
7
7
  justify-content: space-between;
8
8
  `
@@ -88,9 +88,9 @@ const ForgotPasswordUI = (props: any) => {
88
88
  onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
89
89
  showCall={false}
90
90
  paddingTop={0}
91
- style={{paddingStart: 20}}
91
+ btnStyle={{marginStart: -6, paddingEnd: 10}}
92
92
  />
93
- <Container style={{ paddingHorizontal: 20}}>
93
+ <Container>
94
94
  <FormSide>
95
95
  <OText
96
96
  color={theme.colors.textSecondary}
@@ -1,7 +1,7 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { useLanguage, useOrder, useApi, useSession, useUtils } from 'ordering-components/native';
3
3
  import { useTheme } from 'styled-components/native';
4
- import { StyleSheet, View, Dimensions, TextStyle, Animated, PanResponder, KeyboardAvoidingView, Platform } from 'react-native';
4
+ import { StyleSheet, View, Dimensions, TextStyle, Animated, PanResponder, KeyboardAvoidingView, Platform, BackHandler } from 'react-native';
5
5
  import { OBottomPopup, OButton, OIcon, OText } from '../shared';
6
6
  import { BottomPopup, LogoWrapper, Slogan } from './styles';
7
7
  import { LanguageSelector } from '../LanguageSelector'
@@ -11,6 +11,7 @@ import { ScrollView } from 'react-native-gesture-handler';
11
11
  import { LoginForm } from '../LoginForm';
12
12
  import { SignupForm } from '../SignupForm';
13
13
  import Modal from 'react-native-modal';
14
+ import { useFocusEffect } from '@react-navigation/core';
14
15
 
15
16
  const windowHeight = Dimensions.get('window').height
16
17
 
@@ -151,6 +152,25 @@ export const Home = (props: any) => {
151
152
  resetPositionAnim.start();
152
153
  }, [])
153
154
 
155
+ useFocusEffect(
156
+ React.useCallback(() => {
157
+ const onBackPress = () => {
158
+ if (openLogin) {
159
+ setOpenLogin(false)
160
+ return true;
161
+ } else if (openSignUp) {
162
+ setOpenSignUp(false)
163
+ return true;
164
+ } else {
165
+ return false;
166
+ }
167
+ };
168
+ BackHandler.addEventListener('hardwareBackPress', onBackPress);
169
+ return () =>
170
+ BackHandler.removeEventListener('hardwareBackPress', onBackPress);
171
+ }, [openLogin, openSignUp])
172
+ );
173
+
154
174
  return (
155
175
  <>
156
176
  <View style={styles.container}>
@@ -74,7 +74,7 @@ const BusinessMenu = (props:any): React.ReactElement => {
74
74
  <Container nopadding nestedScrollEnabled>
75
75
  <View style={{ paddingTop: 20 }}>
76
76
  <NavBar
77
- title={t('MENU', 'Menu')}
77
+ title={t('MENU_V21', 'Menu')}
78
78
  onActionLeft={goToBack}
79
79
  includeOrderTypeSelector
80
80
  rightComponent={cart && (
@@ -90,7 +90,7 @@ const CategoriesMenu = (props: any): React.ReactElement => {
90
90
  <Container nopadding nestedScrollEnabled>
91
91
  <View style={{ paddingTop: 20 }}>
92
92
  <NavBar
93
- title={t('CATEGORY', 'Category')}
93
+ title={t('CATEGORY_X_ID', 'Category')}
94
94
  onActionLeft={goToBack}
95
95
  rightComponent={cart && (
96
96
  <TouchableOpacity
@@ -110,13 +110,13 @@ const CustomerName = (props: Props): React.ReactElement => {
110
110
  name="name"
111
111
  rules={{
112
112
  required: t(
113
- 'VALIDATION_ERROR_CUSTOMER_NAME_REQUIRED',
113
+ 'VALIDATION_ERROR_REQUIRED',
114
114
  'The field Customer Name is required',
115
- ).replace('_attribute_', t('CUSTOMER_NAME', 'Customer Name')),
115
+ ).replace('_attribute_', t('REQUEST_COLLECTION_CUSTOMER_NAME', 'Customer Name')),
116
116
  pattern: {
117
117
  value: /^[a-zA-Z áéíóúüñçÁÉÍÓÚÜÑÇ]+$/i,
118
118
  message: t(
119
- 'INVALID_ERROR_NAME',
119
+ 'INVALID_ERROR',
120
120
  'Invalid name',
121
121
  ).replace('_attribute_', t('NAME', 'Name')),
122
122
  }
@@ -160,7 +160,7 @@ const PaymentOptionsUI = (props: any) => {
160
160
  ),
161
161
  bgImage: theme.images.general.carddelivery,
162
162
  icon: theme.images.general.pushPin,
163
- callToActionText: t("LET'S GO", "Let's go"),
163
+ callToActionText: t("LETS_GO", "Let's go"),
164
164
  onClick: () => onSelectPaymethod(supportedMethods[cardOnDeliveryIndex], false),
165
165
  ...supportedMethods[cardOnDeliveryIndex],
166
166
  }
@@ -5,6 +5,8 @@ import {
5
5
  TouchableOpacity,
6
6
  Keyboard,
7
7
  TouchableWithoutFeedback,
8
+ KeyboardAvoidingView,
9
+ Platform,
8
10
  } from 'react-native';
9
11
  import {
10
12
  AddressForm as AddressFormController,
@@ -35,6 +37,7 @@ import {
35
37
  FormInput,
36
38
  } from './styles';
37
39
  import { GPSButton } from '../GPSButton';
40
+ import { ScrollView } from 'react-native-gesture-handler';
38
41
 
39
42
  const inputNames = [
40
43
  { name: 'address', code: 'Address' },
@@ -94,6 +97,7 @@ const AddressFormUI = (props: AddressFormParams) => {
94
97
  marginBottom: 20,
95
98
  height: 104,
96
99
  maxHeight: 104,
100
+ minHeight: 104,
97
101
  textAlignVertical: 'top',
98
102
  alignItems: 'flex-start',
99
103
  },
@@ -491,7 +495,7 @@ const AddressFormUI = (props: AddressFormParams) => {
491
495
  }, [orderState.loading]);
492
496
 
493
497
  return (
494
- <>
498
+ <ScrollView>
495
499
  <NavBar
496
500
  title={t('WHERE_DO_WE_DELIVERY', 'Where do we delivery?')}
497
501
  titleAlign={'center'}
@@ -759,29 +763,27 @@ const AddressFormUI = (props: AddressFormParams) => {
759
763
  )}
760
764
  />
761
765
  </FormInput>
762
- {!isKeyboardShow && (
763
- <IconsContainer>
764
- {tagsName.map((tag) => (
765
- <TouchableOpacity
766
- key={tag.value}
767
- onPress={() => handleAddressTag(tag.value)}>
768
- <View
769
- style={{
770
- ...styles.iconContainer,
771
- }}>
772
- <OIcon
773
- src={tag.icon}
774
- width={24}
775
- color={
776
- addressTag === tag.value ?
777
- theme.colors.primary : theme.colors.disabled
778
- }
779
- />
780
- </View>
781
- </TouchableOpacity>
782
- ))}
783
- </IconsContainer>
784
- )}
766
+ <IconsContainer>
767
+ {tagsName.map((tag) => (
768
+ <TouchableOpacity
769
+ key={tag.value}
770
+ onPress={() => handleAddressTag(tag.value)}>
771
+ <View
772
+ style={{
773
+ ...styles.iconContainer,
774
+ }}>
775
+ <OIcon
776
+ src={tag.icon}
777
+ width={24}
778
+ color={
779
+ addressTag === tag.value ?
780
+ theme.colors.primary : theme.colors.disabled
781
+ }
782
+ />
783
+ </View>
784
+ </TouchableOpacity>
785
+ ))}
786
+ </IconsContainer>
785
787
  </View>
786
788
 
787
789
  <View>
@@ -841,7 +843,7 @@ const AddressFormUI = (props: AddressFormParams) => {
841
843
  <Spinner visible={saveMapLocation} />
842
844
  </AddressFormContainer>
843
845
  </TouchableWithoutFeedback>
844
- </>
846
+ </ScrollView>
845
847
  );
846
848
  };
847
849
 
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { View, StyleSheet } from 'react-native';
2
+ import { View, StyleSheet, KeyboardAvoidingView } from 'react-native';
3
3
  import { initStripe, useConfirmPayment } from '@stripe/stripe-react-native';
4
4
 
5
5
  import {
@@ -31,7 +31,7 @@ const ForgotPasswordUI = (props: any) => {
31
31
  inputStyle: {
32
32
  marginBottom: 25,
33
33
  borderWidth: 1,
34
- borderColor: theme.theme.colors.border,
34
+ borderColor: theme.colors.border,
35
35
  minHeight: 40,
36
36
  borderRadius: 7.6,
37
37
  }
@@ -176,7 +176,7 @@ export const GoogleMap = (props: GoogleMapsParams) => {
176
176
  return (
177
177
  <>
178
178
  <MapView
179
- provider={Platform.OS === "android" ? PROVIDER_GOOGLE : PROVIDER_DEFAULT}
179
+ provider={PROVIDER_GOOGLE}
180
180
  initialRegion={region}
181
181
  style={styles.map}
182
182
  onRegionChangeComplete={!readOnly ? (coordinates) => handleChangeRegion(coordinates) : () => { }}
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { View, StyleSheet, useWindowDimensions } from 'react-native';
2
+ import { View, StyleSheet, useWindowDimensions, Keyboard } from 'react-native';
3
3
  import { useLanguage, useSession } from 'ordering-components/native';
4
4
  import {
5
5
  StripeProvider,
@@ -35,6 +35,7 @@ const StripeElementsFormUI = (props: any) => {
35
35
  const [createPmLoading, setCreatePmLoading] = useState(false);
36
36
  const { height } = useWindowDimensions();
37
37
  const { top, bottom } = useSafeAreaInsets();
38
+ const [isKeyboardShow, setIsKeyboardShow] = useState(false);
38
39
 
39
40
  const billingDetails = {
40
41
  name: `${user.name} ${user.lastname}`,
@@ -67,7 +68,7 @@ const StripeElementsFormUI = (props: any) => {
67
68
  // : error.message
68
69
  // );
69
70
  // }
70
- } catch (error) {
71
+ } catch (error: any) {
71
72
  setErrors(error?.message || error?.toString());
72
73
  }
73
74
  }
@@ -95,7 +96,7 @@ const StripeElementsFormUI = (props: any) => {
95
96
  : error.message
96
97
  );
97
98
  }
98
- } catch (error) {
99
+ } catch (error: any) {
99
100
  setErrors(error?.message || error?.toString());
100
101
  }
101
102
  };
@@ -111,8 +112,29 @@ const StripeElementsFormUI = (props: any) => {
111
112
  }
112
113
  }, [card])
113
114
 
115
+ useEffect(() => {
116
+ const keyboardDidShowListener = Keyboard.addListener(
117
+ 'keyboardDidShow',
118
+ () => {
119
+ setIsKeyboardShow(true);
120
+ console.log('----- keyboard showing ----')
121
+ },
122
+ );
123
+ const keyboardDidHideListener = Keyboard.addListener(
124
+ 'keyboardDidHide',
125
+ () => {
126
+ setIsKeyboardShow(false);
127
+ console.log('----- keyboard hidding ----')
128
+ },
129
+ );
130
+ return () => {
131
+ keyboardDidShowListener.remove();
132
+ keyboardDidHideListener.remove();
133
+ };
134
+ }, []);
135
+
114
136
  return (
115
- <View style={{ ...styles.container, ...{ height: height - top - bottom - 60 } }}>
137
+ <View style={{ ...styles.container, height: height - top - bottom - 60 - (isKeyboardShow ? 250 : 0) }}>
116
138
  {publicKey ? (
117
139
  <View style={{ flex: 1 }}>
118
140
  <StripeProvider publishableKey={publicKey}>
@@ -10,7 +10,7 @@ import { useTheme } from 'styled-components/native';
10
10
  import { useForm } from 'react-hook-form';
11
11
  import { launchImageLibrary } from 'react-native-image-picker';
12
12
  import Spinner from 'react-native-loading-spinner-overlay';
13
- import { StyleSheet, View } from 'react-native';
13
+ import { KeyboardAvoidingView, Platform, StyleSheet, View } from 'react-native';
14
14
  import { ProfileParams } from '../../types';
15
15
  import { UserFormDetailsUI } from '../UserFormDetails';
16
16
 
@@ -208,38 +208,39 @@ const ProfileUI = (props: ProfileParams) => {
208
208
  }, [user?.country_phone_code]);
209
209
 
210
210
  return (
211
- <Container noPadding>
212
- <NavBar
213
- onActionLeft={() => navigation.goBack()}
214
- btnStyle={{ paddingStart: 0 }}
215
- title={t('ACCOUNT', 'Account')}
216
- isVertical
217
- style={styles.pagePadding}
218
- />
219
- <CenterView style={styles.pagePadding}>
220
- <View style={styles.photo}>
221
- <OIcon
222
- url={user?.photo}
223
- src={!user?.photo && theme.images.general.user}
224
- width={79}
225
- height={79}
211
+ <KeyboardAvoidingView behavior={Platform.OS == 'ios' ? 'padding' : 'height'} enabled style={{ flex: 1, flexDirection: 'column',justifyContent: 'center'}}>
212
+ <Container noPadding>
213
+ <NavBar
214
+ onActionLeft={() => navigation.goBack()}
215
+ btnStyle={{ paddingStart: 0 }}
216
+ title={t('ACCOUNT', 'Account')}
217
+ isVertical
218
+ style={styles.pagePadding}
219
+ />
220
+ <CenterView style={styles.pagePadding}>
221
+ <View style={styles.photo}>
222
+ <OIcon
223
+ url={user?.photo}
224
+ src={!user?.photo && theme.images.general.user}
225
+ width={79}
226
+ height={79}
227
+ />
228
+ </View>
229
+ <OIconButton
230
+ icon={theme.images.general.camera}
231
+ borderColor={theme.colors.clear}
232
+ iconStyle={{ width: 16, height: 16 }}
233
+ style={{ maxWidth: 40, position: 'absolute', bottom: -2, alignSelf: 'center' }}
234
+ onClick={() => handleImagePicker()}
226
235
  />
236
+ </CenterView>
237
+ <View style={{ height: 8, marginLeft: -40, marginRight: -40, backgroundColor: theme.colors.backgroundGray100, marginVertical: 32, zIndex: 10 }} />
238
+ <Spinner visible={formState?.loading} />
239
+ <View style={styles.pagePadding}>
240
+ <UserFormDetailsUI {...props} isEdit />
227
241
  </View>
228
- <OIconButton
229
- icon={theme.images.general.camera}
230
- borderColor={theme.colors.clear}
231
- iconStyle={{ width: 16, height: 16 }}
232
- style={{ maxWidth: 40, position: 'absolute', bottom: -2, alignSelf: 'center' }}
233
- onClick={() => handleImagePicker()}
234
- />
235
- </CenterView>
236
- <View style={{ height: 8, marginLeft: -40, marginRight: -40, backgroundColor: theme.colors.backgroundGray100, marginVertical: 32, zIndex: 10 }} />
237
- <Spinner visible={formState?.loading} />
238
- <View style={styles.pagePadding}>
239
- <UserFormDetailsUI {...props} isEdit />
240
- </View>
241
-
242
- </Container>
242
+ </Container>
243
+ </KeyboardAvoidingView>
243
244
  );
244
245
  };
245
246