ordering-ui-react-native 0.16.31 → 0.16.32-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 (199) hide show
  1. package/package.json +7 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/AddressForm/index.tsx +4 -1
  6. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  7. package/src/components/BusinessInformation/index.tsx +33 -4
  8. package/src/components/BusinessInformation/styles.tsx +2 -2
  9. package/src/components/BusinessProductsList/index.tsx +10 -10
  10. package/src/components/BusinessesListing/index.tsx +1 -1
  11. package/src/components/Checkout/index.tsx +2 -1
  12. package/src/components/LanguageSelector/index.tsx +21 -16
  13. package/src/components/LoginForm/index.tsx +15 -0
  14. package/src/components/Messages/index.tsx +2 -2
  15. package/src/components/NotificationSetting/index.tsx +85 -0
  16. package/src/components/OrderDetails/index.tsx +2 -20
  17. package/src/components/OrdersOption/index.tsx +54 -56
  18. package/src/components/PaymentOptions/index.tsx +335 -365
  19. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  20. package/src/components/ReviewDriver/index.tsx +1 -1
  21. package/src/components/ReviewOrder/index.tsx +2 -1
  22. package/src/components/ReviewProducts/index.tsx +11 -0
  23. package/src/components/SignupForm/index.tsx +15 -0
  24. package/src/components/SingleProductReview/index.tsx +8 -5
  25. package/src/components/StripeElementsForm/index.tsx +25 -16
  26. package/src/components/VerifyPhone/styles.tsx +1 -2
  27. package/src/components/shared/OBottomPopup.tsx +6 -2
  28. package/src/index.tsx +2 -0
  29. package/src/pages/BusinessesListing.tsx +7 -6
  30. package/src/pages/OrderDetails.tsx +1 -1
  31. package/src/pages/ReviewDriver.tsx +2 -2
  32. package/src/pages/ReviewOrder.tsx +2 -2
  33. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  34. package/src/utils/index.tsx +2 -1
  35. package/themes/business/index.tsx +4 -0
  36. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  37. package/themes/business/src/components/Chat/index.tsx +42 -34
  38. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  39. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  40. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  41. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  42. package/themes/business/src/components/MapView/index.tsx +12 -1
  43. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  44. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -41
  45. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  46. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +25 -19
  47. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  48. package/themes/business/src/components/OrdersOption/index.tsx +65 -21
  49. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  50. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  51. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  52. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  53. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  54. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  55. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  56. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  57. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  58. package/themes/business/src/components/PreviousOrders/index.tsx +21 -23
  59. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  60. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  61. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  62. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  63. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  64. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  65. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  66. package/themes/business/src/components/shared/OModal.tsx +40 -37
  67. package/themes/business/src/types/index.tsx +15 -9
  68. package/themes/business/src/utils/index.tsx +10 -0
  69. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  70. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  71. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  72. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  73. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  74. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  75. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  76. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  77. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  78. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  79. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  80. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  81. package/themes/kiosk/src/types/index.d.ts +2 -0
  82. package/themes/original/index.tsx +4 -0
  83. package/themes/original/src/components/AddressDetails/index.tsx +1 -1
  84. package/themes/original/src/components/AddressForm/index.tsx +139 -135
  85. package/themes/original/src/components/AddressList/index.tsx +1 -1
  86. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  87. package/themes/original/src/components/BusinessBasicInformation/index.tsx +311 -161
  88. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  89. package/themes/original/src/components/BusinessController/index.tsx +190 -113
  90. package/themes/original/src/components/BusinessController/styles.tsx +0 -7
  91. package/themes/original/src/components/BusinessItemAccordion/index.tsx +4 -4
  92. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  93. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  94. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  95. package/themes/original/src/components/BusinessListingSearch/index.tsx +80 -128
  96. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  97. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  98. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  99. package/themes/original/src/components/BusinessProductsList/index.tsx +49 -52
  100. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  101. package/themes/original/src/components/BusinessProductsListing/index.tsx +172 -103
  102. package/themes/original/src/components/BusinessProductsListing/styles.tsx +18 -11
  103. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  104. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  105. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +37 -25
  106. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -4
  107. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +254 -97
  108. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +46 -2
  109. package/themes/original/src/components/BusinessesListing/index.tsx +95 -7
  110. package/themes/original/src/components/Cart/index.tsx +44 -12
  111. package/themes/original/src/components/Cart/styles.tsx +4 -0
  112. package/themes/original/src/components/CartContent/index.tsx +22 -16
  113. package/themes/original/src/components/Checkout/index.tsx +101 -61
  114. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  115. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  116. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  117. package/themes/original/src/components/Favorite/index.tsx +1 -0
  118. package/themes/original/src/components/FavoriteList/index.tsx +32 -2
  119. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  120. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  121. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  122. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
  123. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
  124. package/themes/original/src/components/HelpGuide/index.tsx +9 -8
  125. package/themes/original/src/components/HelpOrder/index.tsx +9 -8
  126. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  127. package/themes/original/src/components/LoginForm/Otp/index.tsx +95 -72
  128. package/themes/original/src/components/LoginForm/index.tsx +83 -45
  129. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  130. package/themes/original/src/components/Messages/index.tsx +17 -17
  131. package/themes/original/src/components/MomentOption/index.tsx +1 -1
  132. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -92
  133. package/themes/original/src/components/MultiCheckout/index.tsx +6 -0
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -16
  135. package/themes/original/src/components/MyOrders/index.tsx +70 -6
  136. package/themes/original/src/components/NavBar/index.tsx +15 -9
  137. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  138. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  139. package/themes/original/src/components/Notifications/index.tsx +148 -0
  140. package/themes/original/src/components/Notifications/styles.tsx +17 -0
  141. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  142. package/themes/original/src/components/OrderDetails/index.tsx +192 -37
  143. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  144. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  145. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  146. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  147. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  149. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  150. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +97 -106
  151. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  152. package/themes/original/src/components/OrdersOption/index.tsx +71 -55
  153. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  154. package/themes/original/src/components/PaymentOptions/index.tsx +41 -23
  155. package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
  156. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  157. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  158. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  159. package/themes/original/src/components/ProductForm/index.tsx +633 -664
  160. package/themes/original/src/components/ProductForm/styles.tsx +9 -8
  161. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  162. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  163. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  164. package/themes/original/src/components/ProfessionalProfile/index.tsx +26 -14
  165. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  166. package/themes/original/src/components/ReviewOrder/index.tsx +18 -3
  167. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  168. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  169. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  170. package/themes/original/src/components/SearchBar/index.tsx +5 -3
  171. package/themes/original/src/components/ServiceForm/index.tsx +410 -258
  172. package/themes/original/src/components/SignupForm/index.tsx +350 -206
  173. package/themes/original/src/components/SingleOrderCard/index.tsx +229 -181
  174. package/themes/original/src/components/SingleOrderCard/styles.tsx +0 -7
  175. package/themes/original/src/components/SingleProductCard/index.tsx +199 -110
  176. package/themes/original/src/components/SingleProductCard/styles.tsx +1 -10
  177. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  178. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  179. package/themes/original/src/components/StripeElementsForm/index.tsx +15 -7
  180. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  181. package/themes/original/src/components/UserDetails/index.tsx +31 -17
  182. package/themes/original/src/components/UserFormDetails/index.tsx +74 -81
  183. package/themes/original/src/components/UserProfile/index.tsx +54 -29
  184. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  185. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  186. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  187. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  188. package/themes/original/src/components/Wallets/index.tsx +176 -164
  189. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  190. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  191. package/themes/original/src/components/shared/OBottomPopup.tsx +48 -15
  192. package/themes/original/src/components/shared/OButton.tsx +10 -3
  193. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  194. package/themes/original/src/components/shared/OInput.tsx +3 -2
  195. package/themes/original/src/layouts/Container.tsx +13 -9
  196. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  197. package/themes/original/src/types/index.tsx +91 -30
  198. package/themes/original/src/utils/index.tsx +66 -0
  199. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -24,6 +24,7 @@ import { DriverTips } from '../DriverTips';
