ordering-ui-react-native 0.14.95 → 0.14.97-release

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 (125) hide show
  1. package/package.json +6 -3
  2. package/src/DeliveryApp.tsx +32 -1
  3. package/src/components/BusinessTypeFilter/index.tsx +9 -2
  4. package/src/components/BusinessTypeFilter/styles.tsx +1 -1
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/Cart/index.tsx +1 -1
  7. package/src/components/Checkout/index.tsx +0 -1
  8. package/src/components/Home/index.tsx +3 -5
  9. package/src/components/LanguageSelector/index.tsx +65 -97
  10. package/src/components/LanguageSelector/styles.tsx +4 -17
  11. package/src/components/Messages/index.tsx +38 -30
  12. package/src/components/MomentOption/index.tsx +3 -1
  13. package/src/components/OrderDetails/index.tsx +26 -5
  14. package/src/components/PaymentOptions/index.tsx +7 -16
  15. package/src/components/PaymentOptionsWebView/index.tsx +123 -124
  16. package/src/components/ProductForm/index.tsx +1 -1
  17. package/src/components/ProductForm/styles.tsx +1 -0
  18. package/src/components/StripeElementsForm/index.tsx +27 -48
  19. package/src/components/UserProfileForm/index.tsx +35 -1
  20. package/src/components/VerifyPhone/styles.tsx +1 -2
  21. package/src/config.json +0 -2
  22. package/src/pages/Checkout.tsx +1 -1
  23. package/src/types/index.tsx +2 -9
  24. package/src/utils/index.tsx +2 -1
  25. package/themes/business/index.tsx +2 -0
  26. package/themes/business/src/components/Chat/index.tsx +32 -31
  27. package/themes/business/src/components/OrderDetails/Business.tsx +1 -0
  28. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +85 -17
  29. package/themes/business/src/components/OrdersListManager/index.tsx +874 -0
  30. package/themes/business/src/components/OrdersListManager/styles.tsx +123 -0
  31. package/themes/business/src/components/OrdersListManager/utils.tsx +216 -0
  32. package/themes/business/src/components/OrdersOption/index.tsx +70 -116
  33. package/themes/business/src/components/OrdersOption/styles.tsx +2 -5
  34. package/themes/business/src/components/PreviousOrders/index.tsx +80 -23
  35. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  36. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  37. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  38. package/themes/kiosk/src/components/BusinessController/index.tsx +27 -6
  39. package/themes/kiosk/src/components/BusinessController/styles.tsx +1 -1
  40. package/themes/kiosk/src/components/BusinessProductsListing/index.tsx +51 -24
  41. package/themes/kiosk/src/components/Cart/index.tsx +1 -1
  42. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +1 -1
  43. package/themes/kiosk/src/components/CartBottomSheet/styles.tsx +1 -1
  44. package/themes/kiosk/src/components/CartContent/index.tsx +13 -3
  45. package/themes/kiosk/src/components/CartItem/index.tsx +20 -8
  46. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +7 -5
  47. package/themes/kiosk/src/components/CustomerName/index.tsx +89 -88
  48. package/themes/kiosk/src/components/Intro/index.tsx +13 -13
  49. package/themes/kiosk/src/components/LanguageSelector/index.tsx +12 -8
  50. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  51. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  52. package/themes/kiosk/src/components/OrderDetails/index.tsx +2 -2
  53. package/themes/kiosk/src/components/OrderSummary/index.tsx +1 -1
  54. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +10 -12
  55. package/themes/kiosk/src/components/ProductForm/index.tsx +172 -124
  56. package/themes/kiosk/src/components/ProductForm/styles.tsx +1 -1
  57. package/themes/kiosk/src/components/ProductOption/index.tsx +1 -0
  58. package/themes/kiosk/src/components/ProductOption/styles.tsx +1 -0
  59. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +48 -34
  60. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  61. package/themes/kiosk/src/components/shared/OCard.tsx +112 -78
  62. package/themes/original/index.tsx +28 -2
  63. package/themes/original/src/components/AddressForm/index.tsx +15 -10
  64. package/themes/original/src/components/AddressList/index.tsx +27 -1
  65. package/themes/original/src/components/AnalyticsSegment/index.tsx +127 -0
  66. package/themes/original/src/components/BusinessBasicInformation/index.tsx +100 -45
  67. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +28 -1
  68. package/themes/original/src/components/BusinessController/index.tsx +36 -22
  69. package/themes/original/src/components/BusinessMenuList/index.tsx +14 -5
  70. package/themes/original/src/components/BusinessPreorder/index.tsx +142 -121
  71. package/themes/original/src/components/BusinessProductsCategories/index.tsx +7 -5
  72. package/themes/original/src/components/BusinessProductsList/index.tsx +52 -8
  73. package/themes/original/src/components/BusinessProductsListing/index.tsx +21 -15
  74. package/themes/original/src/components/BusinessReviews/index.tsx +4 -3
  75. package/themes/original/src/components/BusinessTypeFilter/index.tsx +2 -13
  76. package/themes/original/src/components/BusinessesListing/index.tsx +41 -58
  77. package/themes/original/src/components/Cart/index.tsx +41 -8
  78. package/themes/original/src/components/CartContent/index.tsx +2 -2
  79. package/themes/original/src/components/Checkout/index.tsx +56 -32
  80. package/themes/original/src/components/Checkout/styles.tsx +7 -0
  81. package/themes/original/src/components/CouponControl/index.tsx +1 -0
  82. package/themes/original/src/components/DriverTips/index.tsx +1 -1
  83. package/themes/original/src/components/ForgotPasswordForm/index.tsx +8 -12
  84. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +105 -90
  85. package/themes/original/src/components/LoginForm/index.tsx +83 -68
  86. package/themes/original/src/components/Messages/index.tsx +52 -45
  87. package/themes/original/src/components/Messages/styles.tsx +1 -3
  88. package/themes/original/src/components/MomentOption/index.tsx +127 -152
  89. package/themes/original/src/components/MomentOption/styles.tsx +42 -18
  90. package/themes/original/src/components/OrderDetails/index.tsx +103 -124
  91. package/themes/original/src/components/OrderDetails/styles.tsx +3 -1
  92. package/themes/original/src/components/OrderProgress/index.tsx +5 -6
  93. package/themes/original/src/components/OrderSummary/index.tsx +34 -1
  94. package/themes/original/src/components/OrdersOption/index.tsx +15 -46
  95. package/themes/original/src/components/OrdersOption/styles.tsx +0 -6
  96. package/themes/original/src/components/PaymentOptions/index.tsx +24 -25
  97. package/themes/original/src/components/PhoneInputNumber/index.tsx +15 -8
  98. package/themes/original/src/components/PlaceSpot/index.tsx +114 -0
  99. package/themes/original/src/components/PlaceSpot/styles.tsx +11 -0
  100. package/themes/original/src/components/PreviousOrders/index.tsx +19 -13
  101. package/themes/original/src/components/ProductForm/index.tsx +153 -104
  102. package/themes/original/src/components/ProductForm/styles.tsx +5 -3
  103. package/themes/original/src/components/ProductOptionSubOption/index.tsx +6 -1
  104. package/themes/original/src/components/ReviewOrder/index.tsx +10 -9
  105. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  106. package/themes/original/src/components/SearchBar/index.tsx +4 -10
  107. package/themes/original/src/components/SignupForm/index.tsx +173 -154
  108. package/themes/original/src/components/SingleProductCard/index.tsx +7 -22
  109. package/themes/original/src/components/StripeElementsForm/index.tsx +55 -72
  110. package/themes/original/src/components/UpsellingProducts/index.tsx +6 -6
  111. package/themes/original/src/components/UserDetails/index.tsx +4 -95
  112. package/themes/original/src/components/UserFormDetails/index.tsx +2 -14
  113. package/themes/original/src/components/UserProfile/index.tsx +16 -11
  114. package/themes/original/src/components/UserProfileForm/index.tsx +16 -8
  115. package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
  116. package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
  117. package/themes/original/src/components/shared/HeaderTitle.tsx +20 -0
  118. package/themes/original/src/components/shared/OInput.tsx +1 -2
  119. package/themes/original/src/components/shared/index.tsx +2 -0
  120. package/themes/original/src/types/index.tsx +25 -28
  121. package/themes/single-business/src/components/OrderTypeSelector/index.tsx +5 -5
  122. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  123. package/src/components/StripeMethodForm/index.tsx +0 -163
  124. package/themes/original/src/components/BusinessListingSearch/index.tsx +0 -469
  125. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -76