24
24
  import { NotFoundSource } from '../NotFoundSource';
25
25
  import { UserDetails } from '../UserDetails';
26
26
  import { PaymentOptionWallet } from '../PaymentOptionWallet';
27
+ import { PlaceSpot } from '../PlaceSpot'
27
28
 
28
29
  import {
29
30
  ChContainer,
@@ -105,8 +106,7 @@ const CheckoutUI = (props: any) => {
105
106
  padding: 20
106
107
  },
107
108
  pagePadding: {
108
- paddingLeft: 40,
109
- paddingRight: 40
109
+ paddingHorizontal: 40
110
110
  },
111
111
  icon: {
112
112
  top: 15,
@@ -114,9 +114,15 @@ const CheckoutUI = (props: any) => {
114
114
  position: 'absolute',
115
115
  fontSize: 20
116
116
  },
117
- wrapperNavbar: Platform.OS === 'ios'
118
- ? { paddingVertical: 0, paddingHorizontal: 40 }
119
- : { paddingVertical: 20, paddingHorizontal: 40 }
117
+ detailWrapper: {
118
+ paddingHorizontal: 40,
119
+ width: '100%'
120
+ },
121
+ wrapperNavbar: {
122
+ paddingVertical: 0,
123
+ paddingHorizontal: 40,
124
+ marginVertical: 2
125
+ }
120
126
  })
121
127
 
122
128
  const [, { showToast }] = useToast();
@@ -136,8 +142,11 @@ const CheckoutUI = (props: any) => {
136
142
  const [isDeliveryOptionModalVisible, setIsDeliveryOptionModalVisible] = useState(false)
137
143
  const [showGateway, setShowGateway] = useState<any>({ closedByUsed: false, open: false });
138
144
  const [webviewPaymethod, setWebviewPaymethod] = useState<any>(null)
145
+ const [isOpen, setIsOpen] = useState(false)
146
+ const [requiredFields, setRequiredFields] = useState<any>([])
139
147
 
140
- const placeSpotTypes = [3, 4]
148
+ const placeSpotTypes = [3, 4, 5]
149
+ const placeSpotsEnabled = placeSpotTypes.includes(options?.type)
141
150
  const businessConfigs = businessDetails?.business?.configs ?? []
142
151
  const isWalletCashEnabled = businessConfigs.find((config: any) => config.key === 'wallet_cash_enabled')?.value === '1'
143
152
  const isWalletCreditPointsEnabled = businessConfigs.find((config: any) => config.key === 'wallet_credit_point_enabled')?.value === '1'
@@ -145,8 +154,9 @@ const CheckoutUI = (props: any) => {
145
154
  const isBusinessChangeEnabled = configs?.cart_change_business_validation?.value === '1'
146
155
 
147
156
  const isPreOrder = configs?.preorder_status_enabled?.value === '1'
148
- const isDisabledButtonPlace = loading || !cart?.valid || (!paymethodSelected && cart?.balance > 0) || placing || errorCash ||
149
- cart?.subtotal < cart?.minimum || (placeSpotTypes.includes(options?.type) && !cart?.place) ||
157
+ const isDisabledButtonPlace = loading || !cart?.valid || (!paymethodSelected && cart?.balance > 0) ||
158
+ placing || errorCash || cart?.subtotal < cart?.minimum ||
159
+ // (placeSpotTypes.includes(options?.type) && !cart?.place) ||
150
160
  (options.type === 1 &&
151
161
  validationFields?.fields?.checkout?.driver_tip?.enabled &&
152
162
  validationFields?.fields?.checkout?.driver_tip?.required &&
@@ -172,11 +182,15 @@ const CheckoutUI = (props: any) => {
172
182
  }
173
183
  }
174
184
 
175
- const handlePlaceOrder = (confirmPayment) => {
176
- if (!userErrors.length) {
185
+ const handlePlaceOrder = (confirmPayment: any, forcePlace: boolean = false) => {
186
+ if (!userErrors.length && !requiredFields?.length || forcePlace) {
177
187
  handlerClickPlaceOrder && handlerClickPlaceOrder(null, null, confirmPayment)
178
188
  return
179
189
  }
190
+ if (requiredFields?.length) {
191
+ setIsOpen(true)
192
+ return
193
+ }
180
194
  let stringError = ''
181
195
  Object.values(userErrors).map((item: any, i: number) => {
182
196
  stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
@@ -204,11 +218,12 @@ const CheckoutUI = (props: any) => {
204
218
  setUserErrors([])
205
219
  const errors = []
206
220
  const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
221
+ const _requiredFields: any = []
207
222
 
208
223
  Object.values(validationFields?.fields?.checkout).map((field: any) => {
209
- if (field?.required && !notFields.includes(field.code)) {
224
+ if (field?.required && !notFields.includes(field.code) && field?.enabled) {
210
225
  if (!user[field?.code]) {
211
- errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
226
+ _requiredFields.push(field?.code)
212
227
  }
213
228
  }
214
229
  })
@@ -219,8 +234,9 @@ const CheckoutUI = (props: any) => {
219
234
  validationFields?.fields?.checkout?.cellphone?.required) ||
220
235
  configs?.verification_phone_required?.value === '1')
221
236
  ) {
222
- errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
237
+ _requiredFields.push('cellphone')
223
238
  }
239
+ setRequiredFields(_requiredFields)
224
240
 
225
241
  if (phoneUpdate) {
226
242
  errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
@@ -270,7 +286,6 @@ const CheckoutUI = (props: any) => {
270
286
  onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
271
287
  showCall={false}
272
288
  btnStyle={{ paddingLeft: 0 }}
273
- style={{ marginTop: Platform.OS === 'ios' ? 0 : 30 }}
274
289
  titleWrapStyle={{ paddingHorizontal: 0 }}
275
290
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
276
291
  />
@@ -315,10 +330,10 @@ const CheckoutUI = (props: any) => {
315
330
  !businessDetails?.error &&
316
331
  (
317
332
  <Placeholder Animation={Fade}>
318
- <PlaceholderLine height={20} width={70} />
319
- <PlaceholderLine height={10} width={60} />
320
- <PlaceholderLine height={10} width={60} />
321
- <PlaceholderLine height={10} width={80} style={{ marginBottom: 20 }} />
333
+ <PlaceholderLine height={20} />
334
+ <PlaceholderLine height={12} />
335
+ <PlaceholderLine height={12} />
336
+ <PlaceholderLine height={12} style={{ marginBottom: 20 }} />
322
337
  </Placeholder>
323
338
  )}
324
339
  {
@@ -327,7 +342,7 @@ const CheckoutUI = (props: any) => {
327
342
  Object.values(businessDetails?.business).length > 0 &&
328
343
  (
329
344
  <>
330
- <OText size={16} lineHeight={24} weight={'500'} mBottom={10}>
345
+ <OText size={16} lineHeight={24} weight={'500'} mBottom={10} color={theme.colors.textNormal}>
331
346
  {t('BUSINESS_DETAILS', 'Business Details')}
332
347
  </OText>
333
348
  <View>
@@ -348,7 +363,7 @@ const CheckoutUI = (props: any) => {
348
363
  )}
349
364
  {businessDetails?.error && businessDetails?.error?.length > 0 && (
350
365
  <View>
351
- <OText size={16} lineHeight={24} weight={'500'}>
366
+ <OText size={16} lineHeight={24} weight={'500'} color={theme.colors.textNormal}>
352
367
  {t('BUSINESS_DETAILS', 'Business Details')}
353
368
  </OText>
354
369
  <NotFoundSource
@@ -364,10 +379,10 @@ const CheckoutUI = (props: any) => {
364
379
  <ChUserDetails>
365
380
  {cartState.loading ? (
366
381
  <Placeholder Animation={Fade}>
367
- <PlaceholderLine height={20} width={70} />
368
- <PlaceholderLine height={10} width={60} />
369
- <PlaceholderLine height={10} width={60} />
370
- <PlaceholderLine height={10} width={80} style={{ marginBottom: 20 }} />
382
+ <PlaceholderLine height={20} />
383
+ <PlaceholderLine height={12} />
384
+ <PlaceholderLine height={12} />
385
+ <PlaceholderLine height={12} style={{ marginBottom: 20 }} />
371
386
  </Placeholder>
372
387
  ) : (
373
388
  <UserDetails
@@ -391,13 +406,13 @@ const CheckoutUI = (props: any) => {
391
406
  {cartState.loading || deliveryOptionSelected === undefined ? (
392
407
  <View style={{ height: 110 }}>
393
408
  <Placeholder Animation={Fade}>
394
- <PlaceholderLine height={20} width={70} />
395
- <PlaceholderLine height={40} width={100} />
409
+ <PlaceholderLine height={20} />
410
+ <PlaceholderLine height={40} />
396
411
  </Placeholder>
397
412
  </View>
398
413
  ) : (
399
414
  <>
400
- <OText size={16}>{t('DELIVERY_OPTIONS', 'Delivery options')}</OText>
415
+ <OText size={16} color={theme.colors.textNormal} mBottom={10}>{t('DELIVERY_OPTIONS', 'Delivery options')}</OText>
401
416
  <View
402
417
  style={{
403
418
  backgroundColor: theme.colors.inputDisabled,
@@ -583,6 +598,20 @@ const CheckoutUI = (props: any) => {
583
598
  )}
584
599
 
585
600
 
601
+ {!cartState.loading && placeSpotsEnabled && (
602
+ <>
603
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 30, marginHorizontal: -40 }} />
604
+ <PlaceSpot
605
+ isCheckout
606
+ isInputMode
607
+ cart={cart}
608
+ spotNumberDefault={cartState?.cart?.spot_number ?? cart?.spot_number}
609
+ vehicleDefault={cart?.vehicle}
610
+ />
611
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40 }} />
612
+ </>
613
+ )}
614
+
586
615
  {!cartState.loading && cart && (
587
616
  <ChSection>
588
617
  <ChCart>
@@ -598,7 +627,6 @@ const CheckoutUI = (props: any) => {
598
627
  size={16}
599
628
  lineHeight={24}
600
629
  color={theme.colors.textNormal}
601
- style={{ fontWeight: '500' }}
602
630
  >
603
631
  {t('MOBILE_FRONT_YOUR_ORDER', 'Your order')}
604
632
  </OText>
@@ -634,6 +662,7 @@ const CheckoutUI = (props: any) => {
634
662
  cart={cart}
635
663
  isCartPending={cart?.status === 2}
636
664
  onNavigationRedirect={onNavigationRedirect}
665
+ placeSpotTypes={placeSpotTypes}
637
666
  />
638
667
  </>
639
668
  )}
@@ -670,14 +699,6 @@ const CheckoutUI = (props: any) => {
670
699
  {t('WARNING_INVALID_PRODUCTS_CHECKOUT', 'To continue with your checkout, please remove from your cart the products that are not available.')}
671
700
  </OText>
672
701
  )}
673
- {placeSpotTypes.includes(options?.type) && !cart?.place && (
674
- <OText
675
- color={theme.colors.error}
676
- size={12}
677
- >
678
- {t('WARNING_PLACE_SPOT', 'Please, select your spot to place order.')}
679
- </OText>
680
- )}
681
702
  {options.type === 1 &&
682
703
  validationFields?.fields?.checkout?.driver_tip?.enabled &&
683
704
  validationFields?.fields?.checkout?.driver_tip?.required &&
@@ -703,11 +724,36 @@ const CheckoutUI = (props: any) => {
703
724
  onClose={() => setOpenChangeStore(false)}
704
725
  />
705
726
  </OModal>
727
+ <OModal
728
+ open={isOpen}
729
+ onClose={() => setIsOpen(false)}
730
+ >
731
+ <View style={styles.detailWrapper}>
732
+ <UserDetails
733
+ isUserDetailsEdit
734
+ cartStatus={cart?.status}
735
+ businessId={cart?.business_id}
736
+ useValidationFields
737
+ useDefualtSessionManager
738
+ useSessionUser
739
+ isCheckout
740
+ isEdit
741
+ phoneUpdate={phoneUpdate}
742
+ togglePhoneUpdate={togglePhoneUpdate}
743
+ requiredFields={requiredFields}
744
+ hideUpdateButton
745
+ onClose={() => {
746
+ setIsOpen(false)
747
+ handlePlaceOrder(null, true)
748
+ }}
749
+ />
750
+ </View>
751
+ </OModal>
706
752
  </ChContainer>
707
753
  </Container>
708
754
  {!cartState.loading && cart && cart?.status !== 2 && (
709
755
  <FloatingButton
710
- handleClick={() => handlePlaceOrder()}
756
+ handleClick={() => handlePlaceOrder(null)}
711
757
  isSecondaryBtn={isDisabledButtonPlace}
712
758
  disabled={isDisabledButtonPlace}
713
759
  btnText={cart?.subtotal >= cart?.minimum
@@ -721,7 +767,7 @@ const CheckoutUI = (props: any) => {
721
767
  : (`${t('MINIMUN_SUBTOTAL_ORDER', 'Minimum subtotal order:')} ${parsePrice(cart?.minimum)}`)
722
768
  }
723
769
  btnRightValueShow
724
- btnRightValue={parsePrice(cart?.total)}
770
+ btnRightValue={parsePrice(cart?.balance)}
725
771
  iosBottom={30}
726
772
  />
727
773
  )}
@@ -737,19 +783,6 @@ const CheckoutUI = (props: any) => {
737
783
  setShowGateway={setShowGateway}
738
784
  />
739
785
  )}
740
- {webviewPaymethod?.gateway === 'square' && showGateway.open && (
741
- <PaymentOptionsWebView
742
- onNavigationRedirect={onNavigationRedirect}
743
- uri={`https://test-square-f50f7.web.app`}
744
- user={user}
745
- token={token}
746
- cart={cart}
747
- currency={currency}
748
- webviewPaymethod={webviewPaymethod}
749
- setShowGateway={setShowGateway}
750
- locationId={'L1NGAY5M6KJRX'}
751
- />
752
- )}
753
786
  </>
754
787
  )
755
788
  }
@@ -775,16 +808,23 @@ export const Checkout = (props: any) => {
775
808
 
776
809
  const getOrder = async (cartId: any) => {
777
810
  try {
778
- setCartState({ ...cartState, loading: true })
779
- const url = `${ordering.root}/carts/${cartId}`
780
- const response = await fetch(url, {
781
- method: 'GET',
782
- headers: {
783
- 'Content-Type': 'application/json',
784
- Authorization: `Bearer ${token}`
785
- }
786
- })
787
- const { result } = await response.json();
811
+ let result: any = {}
812
+ const cart = orderState?.carts.find((cart: any) => cart.uuid === cartId)
813
+ if (cart) {
814
+ result = { ...cart }
815
+ } else {
816
+ setCartState({ ...cartState, loading: true })
817
+ const url = `${ordering.root}/carts/${cartId}`
818
+ const response = await fetch(url, {
819
+ method: 'GET',
820
+ headers: {
821
+ 'Content-Type': 'application/json',
822
+ Authorization: `Bearer ${token}`
823
+ }
824
+ })
825
+ const content = await response.json();
826
+ result = content.result
827
+ }
788
828
 
789
829
  let publicKey = null
790
830
  try {
@@ -76,7 +76,6 @@ export const ChCart = styled(ChPaymethods)``
76
76
 
77
77
  export const WalletPaymentOptionContainer = styled(ChPaymethods)`
78
78
  padding-bottom: 0;
79
- margin-left: -20px;
80
79
  `
81
80
 
82
81
  export const ChPlaceOrderBtn = styled.View`
@@ -35,8 +35,8 @@ const DriverTipsUI = (props: any) => {
35
35
  const theme = useTheme();
36
36
 
37
37
  const style = StyleSheet.create({
38
- circle: {
39
- borderRadius: 30
38
+ semicircle: {
39
+ borderRadius: 8
40
40
  },
41
41
  inputStyle: {
42
42
  flex: 1,
@@ -75,10 +75,10 @@ const DriverTipsUI = (props: any) => {
75
75
  onPress={() => handlerChangeOption(option)}
76
76
  >
77
77
  <DTCard
78
- style={style.circle}
78
+ style={style.semicircle}
79
79
  isActive={option === optionSelected}
80
80
  >
81
- <OText size={12} numberOfLines={1} color={option === optionSelected ? '#FFF' : theme.colors.textSecondary}>
81
+ <OText size={12} numberOfLines={2} color={option === optionSelected ? '#FFF' : theme.colors.textSecondary}>
82
82
  {`${isFixedPrice ? parsePrice(option) : `${option}%`}`}
83
83
  </OText>
84
84
  </DTCard>
@@ -26,11 +26,12 @@ export const DTCard = styled.View`
26
26
  text-transform: capitalize;
27
27
  min-height: 55px;
28
28
  min-width: 55px;
29
- max-width: 55px;
29
+ max-width: 80px;
30
30
  max-height: 55px;
31
31
  margin-right: 10px;
32
32
  margin-left: 10px;
33
33
  margin-top: 10px;
34
+ padding-horizontal: 10px;
34
35
 
35
36
  ${(props: any) => props.isActive && css`
36
37
  background-color: ${(props: any) => props.theme.colors.primary};
@@ -75,6 +75,7 @@ export const Favorite = (props: any) => {
75
75
  <FavoriteList
76
76
  favoriteURL='favorite_products'
77
77
  originalURL='products'
78
+ onNavigationRedirect={onRedirect}
78
79
  isProduct
79
80
  />
80
81
  )}
@@ -14,6 +14,7 @@ import { Container, WrappButton } from './styles'
14
14
  import { OButton } from '../shared';
15
15
  import { BusinessController } from '../BusinessController';
16
16
  import { SingleProductCard } from '../SingleProductCard';
17
+ import { NotFoundSource } from '../NotFoundSource';
17
18
  import moment from 'moment';
18
19
 
19
20
 
@@ -73,6 +74,17 @@ const FavoriteListUI = (props: FavoriteParams) => {
73
74
  return objectStatus && objectStatus
74
75
  }
75
76
 
77
+ const onProductClick = (product: any) => {
78
+ const categoryId = product?.category?.id
79
+ const businessId = product?.category?.business?.id
80
+ if (!categoryId || !businessId) return
81
+ onNavigationRedirect && onNavigationRedirect('ProductDetails', {
82
+ productId: product?.id,
83
+ categoryId: categoryId,
84
+ businessId: businessId
85
+ })
86
+ }
87
+
76
88
  useEffect(() => {
77
89
  const _businessId = 'businessId:' + reorderState?.result?.business_id
78
90
  if (reorderState?.error) {
@@ -213,6 +225,12 @@ const FavoriteListUI = (props: FavoriteParams) => {
213
225
  <BusinessSkeleton key={i} />
214
226
  ))
215
227
  )}
228
+ {!favoriteList?.loading && !favoriteList?.favorites?.length && (
229
+ <NotFoundSource
230
+ content={t('NOT_FOUND_FAVORITES_LIST', 'No favorites to show at this time.')
231
+ }
232
+ />
233
+ )}
216
234
  </>
217
235
  )}
218
236
 
@@ -239,6 +257,12 @@ const FavoriteListUI = (props: FavoriteParams) => {
239
257
  <OrderSkeleton key={i} />
240
258
  ))
241
259
  )}
260
+ {!favoriteList?.loading && !favoriteList?.favorites?.length && (
261
+ <NotFoundSource
262
+ content={t('NOT_FOUND_FAVORITES_LIST', 'No favorites to show at this time.')
263
+ }
264
+ />
265
+ )}
242
266
  </>
243
267
  )}
244
268
 
@@ -248,9 +272,9 @@ const FavoriteListUI = (props: FavoriteParams) => {
248
272
  favoriteList.favorites?.sort((a: any, b: any) => a?.name?.toLowerCase() > b?.name?.toLowerCase()).map((product: any, i: number) => (
249
273
  <SingleProductCard
250
274
  key={`${product?.id}_${i}`}
251
- isSoldOut={product.inventoried && !product.quantity}
275
+ isSoldOut={product?.inventoried && !product?.quantity}
252
276
  product={product}
253
- onProductClick={() => {}}
277
+ onProductClick={onProductClick}
254
278
  handleUpdateProducts={handleUpdateFavoriteList}
255
279
  />
256
280
  ))
@@ -260,6 +284,12 @@ const FavoriteListUI = (props: FavoriteParams) => {
260
284
  <ProductSkeleton key={i} />
261
285
  ))
262
286
  )}
287
+ {!favoriteList?.loading && !favoriteList?.favorites?.length && (
288
+ <NotFoundSource
289
+ content={t('NOT_FOUND_FAVORITES_LIST', 'No favorites to show at this time.')
290
+ }
291
+ />
292
+ )}
263
293
  </>
264
294
  )}
265
295
 
@@ -12,7 +12,7 @@ export const Container = styled.View`
12
12
  width: 100%;
13
13
  justify-content: space-between;
14
14
  background-color: #FFF;
15
- z-index: 1000;
15
+ z-index: 9999;
16
16
  justify-content: space-between;
17
17
  `
18
18
 
@@ -1,17 +1,16 @@
1
1
  import React, { useEffect, useState } from 'react'
2
- import { getTrackingStatus, requestTrackingPermission } from 'react-native-tracking-transparency'
3
- import Geolocation from '@react-native-community/geolocation'
4
2
  import Geocoder from 'react-native-geocoding'
5
- import { GpsButtonStyle } from './styles'
6
- import { View } from 'react-native'
7
- import { OText } from '../shared'
8
3
  import { ActivityIndicator } from 'react-native-paper'
4
+ import Geolocation from '@react-native-community/geolocation'
5
+ import { getTrackingStatus, requestTrackingPermission } from 'react-native-tracking-transparency'
6
+
7
+ import { OText } from '../shared'
8
+ import { GpsButtonStyle } from './styles'
9
9
 
10
10
  export const GPSButton = (props: any) => {
11
11
  const {
12
12
  handleGPS,
13
13
  apiKey,
14
- googleReady,
15
14
  IconButton,
16
15
  IconLoadingButton
17
16
  } = props
@@ -56,25 +55,27 @@ export const GPSButton = (props: any) => {
56
55
  })
57
56
  }
58
57
 
59
- const getCurrentPosition = async () => {
58
+ const getCurrentPosition = async () => {
60
59
  let trackingStatus = await getTrackingStatus()
61
- if (trackingStatus === 'not-determined') {
62
- trackingStatus = await requestTrackingPermission()
63
- }
64
- if (trackingStatus === 'authorized' || trackingStatus === 'unavailable') {
65
- setLoading(true);
60
+ if (trackingStatus === 'not-determined') {
61
+ trackingStatus = await requestTrackingPermission()
62
+ }
63
+ if (trackingStatus === 'authorized' || trackingStatus === 'unavailable') {
64
+ setLoading(true)
66
65
  Geolocation.getCurrentPosition((pos) => {
67
- geoCodePosition(pos.coords);
66
+ geoCodePosition(pos.coords)
68
67
  }, (err) => {
69
68
  setLoading(false);
70
- console.log(err);
71
- });
69
+ console.log(`ERROR(${err.code}): ${err.message}`)
70
+ }, {
71
+ enableHighAccuracy: true, timeout: 15000, maximumAge: 10000
72
+ })
72
73
  }
73
- }
74
+ }
74
75
 
75
- useEffect(() => {
76
- Geocoder.init(apiKey);
77
- }, [])
76
+ useEffect(() => {
77
+ Geocoder.init(apiKey);
78
+ }, [])
78
79
 
79
80
  return (
80
81
  <GpsButtonStyle
@@ -32,6 +32,7 @@ export const GoogleMap = (props: GoogleMapsParams) => {
32
32
  latitudeDelta: 0.0010,
33
33
  longitudeDelta: 0.0010 * ASPECT_RATIO
34
34
  })
35
+ const [MARKERS, SETMARKERS] = useState(locations)
35
36
  let mapRef = useRef<any>(null)
36
37
  const googleMapsApiKey = configState?.configs?.google_maps_api_key?.value
37
38
 
@@ -41,12 +42,7 @@ export const GoogleMap = (props: GoogleMapsParams) => {
41
42
  ERROR_NOT_FOUND_ADDRESS: 'Sorry, we couldn\'t find an address',
42
43
  ERROR_MAX_LIMIT_LOCATION: `Sorry, You can only set the position to ${maxLimitLocation}m`
43
44
  }
44
- const MARKERS = locations && locations.map((location: { lat: number, lng: number }) => {
45
- return {
46
- latitude: location.lat,
47
- longitude: location.lng
48
- }
49
- })
45
+
50
46
  const geocodePosition = (pos: { latitude: number, longitude: number }) => {
51
47
  Geocoder.from({
52
48
  latitude: pos.latitude,
@@ -93,7 +89,9 @@ export const GoogleMap = (props: GoogleMapsParams) => {
93
89
  return
94
90
  }
95
91
 
96
- if (distance <= maxLimitLocation) {
92
+ const _maxLimitLocation = typeof maxLimitLocation === 'string' ? parseInt(maxLimitLocation, 10) : maxLimitLocation
93
+
94
+ if (distance <= _maxLimitLocation) {
97
95
  setMarkerPosition(curPos)
98
96
  setRegion({ ...region, longitude: curPos.longitude, latitude: curPos.latitude })
99
97
  } else {
@@ -147,7 +145,7 @@ export const GoogleMap = (props: GoogleMapsParams) => {
147
145
  }
148
146
 
149
147
  const fitAllMarkers = () => {
150
- mapRef.current.fitToCoordinates(MARKERS, {
148
+ mapRef.current.fitToCoordinates(MARKERS?.map(location => ({ latitude: location.lat, longitude: location.lng })), {
151
149
  edgePadding: { top: 80, right: 80, bottom: 80, left: 80 },
152
150
  animated: true,
153
151
  });
@@ -157,6 +155,13 @@ export const GoogleMap = (props: GoogleMapsParams) => {
157
155
  Geocoder.init(googleMapsApiKey)
158
156
  }, [])
159
157
 
158
+ useEffect(() => {
159
+ mapRef.current.animateToRegion({
160
+ ...region,
161
+ latitude: location?.lat,
162
+ longitude: location?.lng,
163
+ })
164
+ }, [location])
160
165
 
161
166
  useEffect(() => {
162
167
  if (saveLocation) {
@@ -170,6 +175,9 @@ export const GoogleMap = (props: GoogleMapsParams) => {
170
175
  fitAllMarkers()
171
176
  }
172
177
  }, 1000)
178
+ if (locations) {
179
+ SETMARKERS(locations)
180
+ }
173
181
  return () => clearInterval(interval)
174
182
  }, [locations])
175
183
 
@@ -189,16 +197,16 @@ export const GoogleMap = (props: GoogleMapsParams) => {
189
197
  >
190
198
  {locations ? (
191
199
  <>
192
- {MARKERS && MARKERS.map((location: { latitude: number, longitude: number }, i: number) => (
200
+ {MARKERS && MARKERS.map((location: { lat: number, lng: number }, i: number) => (
193
201
  <React.Fragment key={i}>
194
202
  {
195
203
  <Marker
196
204
  zIndex={i}
197
- coordinate={location}
198
- title={locations[i]?.title}
205
+ coordinate={{ latitude: location.lat ?? 0, longitude: location.lng ?? 0 }}
206
+ title={MARKERS[i]?.title}
199
207
  >
200
208
  <View>
201
- <OIcon url={locations[i].icon} width={50} height={50} />
209
+ <OIcon url={MARKERS[i].icon} width={50} height={50} />
202
210
  </View>
203
211
  </Marker>
204
212
  }
@@ -1,12 +1,15 @@
1
1
  import React from 'react'
2
+ import { Platform } from 'react-native'
2
3
  import { useLanguage } from 'ordering-components/native'
3
4
  import { HelpAccountAndPaymentParams } from '../../types'
4
5
  import { OText, OButton, OIcon } from '../shared'
5
6
  import { useTheme } from 'styled-components/native'
6
- import { StyleSheet } from 'react-native'
7
+ import { StyleSheet, TouchableOpacity } from 'react-native'
8
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
7
9
 
8
10
  import {
9
- Content
11
+ Content,
12
+ HeaderWrapper
10
13
  } from './styles'
11
14
 
12
15
  export const HelpAccountAndPayment = (props: HelpAccountAndPaymentParams) => {
@@ -37,13 +40,25 @@ export const HelpAccountAndPayment = (props: HelpAccountAndPaymentParams) => {
37
40
 
38
41
  return (
39
42
  <>
40
- <OButton
41
- imgLeftSrc={theme.images.general.arrow_left}
42
- imgRightSrc={null}
43
- style={styles.btnBackArrow}
44
- onClick={() => goToBack()}
45
- />
46
- <OText size={22} weight={600}>{t('ACCOUNT_PAYMENT_OPTIONS', 'Account and Payment Options')}</OText>
43
+ <HeaderWrapper>
44
+ <OButton
45
+ imgRightSrc={null}
46
+ style={styles.btnBackArrow}
47
+ onClick={() => goToBack()}
48
+ icon={AntDesignIcon}
49
+ iconProps={{
50
+ name: 'arrowleft',
51
+ size: 26
52
+ }}
53
+ />
54
+ <OText
55
+ size={24}
56
+ weight={Platform.OS === 'ios' ? '600' : 'bold'}
57
+ color={theme.colors.textNormal}
58
+ >
59
+ {t('ACCOUNT_PAYMENT_OPTIONS', 'Account and Payment Options')}
60
+ </OText>
61
+ </HeaderWrapper>
47
62
  <Content>
48
63
  <OText mBottom={20}>
49
64
  -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vel in congue nisl, nisi. Mauris, condimentum auctor sed cras cursus arcu pellentesque.
@@ -65,4 +80,4 @@ export const HelpAccountAndPayment = (props: HelpAccountAndPaymentParams) => {
65
80
  </Content>
66
81
  </>
67
82
  )
68
- }
83
+ }