@@ -1,8 +1,8 @@
1
- import React from 'react';
1
+ import React, { useEffect } from 'react';
2
2
  import {
3
- BusinessList as BusinessesListingController,
3
+ BusinessList as BusinessesListingController,
4
4
  useLanguage,
5
- useOrder
5
+ useOrder
6
6
  } from 'ordering-components/native';
7
7
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
8
8
  import { View, ScrollView, Platform, Dimensions } from 'react-native';
@@ -18,116 +18,131 @@ const HighestRatedBusinessesUI = (props: HighestRatedBusinessesParams) => {
18
18
  const {
19
19
  businessesList,
20
20
  onBusinessClick,
21
- navigation
21
+ navigation,
22
+ isLoading,
23
+ getBusinesses
22
24
  } = props;
23
25
 
24
26
  const [, t] = useLanguage()
25
- const [orderState] = useOrder();
27
+ const [orderState] = useOrder()
26
28
 
27
29
  const windowWidth = Dimensions.get('window').width;
28
30
 
31
+ useEffect(() => {
32
+ if (businessesList?.loading || !isLoading) return
33
+ getBusinesses(true)
34
+ }, [isLoading])
35
+
29
36
  return (
30
37
  <>
31
- <ListWrapper>
32
- <OText size={16} mBottom={5} weight={Platform.OS === 'ios' ? '600' : 'bold'}>{t('HIGHEST_RATED', 'Highest rated')}</OText>
33
- <OText size={12}>{t('TOP_RATINGS_AND_GREAT_SERVICE', 'Top ratings and great service')}</OText>
34
- <ScrollView
35
- showsHorizontalScrollIndicator={false}
36
- nestedScrollEnabled
37
- horizontal
38
- style={{ height: 300 }}
39
- >
40
- {businessesList.loading ? (
41
- <>
42
- {[
43
- ...Array(10).keys()
44
- ].map((item, i) => (
45
- <Placeholder
46
- Animation={Fade}
47
- key={i}
48
- style={{
49
- marginTop: 20,
50
- width: windowWidth - 100,
51
- paddingHorizontal: 5,
52
- height: '100%'
53
- }}>
54
- <View style={{ width: '100%' }}>
55
- <PlaceholderLine
56
- height={150}
57
- style={{ marginBottom: 20, borderRadius: 8 }}
58
- />
59
- <View style={{ paddingHorizontal: 10 }}>
60
- <View
61
- style={{
62
- flexDirection: 'row',
63
- justifyContent: 'space-between',
64
- }}>
65
- <PlaceholderLine
66
- height={15}
67
- width={40}
68
- style={{ marginBottom: 15 }}
69
- />
70
- <PlaceholderLine
71
- height={15}
72
- width={20}
73
- style={{ marginBottom: 15 }}
74
- />
75
- </View>
38
+
39
+ {businessesList.loading ? (
40
+ <>
41
+ <ScrollView
42
+ showsHorizontalScrollIndicator={false}
43
+ nestedScrollEnabled
44
+ horizontal
45
+ style={{ height: 300, paddingHorizontal: 40 }}
46
+ >
47
+ {[
48
+ ...Array(10).keys()
49
+ ].map((item, i) => (
50
+ <Placeholder
51
+ Animation={Fade}
52
+ key={i}
53
+ style={{
54
+ marginTop: 20,
55
+ width: windowWidth - 100,
56
+ paddingHorizontal: 5,
57
+ height: '100%'
58
+ }}>
59
+ <View style={{ width: '100%' }}>
60
+ <PlaceholderLine
61
+ height={150}
62
+ style={{ marginBottom: 20, borderRadius: 8 }}
63
+ />
64
+ <View style={{ paddingHorizontal: 10 }}>
65
+ <View
66
+ style={{
67
+ flexDirection: 'row',
68
+ justifyContent: 'space-between',
69
+ }}>
76
70
  <PlaceholderLine
77
71
  height={15}
78
- width={30}
79
- style={{ marginBottom: 10 }}
72
+ width={40}
73
+ style={{ marginBottom: 15 }}
80
74
  />
81
75
  <PlaceholderLine
82
76
  height={15}
83
- width={80}
84
- style={{ marginBottom: 10 }}
77
+ width={20}
78
+ style={{ marginBottom: 15 }}
85
79
  />
86
80
  </View>
81
+ <PlaceholderLine
82
+ height={15}
83
+ width={30}
84
+ style={{ marginBottom: 10 }}
85
+ />
86
+ <PlaceholderLine
87
+ height={15}
88
+ width={80}
89
+ style={{ marginBottom: 10 }}
90
+ />
87
91
  </View>
88
- </Placeholder>
89
- ))}
90
- </>
91
- ) : (
92
- <>
93
- {businessesList.businesses.length > 0 ? (
94
- businessesList.businesses?.map(
95
- (business: any) => (
96
- <View
97
- key={business.id}
98
- style={{
99
- width: windowWidth - 100,
100
- paddingHorizontal: 5,
101
- height: '100%'
102
- }}
103
- >
104
- <BusinessController
105
- business={business}
106
- isBusinessOpen={business?.open}
107
- handleCustomClick={onBusinessClick}
108
- orderType={orderState?.options?.type}
109
- navigation={navigation}
110
- />
111
- </View>
92
+ </View>
93
+ </Placeholder>
94
+ ))}
95
+ </ScrollView>
96
+ </>
97
+ ) : (
98
+ <>
99
+ {businessesList.businesses.length > 0 && (
100
+ <ListWrapper>
101
+ <OText size={16} mBottom={5} weight={Platform.OS === 'ios' ? '600' : 'bold'}>{t('HIGHEST_RATED', 'Highest rated')}</OText>
102
+ <OText size={12}>{t('TOP_RATINGS_AND_GREAT_SERVICE', 'Top ratings and great service')}</OText>
103
+ <ScrollView
104
+ showsHorizontalScrollIndicator={false}
105
+ nestedScrollEnabled
106
+ horizontal
107
+ style={{ height: 300 }}
108
+ >
109
+ {
110
+ businessesList.businesses?.map(
111
+ (business: any) => (
112
+ <View
113
+ key={business.id}
114
+ style={{
115
+ width: windowWidth - 100,
116
+ paddingHorizontal: 5,
117
+ height: '100%'
118
+ }}
119
+ >
120
+ <BusinessController
121
+ business={business}
122
+ isBusinessOpen={business?.open}
123
+ handleCustomClick={onBusinessClick}
124
+ orderType={orderState?.options?.type}
125
+ navigation={navigation}
126
+ />
127
+ </View>
128
+ )
112
129
  )
113
- )
114
- ) : (
115
- <NotFoundSource />
116
- )}
117
- </>
130
+ }
131
+ </ScrollView>
132
+ </ListWrapper>
118
133
  )}
119
- </ScrollView>
120
- </ListWrapper>
134
+ </>
135
+ )}
121
136
  </>
122
137
  )
123
138
  }
124
139
 
125
140
  export const HighestRatedBusinesses = (props: any) => {
126
- const highestRatedBusinessesProps = {
127
- ...props,
128
- UIComponent: HighestRatedBusinessesUI,
141
+ const highestRatedBusinessesProps = {
142
+ ...props,
143
+ UIComponent: HighestRatedBusinessesUI,
129
144
  initialOrderByValue: 'rating'
130
- };
145
+ };
131
146
 
132
- return <BusinessesListingController {...highestRatedBusinessesProps} />;
147
+ return <BusinessesListingController {...highestRatedBusinessesProps} />;
133
148
  };
@@ -67,7 +67,7 @@ const LoginFormUI = (props: LoginParams) => {
67
67
  const [, t] = useLanguage();
68
68
  const [{ configs }] = useConfig();
69
69
  const [, { login }] = useSession();
70
- const { control, handleSubmit, errors } = useForm();
70
+ const { control, handleSubmit, errors, reset, register, setValue } = useForm();
71
71
  const [passwordSee, setPasswordSee] = useState(false);
72
72
  const [isLoadingVerifyModal, setIsLoadingVerifyModal] = useState(false);
73
73
  const [isModalVisible, setIsModalVisible] = useState(false);
@@ -91,7 +91,7 @@ const LoginFormUI = (props: LoginParams) => {
91
91
  inputStyle: {
92
92
  marginBottom: 28,
93
93
  borderWidth: 1,
94
- borderColor: theme.colors.border,
94
+ // borderColor: theme.colors.border,
95
95
  borderRadius: 7.6,
96
96
  },
97
97
  line: {
@@ -189,33 +189,21 @@ const LoginFormUI = (props: LoginParams) => {
189
189
  }, [verifyPhoneState]);
190
190
 
191
191
  useEffect(() => {
192
- if (Object.keys(errors).length > 0) {
193
- // Convert all errors in one string to show in toast provider
194
- const list = Object.values(errors);
195
- let stringError = '';
196
- if (phoneInputData.error) {
197
- list.unshift({ message: phoneInputData.error });
198
- }
199
- if (
200
- loginTab === 'cellphone' &&
201
- !phoneInputData.error &&
202
- !phoneInputData.phone.country_phone_code &&
203
- !phoneInputData.phone.cellphone
204
- ) {
205
- list.unshift({
206
- message: t(
207
- 'VALIDATION_ERROR_MOBILE_PHONE_REQUIRED',
208
- 'The field Mobile phone is required.',
209
- ),
210
- });
211
- }
212
- list.map((item: any, i: number) => {
213
- stringError +=
214
- i + 1 === list.length ? `- ${item.message}` : `- ${item.message}\n`;
215
- });
216
- showToast(ToastType.Error, stringError);
217
- }
218
- }, [errors]);
192
+ if (phoneInputData?.phone?.cellphone) setValue('cellphone', phoneInputData?.phone?.cellphone, '')
193
+ else setValue('cellphone', '')
194
+ }, [phoneInputData?.phone?.cellphone])
195
+
196
+ useEffect(() => {
197
+ register('cellphone', {
198
+ required: loginTab === 'cellphone'
199
+ ? t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Mobile phone is required').replace('_attribute_', t('CELLPHONE', 'Cellphone'))
200
+ : null
201
+ })
202
+ }, [register])
203
+
204
+ useEffect(() => {
205
+ reset()
206
+ }, [loginTab])
219
207
 
220
208
  return (
221
209
  <Container>
@@ -284,43 +272,58 @@ const LoginFormUI = (props: LoginParams) => {
284
272
  {(useLoginByCellphone || useLoginByEmail) && (
285
273
  <FormInput>
286
274
  {useLoginByEmail && loginTab === 'email' && (
287
- <Controller
288
- control={control}
289
- render={({ onChange, value }: any) => (
290
- <OInput
291
- placeholder={t('EMAIL', 'Email')}
292
- style={loginStyle.inputStyle}
293
- icon={theme.images.general.email}
294
- onChange={(e: any) => {
295
- handleChangeInputEmail(e, onChange);
296
- }}
297
- value={value}
298
- autoCapitalize="none"
299
- autoCorrect={false}
300
- type="email-address"
301
- autoCompleteType="email"
302
- returnKeyType="next"
303
- onSubmitEditing={() => passwordRef.current?.focus()}
304
- blurOnSubmit={false}
305
- forwardRef={emailRef}
306
- />
275
+ <>
276
+ {errors?.email && (
277
+ <OText
278
+ size={14}
279
+ color={theme.colors.danger5}
280
+ weight={'normal'}>
281
+ {errors?.email?.message}{errors?.email?.type === 'required' && '*'}
282
+ </OText>
307
283
  )}
308
- name="email"
309
- rules={{
310
- required: t(
311
- 'VALIDATION_ERROR_EMAIL_REQUIRED',
312
- 'The field Email is required',
313
- ).replace('_attribute_', t('EMAIL', 'Email')),
314
- pattern: {
315
- value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
316
- message: t(
317
- 'INVALID_ERROR_EMAIL',
318
- 'Invalid email address',
319
- ).replace('_attribute_', t('EMAIL', 'Email')),
320
- },
321
- }}
322
- defaultValue=""
323
- />
284
+ <Controller
285
+ control={control}
286
+ render={({ onChange, value }: any) => (
287
+ <OInput
288
+ placeholder={t('EMAIL', 'Email')}
289
+ style={loginStyle.inputStyle}
290
+ icon={theme.images.general.email}
291
+ onChange={(e: any) => {
292
+ handleChangeInputEmail(e, onChange);
293
+ }}
294
+ value={value}
295
+ autoCapitalize="none"
296
+ autoCorrect={false}
297
+ type="email-address"
298
+ autoCompleteType="email"
299
+ returnKeyType="next"
300
+ onSubmitEditing={() => passwordRef.current?.focus()}
301
+ blurOnSubmit={false}
302
+ forwardRef={emailRef}
303
+ borderColor={errors?.email ? theme.colors.danger5 : theme.colors.border}
304
+ />
305
+ )}
306
+ name="email"
307
+ rules={{
308
+ required: {
309
+ value: true,
310
+ message: t(
311
+ 'VALIDATION_ERROR_EMAIL_REQUIRED',
312
+ 'The field Email is required',
313
+ ).replace('_attribute_', t('EMAIL', 'Email'))
314
+ },
315
+ pattern: {
316
+ value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
317
+ message: t(
318
+ 'INVALID_ERROR_EMAIL',
319
+ 'Invalid email address',
320
+ ).replace('_attribute_', t('EMAIL', 'Email')),
321
+ }
322
+ }}
323
+ defaultValue=""
324
+ />
325
+ </>
326
+
324
327
  )}
325
328
  {useLoginByCellphone && loginTab === 'cellphone' && (
326
329
  <View style={{ marginBottom: 28 }}>
@@ -331,10 +334,18 @@ const LoginFormUI = (props: LoginParams) => {
331
334
  returnKeyType: 'next',
332
335
  onSubmitEditing: () => passwordRef?.current?.focus?.(),
333
336
  }}
337
+ isStartValidation={errors?.cellphone}
334
338
  />
335
339
  </View>
336
340
  )}
337
-
341
+ {errors?.password && (
342
+ <OText
343
+ size={14}
344
+ color={theme.colors.danger5}
345
+ weight={'normal'}>
346
+ {errors?.password?.message}{errors?.password?.type === 'required' && '*'}
347
+ </OText>
348
+ )}
338
349
  <Controller
339
350
  control={control}
340
351
  render={({ onChange, value }: any) => (
@@ -366,14 +377,18 @@ const LoginFormUI = (props: LoginParams) => {
366
377
  returnKeyType="done"
367
378
  onSubmitEditing={handleSubmit(onSubmit)}
368
379
  blurOnSubmit
380
+ borderColor={errors?.password ? theme.colors.danger5 : theme.colors.border}
369
381
  />
370
382
  )}
371
383
  name="password"
372
384
  rules={{
373
- required: t(
385
+ required: {
386
+ value: true,
387
+ message: t(
374
388
  'VALIDATION_ERROR_PASSWORD_REQUIRED',
375
389
  'The field Password is required',
376
- ).replace('_attribute_', t('PASSWORD', 'Password')),
390
+ ).replace('_attribute_', t('PASSWORD', 'Password'))
391
+ }
377
392
  }}
378
393
  defaultValue=""
379
394
  />
@@ -35,6 +35,8 @@ const ORDER_STATUS: any = {
35
35
  19: 'ORDER_DRIVER_ALMOST_ARRIVED_CUSTOMER',
36
36
  20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
37
37
  21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
38
+ 22: 'ORDER_LOOKING_FOR_DRIVER',
39
+ 23: 'ORDER_DRIVER_ON_WAY'
38
40
  }
39
41
 
40
42
  const filterSpecialStatus = ['prepared_in', 'delivered_in']
@@ -95,28 +97,18 @@ const MessagesUI = (props: MessagesParams) => {
95
97
  }
96
98
 
97
99
  const handleImagePicker = () => {
98
- launchImageLibrary({ mediaType: 'photo', maxHeight: 300, maxWidth: 300, includeBase64: true }, (response: any) => {
99
- if (response.didCancel) {
100
- console.log('User cancelled image picker');
101
- } else if (response.errorMessage) {
102
- console.log('ImagePicker Error: ', response.errorMessage);
100
+ launchImageLibrary({ mediaType: 'photo', maxHeight: 2048, maxWidth: 2048, includeBase64: true }, (response: any) => {
101
+ if (response?.didCancel) {
102
+ showToast(ToastType.Error, t('IMAGE_CANCELLED', 'User cancelled image picker'));
103
+ } else if (response?.errorMessage) {
103
104
  showToast(ToastType.Error, response.errorMessage);
104
105
  } else {
105
- if (Platform.OS === 'ios') {
106
- if (response.uri) {
107
- const url = `data:${response.type};base64,${response.base64}`
108
- setImage && setImage(url);
109
- } else {
110
- showToast(ToastType.Error, t('IMAGE_NOT_FOUND', 'Image not found'));
111
- }
106
+ if (response?.assets?.length > 0) {
107
+ const image = response?.assets[0]
108
+ const url = `data:${image.type};base64,${image.base64}`
109
+ setImage && setImage(url);
112
110
  } else {
113
- if (response?.assets?.length > 0) {
114
- const image = response?.assets[0]
115
- const url = `data:${image.type};base64,${image.base64}`
116
- setImage && setImage(url);
117
- } else {
118
- showToast(ToastType.Error, t('IMAGE_NOT_FOUND', 'Image not found'));
119
- }
111
+ showToast(ToastType.Error, t('IMAGE_NOT_FOUND', 'Image not found'));
120
112
  }
121
113
  }
122
114
  });
@@ -235,7 +227,7 @@ const MessagesUI = (props: MessagesParams) => {
235
227
  {image && (
236
228
  <TouchableOpacity
237
229
  style={{ position: 'absolute', top: -5, right: -5, borderColor: theme.colors.backgroundDark, backgroundColor: theme.colors.white, borderRadius: 25 }}
238
- onPress={() => removeImage()}
230
+ onPress={removeImage}
239
231
  >
240
232
  <MaterialCommunityIcon name='close-circle-outline' color={theme.colors.backgroundDark} size={24} />
241
233
  </TouchableOpacity>
@@ -340,30 +332,34 @@ const MessagesUI = (props: MessagesParams) => {
340
332
  )
341
333
  )
342
334
 
343
- const renderSend = (props: any) => (
344
- <Send
345
- {...props}
346
- disabled={(sendMessage?.loading || (message === '' && !image) || messages?.loading)}
347
- alwaysShowSend
348
- containerStyle={styles.containerSend}
349
- >
350
- <OIconButton
351
- onClick={onSubmit}
352
- style={{
353
- height: 44,
354
- width: 44,
355
- borderRadius: 7.6,
356
- opacity: (sendMessage?.loading || (message === '' && !image) || messages?.loading) ? 0.4 : 1,
357
- borderColor: theme.colors.primary,
358
- backgroundColor: theme.colors.primary,
359
- }}
360
- iconStyle={{ marginTop: 3, marginRight: 2 }}
361
- icon={theme.images.general.enter}
362
- disabled={(sendMessage?.loading || (message === '' && !image) || messages?.loading)}
363
- disabledColor={theme.colors.white}
364
- />
365
- </Send>
366
- )
335
+ const renderSend = (props: any) => {
336
+ const isDisabled = (sendMessage?.loading || (message === '' && !image) || messages?.loading)
337
+ return (
338
+ <Send
339
+ {...props}
340
+ disabled={isDisabled}
341
+ alwaysShowSend
342
+ containerStyle={styles.containerSend}
343
+ >
344
+ <OIconButton
345
+ onClick={onSubmit}
346
+ style={{
347
+ height: 44,
348
+ width: 44,
349
+ borderRadius: 7.6,
350
+ opacity: isDisabled ? 0.2 : 1,
351
+ borderColor: isDisabled ? theme.colors.secondary : theme.colors.primary,
352
+ backgroundColor: isDisabled ? theme.colors.secondary : theme.colors.primary,
353
+ }}
354
+ iconStyle={{ marginTop: 3, marginRight: 2 }}
355
+ icon={theme.images.general.enter}
356
+ iconColor={isDisabled ? '#000' : '#fff'}
357
+ disabled={isDisabled}
358
+ disabledColor={theme.colors.secondary}
359
+ />
360
+ </Send>
361
+ )
362
+ }
367
363
 
368
364
  const renderBubble = (props: any) => (
369
365
  <Bubble
@@ -543,9 +539,20 @@ const styles = StyleSheet.create({
543
539
  })
544
540
 
545
541
  export const Messages = (props: MessagesParams) => {
542
+ const [allMessages, setAllMessages] = useState(props.messages)
543
+
544
+ useEffect(() => {
545
+ setAllMessages(props.messages)
546
+ }, [props.messages])
547
+
546
548
  const MessagesProps = {
547
549
  ...props,
548
- UIComponent: MessagesUI
550
+ UIComponent: MessagesUI,
551
+ messages: allMessages,
552
+ setMessages: (values: any) => {
553
+ props.setMessages && props.setMessages(values)
554
+ setAllMessages(values)
555
+ }
549
556
  }
550
557
  return <MessagesController {...MessagesProps} />
551
558
  }
@@ -1,7 +1,5 @@
1
-
2
1
  import styled, { css } from 'styled-components/native'
3
2
 
4
-
5
3
  export const Wrapper = styled.View`
6
4
  flex: 1;
7
5
  background-color: ${(props: any) => props.theme.colors.white};
@@ -39,4 +37,4 @@ export const MessageTypeItem = styled.View`
39
37
  ${({ active }: any) => active && css`
40
38
  background-color: ${(props: any) => props.theme.colors.whiteGray};
41
39
  `}
42
- `
40
+ `