ordering-ui-react-native 0.17.90 → 0.17.91-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 (215) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +10 -9
  4. package/src/components/BusinessesListing/index.tsx +1 -1
  5. package/src/components/OrderCreating/index.tsx +1 -21
  6. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  7. package/src/components/PhoneInputNumber/index.tsx +6 -2
  8. package/src/components/StripeMethodForm/index.tsx +136 -102
  9. package/src/components/VerifyPhone/styles.tsx +1 -2
  10. package/src/components/shared/OToast.tsx +3 -2
  11. package/src/types/index.tsx +5 -0
  12. package/src/utils/index.tsx +5 -0
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +37 -27
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +163 -123
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
  19. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  20. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  21. package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
  22. package/themes/business/src/components/LoginForm/index.tsx +15 -22
  23. package/themes/business/src/components/MapView/index.tsx +14 -10
  24. package/themes/business/src/components/MessagesOption/index.tsx +20 -93
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +123 -96
  26. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  27. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  28. package/themes/business/src/components/OrderDetails/Delivery.tsx +202 -12
  29. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +84 -37
  30. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +81 -66
  31. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +200 -0
  32. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  33. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  34. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  35. package/themes/business/src/components/OrdersOption/index.tsx +22 -22
  36. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  37. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  38. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +17 -12
  39. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  40. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  41. package/themes/business/src/components/PreviousOrders/index.tsx +198 -221
  42. package/themes/business/src/components/ProductItemAccordion/index.tsx +7 -1
  43. package/themes/business/src/components/ReviewCustomer/index.tsx +18 -13
  44. package/themes/business/src/components/StoresList/index.tsx +3 -4
  45. package/themes/business/src/components/UserProfileForm/index.tsx +14 -15
  46. package/themes/business/src/components/shared/OModal.tsx +16 -9
  47. package/themes/business/src/types/index.tsx +25 -10
  48. package/themes/business/src/utils/index.tsx +29 -2
  49. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  51. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  52. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  53. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  54. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
  55. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  56. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  57. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  58. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/original/index.tsx +1 -1
  61. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  62. package/themes/original/src/components/AddressForm/index.tsx +35 -17
  63. package/themes/original/src/components/AddressList/index.tsx +5 -8
  64. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  65. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  66. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  67. package/themes/original/src/components/BusinessBasicInformation/index.tsx +73 -37
  68. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  69. package/themes/original/src/components/BusinessController/index.tsx +35 -44
  70. package/themes/original/src/components/BusinessController/styles.tsx +12 -5
  71. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  72. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  73. package/themes/original/src/components/BusinessInformation/index.tsx +140 -85
  74. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
  75. package/themes/original/src/components/BusinessListingSearch/index.tsx +347 -341
  76. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  77. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  78. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  79. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  80. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  81. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  82. package/themes/original/src/components/BusinessProductsListing/index.tsx +664 -556
  83. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -3
  84. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  85. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  86. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  87. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  88. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +38 -405
  89. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  90. package/themes/original/src/components/Cart/index.tsx +57 -49
  91. package/themes/original/src/components/CartContent/index.tsx +102 -58
  92. package/themes/original/src/components/CartContent/styles.tsx +6 -6
  93. package/themes/original/src/components/Checkout/index.tsx +277 -33
  94. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  95. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  96. package/themes/original/src/components/DriverTips/index.tsx +14 -6
  97. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  98. package/themes/original/src/components/Favorite/index.tsx +1 -5
  99. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  100. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  101. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +42 -5
  102. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +2 -0
  103. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +86 -10
  104. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  105. package/themes/original/src/components/GoogleMap/index.tsx +63 -7
  106. package/themes/original/src/components/Home/index.tsx +13 -4
  107. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  108. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  109. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -25
  110. package/themes/original/src/components/LoginForm/index.tsx +64 -34
  111. package/themes/original/src/components/LottieAnimation/index.tsx +88 -63
  112. package/themes/original/src/components/MessageListing/index.tsx +9 -2
  113. package/themes/original/src/components/Messages/index.tsx +15 -4
  114. package/themes/original/src/components/MomentOption/index.tsx +193 -92
  115. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  116. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -50
  117. package/themes/original/src/components/MultiCheckout/index.tsx +385 -46
  118. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  119. package/themes/original/src/components/MultiOrdersDetails/index.tsx +23 -19
  120. package/themes/original/src/components/MyOrders/index.tsx +15 -4
  121. package/themes/original/src/components/NavBar/index.tsx +20 -13
  122. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  123. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  124. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +21 -5
  125. package/themes/original/src/components/OrderDetails/index.tsx +50 -38
  126. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  127. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  128. package/themes/original/src/components/OrderProgress/index.tsx +34 -25
  129. package/themes/original/src/components/OrderSummary/index.tsx +83 -57
  130. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  131. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +13 -13
  132. package/themes/original/src/components/OrdersOption/index.tsx +43 -20
  133. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  134. package/themes/original/src/components/PageBanner/index.tsx +65 -29
  135. package/themes/original/src/components/PageBanner/styles.tsx +0 -3
  136. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  137. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  138. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  139. package/themes/original/src/components/PaymentOptions/index.tsx +100 -34
  140. package/themes/original/src/components/PhoneInputNumber/index.tsx +18 -4
  141. package/themes/original/src/components/ProductForm/index.tsx +87 -31
  142. package/themes/original/src/components/ProductForm/styles.tsx +3 -3
  143. package/themes/original/src/components/ProductItemAccordion/index.tsx +8 -6
  144. package/themes/original/src/components/ProductOptionSubOption/index.tsx +49 -20
  145. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +10 -9
  146. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  147. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  148. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  149. package/themes/original/src/components/Promotions/index.tsx +2 -2
  150. package/themes/original/src/components/Promotions/styles.tsx +3 -1
  151. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  152. package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
  153. package/themes/original/src/components/ServiceForm/index.tsx +63 -20
  154. package/themes/original/src/components/SignupForm/index.tsx +43 -27
  155. package/themes/original/src/components/SingleOrderCard/index.tsx +42 -19
  156. package/themes/original/src/components/SingleOrderCard/styles.tsx +1 -1
  157. package/themes/original/src/components/SingleProductCard/index.tsx +14 -11
  158. package/themes/original/src/components/SingleProductCard/styles.tsx +8 -3
  159. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  160. package/themes/original/src/components/StripeCardsList/index.tsx +61 -5
  161. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  162. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  163. package/themes/original/src/components/UpsellingProducts/index.tsx +5 -10
  164. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  165. package/themes/original/src/components/UserFormDetails/index.tsx +78 -9
  166. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  167. package/themes/original/src/components/UserProfile/index.tsx +8 -26
  168. package/themes/original/src/components/UserProfileForm/index.tsx +30 -31
  169. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  170. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  171. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  172. package/themes/original/src/components/Wallets/index.tsx +52 -62
  173. package/themes/original/src/components/Wallets/styles.tsx +2 -4
  174. package/themes/original/src/components/shared/OButton.tsx +3 -3
  175. package/themes/original/src/components/shared/OInput.tsx +4 -5
  176. package/themes/original/src/components/shared/OModal.tsx +3 -3
  177. package/themes/original/src/types/index.tsx +37 -10
  178. package/themes/original/src/utils/index.tsx +185 -13
  179. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  180. package/src/navigators/BottomNavigator.tsx +0 -117
  181. package/src/navigators/CheckoutNavigator.tsx +0 -66
  182. package/src/navigators/HomeNavigator.tsx +0 -202
  183. package/src/navigators/NavigationRef.tsx +0 -7
  184. package/src/navigators/RootNavigator.tsx +0 -269
  185. package/src/pages/Account.tsx +0 -34
  186. package/src/pages/AddressForm.tsx +0 -62
  187. package/src/pages/AddressList.tsx +0 -24
  188. package/src/pages/BusinessProductsList.tsx +0 -81
  189. package/src/pages/BusinessesListing.tsx +0 -43
  190. package/src/pages/CartList.tsx +0 -49
  191. package/src/pages/Checkout.tsx +0 -101
  192. package/src/pages/ForgotPassword.tsx +0 -24
  193. package/src/pages/Help.tsx +0 -23
  194. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  195. package/src/pages/HelpGuide.tsx +0 -23
  196. package/src/pages/HelpOrder.tsx +0 -23
  197. package/src/pages/Home.tsx +0 -36
  198. package/src/pages/IntroductoryTutorial.tsx +0 -170
  199. package/src/pages/Login.tsx +0 -47
  200. package/src/pages/MomentOption.tsx +0 -30
  201. package/src/pages/MultiCheckout.tsx +0 -31
  202. package/src/pages/MultiOrdersDetails.tsx +0 -27
  203. package/src/pages/MyOrders.tsx +0 -40
  204. package/src/pages/NetworkError.tsx +0 -24
  205. package/src/pages/NotFound.tsx +0 -22
  206. package/src/pages/OrderDetails.tsx +0 -25
  207. package/src/pages/ProductDetails.tsx +0 -55
  208. package/src/pages/Profile.tsx +0 -36
  209. package/src/pages/ReviewDriver.tsx +0 -30
  210. package/src/pages/ReviewOrder.tsx +0 -32
  211. package/src/pages/ReviewProducts.tsx +0 -30
  212. package/src/pages/Sessions.tsx +0 -22
  213. package/src/pages/Signup.tsx +0 -53
  214. package/src/pages/SpinnerLoader.tsx +0 -10
  215. package/src/pages/Splash.tsx +0 -21
@@ -1,6 +1,6 @@
1
1
  import React, { useState, useEffect, useRef } from 'react'
2
2
  import { useTheme } from 'styled-components/native'
3
- import { Platform, View, StyleSheet, Dimensions, ScrollView, TouchableOpacity } from 'react-native'
3
+ import { Platform, View, StyleSheet, Dimensions, ScrollView, TouchableOpacity, Text } from 'react-native'
4
4
  import { OText, OButton, OModal, OIcon } from '../shared'
5
5
  import FastImage from 'react-native-fast-image'
6
6
  import IconAntDesign from 'react-native-vector-icons/AntDesign'
@@ -11,6 +11,8 @@ import FeatherIcon from 'react-native-vector-icons/Feather';
11
11
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
12
12
  import { ServiceFormParams } from '../../types'
13
13
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
14
+ import uuid from 'react-native-uuid';
15
+ import { orderTypeList } from '../../utils'
14
16
 
15
17
  import {
16
18
  ProductForm as ProductFormController,
@@ -45,7 +47,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
45
47
  maxProductQuantity,
46
48
  onClose,
47
49
  professionalListState,
48
- isCartProduct
50
+ isCartProduct,
51
+ actionStatus,
52
+ handleCreateGuestUser
49
53
  } = props
50
54
 
51
55
  const theme = useTheme()
@@ -65,6 +69,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
65
69
  const [isOpen, setIsOpen] = useState(false)
66
70
  const [currentProfessional, setCurrentProfessional] = useState<any>(null)
67
71
 
72
+ const guestCheckoutEnabled = configs?.guest_checkout_enabled?.value === '1'
73
+ const orderTypeEnabled = !orderTypeList[orderState?.options?.type - 1] || configs?.allowed_order_types_guest_checkout?.value?.includes(orderTypeList[orderState?.options?.type - 1])
74
+
68
75
  const dropdownRef = useRef<any>(null)
69
76
 
70
77
  const styles = StyleSheet.create({
@@ -103,23 +110,41 @@ const ServiceFormUI = (props: ServiceFormParams) => {
103
110
  height: 40,
104
111
  marginBottom: 30
105
112
  },
113
+ dropDownRow: {
114
+ color: theme.colors.primary,
115
+ fontSize: 14,
116
+ marginHorizontal: 0
117
+ },
106
118
  professionalList: {
107
119
  paddingHorizontal: 40,
108
- paddingVertical: 30
120
+ paddingVertical: 30,
109
121
  }
110
122
  })
111
123
 
112
- const isBusyTime = (professional: any) => {
113
- if (professional?.busy_times?.length === 0 || !dateSelected) return false
124
+ const getMomentTime = (time) => {
125
+ const _moment = moment(`${moment(selectDate).format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm').toDate()
126
+ return _moment
127
+ }
128
+
129
+ const isBusyTime = (professional, selectedMoment) => {
130
+ if (!selectedMoment) return false
131
+ const startDay = moment(selectedMoment).utc().format('d')
132
+ const isStartScheduleEnabled = professional?.schedule?.[startDay]?.enabled
114
133
  const duration = product?.duration ?? 0
134
+ const endDay = moment(selectedMoment).add(duration - 1, 'minutes').utc().format('d')
135
+ const isEndScheduleEnabled = professional?.schedule?.[endDay]?.enabled
136
+ if (!isStartScheduleEnabled || !isEndScheduleEnabled) return true
137
+
138
+ if (professional?.busy_times?.length === 0) return false
139
+
115
140
  const busyTimes = isCartProduct
116
- ? professional?.busy_times.filter((item: any) => !(item.start === productCart?.calendar_event?.start && item.end === productCart?.calendar_event?.end))
141
+ ? professional?.busy_times.filter(item => !(item.start === productCart?.calendar_event?.start && item.end === productCart?.calendar_event?.end))
117
142
  : [...professional?.busy_times]
118
- const valid = busyTimes.some((item: any) => {
119
- return (moment.utc(item?.start).local().valueOf() <= moment(dateSelected).valueOf() &&
120
- moment(dateSelected).valueOf() <= moment.utc(item?.end).local().valueOf()) ||
121
- (moment.utc(item?.start).local().valueOf() <= moment(dateSelected).add(duration, 'minutes').valueOf() &&
122
- moment(dateSelected).add(duration, 'minutes').valueOf() <= moment.utc(item?.end).local().valueOf())
143
+ const valid = busyTimes.some(item => {
144
+ return (moment.utc(item?.start).local().valueOf() <= moment(selectedMoment).valueOf() &&
145
+ moment(selectedMoment).valueOf() < moment.utc(item?.end).local().valueOf()) ||
146
+ (moment.utc(item?.start).local().valueOf() < moment(selectedMoment).add(duration, 'minutes').valueOf() &&
147
+ moment(selectedMoment).add(duration, 'minutes').valueOf() < moment.utc(item?.end).local().valueOf())
123
148
  })
124
149
  return valid
125
150
  }
@@ -140,6 +165,11 @@ const ServiceFormUI = (props: ServiceFormParams) => {
140
165
  )
141
166
  }
142
167
 
168
+ const handleUpdateGuest = () => {
169
+ const guestToken = uuid.v4()
170
+ if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
171
+ }
172
+
143
173
  const customDayHeaderStylesCallback = () => {
144
174
  return {
145
175
  textStyle: {
@@ -371,9 +401,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
371
401
  size={12}
372
402
  weight={'400'}
373
403
  lineHeight={17}
374
- color={isBusyTime(currentProfessional) ? theme.colors.danger5 : theme.colors.success500}
404
+ color={isBusyTime(currentProfessional, dateSelected) ? theme.colors.danger5 : theme.colors.success500}
375
405
  >
376
- {isBusyTime(currentProfessional)
406
+ {isBusyTime(currentProfessional, dateSelected)
377
407
  ? t('BUSY_ON_SELECTED_TIME', 'Busy on selected time')
378
408
  : t('AVAILABLE', 'Available')
379
409
  }
@@ -453,10 +483,12 @@ const ServiceFormUI = (props: ServiceFormParams) => {
453
483
  paddingTop: 8,
454
484
  paddingHorizontal: 12
455
485
  }}
456
- rowTextStyle={{
457
- color: theme.colors.disabled,
458
- fontSize: 14,
459
- marginHorizontal: 0
486
+ renderCustomizedRowChild={(item, index) => {
487
+ return (
488
+ <Text style={[styles.dropDownRow, { color: isBusyTime(currentProfessional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary } ]}>
489
+ {item.text}
490
+ </Text>
491
+ )
460
492
  }}
461
493
  renderDropdownIcon={() => dropDownIcon()}
462
494
  dropdownOverlayColor='transparent'
@@ -529,7 +561,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
529
561
  ? t('SOLD_OUT', 'Sold out')
530
562
  : t('BOOK', 'Book'))}
531
563
  style={styles.buttonStyle}
532
- isDisabled={isSoldOut || maxProductQuantity <= 0 || !currentProfessional?.id || !dateSelected || isBusyTime(currentProfessional)}
564
+ isDisabled={isSoldOut || maxProductQuantity <= 0 || !currentProfessional?.id || !dateSelected || isBusyTime(currentProfessional, dateSelected)}
533
565
  textStyle={{ fontSize: 14, color: theme.colors.white }}
534
566
  />
535
567
  )}
@@ -563,6 +595,17 @@ const ServiceFormUI = (props: ServiceFormParams) => {
563
595
  }}
564
596
  />
565
597
  )}
598
+ {!auth && guestCheckoutEnabled && orderTypeEnabled && (
599
+ <TouchableOpacity style={{ marginTop: 10 }} onPress={handleUpdateGuest}>
600
+ {actionStatus?.loading ? (
601
+ <Placeholder Animation={Fade}>
602
+ <PlaceholderLine width={60} height={20} />
603
+ </Placeholder>
604
+ ) : (
605
+ <OText color={theme.colors.primary} size={13}>{t('AS_GUEST_USER', 'As guest user')}</OText>
606
+ )}
607
+ </TouchableOpacity>
608
+ )}
566
609
  </ButtonWrapper>
567
610
  </Container>
568
611
  )}
@@ -616,9 +659,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
616
659
  size={12}
617
660
  weight={'400'}
618
661
  lineHeight={17}
619
- color={isBusyTime(professional) ? theme.colors.danger5 : theme.colors.success500}
662
+ color={isBusyTime(professional, dateSelected) ? theme.colors.danger5 : theme.colors.success500}
620
663
  >
621
- {isBusyTime(professional)
664
+ {isBusyTime(professional, dateSelected)
622
665
  ? t('BUSY_ON_SELECTED_TIME', 'Busy on selected time')
623
666
  : t('AVAILABLE', 'Available')
624
667
  }
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
- import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity, Vibration } from 'react-native';
2
+ import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity } from 'react-native';
3
3
  import { useForm, Controller } from 'react-hook-form';
4
4
  import Spinner from 'react-native-loading-spinner-overlay';
5
5
  import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
@@ -8,6 +8,7 @@ import { PhoneInputNumber } from '../PhoneInputNumber';
8
8
  import { FacebookLogin } from '../FacebookLogin';
9
9
  import Recaptcha from 'react-native-recaptcha-that-works'
10
10
  import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
11
+ import ReactNativeHapticFeedback from "react-native-haptic-feedback";
11
12
 
12
13
  import {
13
14
  SignupForm as SignUpController,
@@ -83,7 +84,8 @@ const SignupFormUI = (props: SignupParams) => {
83
84
  signUpTab,
84
85
  useSignUpFullDetails,
85
86
  useSignUpOtpEmail,
86
- useSignUpOtpCellphone
87
+ useSignUpOtpCellphone,
88
+ isGuest
87
89
  } = props;
88
90
 
89
91
  const theme = useTheme();
@@ -163,6 +165,14 @@ const SignupFormUI = (props: SignupParams) => {
163
165
  })
164
166
  }
165
167
 
168
+ const vibrateApp = (impact?: string) => {
169
+ const options = {
170
+ enableVibrateFallback: true,
171
+ ignoreAndroidSystemSettings: false
172
+ };
173
+ ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
174
+ }
175
+
166
176
  const handleRefs = (ref: any, code: string) => {
167
177
  switch (code) {
168
178
  case 'name': {
@@ -245,7 +255,7 @@ const SignupFormUI = (props: SignupParams) => {
245
255
  const onSubmit = (values?: any) => {
246
256
  if (phoneInputData.error && signUpTab !== 'otpEmail') {
247
257
  showToast(ToastType.Error, phoneInputData.error);
248
- Vibration.vibrate()
258
+ vibrateApp()
249
259
  return;
250
260
  }
251
261
  if (
@@ -263,7 +273,7 @@ const SignupFormUI = (props: SignupParams) => {
263
273
  'The field Mobile phone is required.',
264
274
  ),
265
275
  );
266
- Vibration.vibrate()
276
+ vibrateApp()
267
277
  return;
268
278
  }
269
279
  if (signUpTab === 'otpEmail' || signUpTab === 'otpCellphone') {
@@ -322,7 +332,7 @@ const SignupFormUI = (props: SignupParams) => {
322
332
  };
323
333
 
324
334
  const handleChangeInputEmail = (value: string, onChange: any) => {
325
- onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
335
+ onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
326
336
  };
327
337
 
328
338
  const handleOpenTermsUrl = async (url: any) => {
@@ -332,7 +342,7 @@ const SignupFormUI = (props: SignupParams) => {
332
342
  await Linking.openURL(url);
333
343
  } else {
334
344
  showToast(ToastType.Error, t('VALIDATION_ERROR_ACTIVE_URL', 'The _attribute_ is not a valid URL.').replace('_attribute_', t('URL', 'URL')))
335
- Vibration.vibrate()
345
+ vibrateApp()
336
346
  }
337
347
  }
338
348
 
@@ -340,12 +350,12 @@ const SignupFormUI = (props: SignupParams) => {
340
350
  setRecaptchaVerified(false)
341
351
  if (!recaptchaConfig?.siteKey) {
342
352
  showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
343
- Vibration.vibrate()
353
+ vibrateApp()
344
354
  return
345
355
  }
346
356
  if (!recaptchaConfig?.baseUrl) {
347
357
  showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
348
- Vibration.vibrate()
358
+ vibrateApp()
349
359
  return
350
360
  }
351
361
  recaptchaRef.current.open()
@@ -389,11 +399,13 @@ const SignupFormUI = (props: SignupParams) => {
389
399
  baseUrl: configs?.security_recaptcha_base_url?.value || null
390
400
  })
391
401
  showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
392
- Vibration.vibrate()
402
+ vibrateApp()
393
403
  return
394
404
  }
395
- formState.result?.result && showToast(ToastType.Error, formState.result?.result[0]);
396
- formState.result?.result && Vibration.vibrate()
405
+ formState.result?.result && formState.result?.result[0]?.includes("_") ?
406
+ showToast(ToastType.Error, t(`${formState.result?.result[0]}`, 'Phone number already used')) :
407
+ showToast(ToastType.Error, formState.result?.result[0])
408
+ formState.result?.result && vibrateApp()
397
409
  setIsLoadingVerifyModal(false);
398
410
  }
399
411
  }, [formState]);
@@ -401,7 +413,7 @@ const SignupFormUI = (props: SignupParams) => {
401
413
  useEffect(() => {
402
414
  if (Object.keys(errors).length > 0) {
403
415
  setIsLoadingVerifyModal(false);
404
- Vibration.vibrate()
416
+ vibrateApp()
405
417
  }
406
418
  }, [errors])
407
419
 
@@ -430,7 +442,7 @@ const SignupFormUI = (props: SignupParams) => {
430
442
  ? verifyPhoneState?.result?.result
431
443
  : verifyPhoneState?.result?.result[0];
432
444
  verifyPhoneState.result?.result && showToast(ToastType.Error, message);
433
- verifyPhoneState.result?.result && Vibration.vibrate()
445
+ verifyPhoneState.result?.result && vibrateApp()
434
446
  setIsLoadingVerifyModal(false);
435
447
  return;
436
448
  }
@@ -465,15 +477,19 @@ const SignupFormUI = (props: SignupParams) => {
465
477
 
466
478
  return (
467
479
  <View>
468
- <NavBar
469
- title={t('SIGNUP', 'Signup')}
470
- titleAlign={'center'}
471
- onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
472
- showCall={false}
473
- btnStyle={{ paddingLeft: 0 }}
474
- titleWrapStyle={{ paddingHorizontal: 0 }}
475
- titleStyle={{ marginLeft: 0, marginRight: 0 }}
476
- />
480
+ {isGuest ? (
481
+ <OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('SIGNUP', 'Signup')}</OText>
482
+ ) : (
483
+ <NavBar
484
+ title={t('SIGNUP', 'Signup')}
485
+ titleAlign={'center'}
486
+ onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
487
+ showCall={false}
488
+ btnStyle={{ paddingLeft: 0 }}
489
+ titleWrapStyle={{ paddingHorizontal: 0 }}
490
+ titleStyle={{ marginLeft: 0, marginRight: 0 }}
491
+ />
492
+ )}
477
493
  <FormSide>
478
494
  {((Number(useSignUpFullDetails) + Number(useSignUpOtpEmail) + Number(useSignUpOtpCellphone)) > 1) && (
479
495
  <SignupWith>
@@ -586,7 +602,7 @@ const SignupFormUI = (props: SignupParams) => {
586
602
  control={control}
587
603
  render={({ onChange, value }: any) => (
588
604
  <OInput
589
- placeholder={t(field.name)}
605
+ placeholder={t(field.name?.replace(/\s/g, '_')?.toUpperCase(), field.name)}
590
606
  style={style.inputStyle}
591
607
  icon={
592
608
  field.code === 'email'
@@ -893,7 +909,7 @@ const SignupFormUI = (props: SignupParams) => {
893
909
  </View>
894
910
  )
895
911
  }
896
- {configs && Object.keys(configs).length > 0 && (
912
+ {configs && Object.keys(configs).length > 0 && !isGuest && (
897
913
  (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
898
914
  ((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
899
915
  ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
@@ -925,7 +941,7 @@ const SignupFormUI = (props: SignupParams) => {
925
941
  (
926
942
  <FacebookLogin
927
943
  notificationState={notificationState}
928
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
944
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
929
945
  handleLoading={(val: boolean) => setIsFBLoading(val)}
930
946
  handleSuccessFacebookLogin={handleSuccessFacebook}
931
947
  />
@@ -934,7 +950,7 @@ const SignupFormUI = (props: SignupParams) => {
934
950
  <GoogleLogin
935
951
  notificationState={notificationState}
936
952
  webClientId={configs?.google_login_client_id?.value}
937
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
953
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
938
954
  handleLoading={(val: boolean) => setIsFBLoading(val)}
939
955
  handleSuccessGoogleLogin={handleSuccessFacebook}
940
956
  />
@@ -942,7 +958,7 @@ const SignupFormUI = (props: SignupParams) => {
942
958
  {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
943
959
  <AppleLogin
944
960
  notificationState={notificationState}
945
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
961
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
946
962
  handleLoading={(val: boolean) => setIsFBLoading(val)}
947
963
  handleSuccessAppleLogin={handleSuccessFacebook}
948
964
  />
@@ -1,16 +1,18 @@
1
- import React, { useState } from 'react';
1
+ import React, { useState, useEffect } from 'react';
2
2
  import {
3
3
  SingleOrderCard as SingleOrderCardController,
4
4
  useUtils,
5
5
  useOrder,
6
6
  useLanguage
7
7
  } from 'ordering-components/native';
8
+ import FastImage from 'react-native-fast-image'
8
9
  import { StyleSheet, TouchableOpacity, View } from 'react-native';
9
10
  import { useTheme } from 'styled-components/native';
10
11
  import { OIcon, OText, OButton } from '../shared';
11
12
  import { SingleOrderCardParams } from '../../types';
12
13
  import { OAlert } from '../../../../../src/components/shared'
13
-
14
+ import { OrderEta } from '../OrderDetails/OrderEta'
15
+ import { useIsFocused } from '@react-navigation/native';
14
16
  import {
15
17
  InnerContainer,
16
18
  Logo,
@@ -44,12 +46,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
44
46
  const [, t] = useLanguage();
45
47
  const [{ carts }] = useOrder()
46
48
  const theme = useTheme();
49
+ const isFocused = useIsFocused();
47
50
 
48
- const [reorderSelected, setReorderSelected] = useState<number | null>(null);
51
+ let [reorderSelected, setReorderSelected] = useState<number | null>(null);
49
52
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
50
53
  const [isPressed, setIsPressed] = useState(false)
51
54
 
52
- const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
55
+ const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12, 15];
53
56
 
54
57
  const styles = StyleSheet.create({
55
58
  container: {
@@ -128,19 +131,29 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
128
131
  });
129
132
 
130
133
  const handleReorderClick = (order: any) => {
131
- if (carts[`businessId:${order?.business_id}`] && carts[`businessId:${order?.business_id}`]?.products?.length > 0) {
134
+ setReorderSelected(null)
135
+ reorderSelected = null
136
+ const isMultiOrders = Array.isArray(order?.id)
137
+
138
+ const isRemoveCart = isMultiOrders
139
+ ? order?.business_id?.some((businessId: any) => !!carts[`businessId:${businessId}`]?.uuid)
140
+ : carts[`businessId:${order?.business_id}`] && !!carts[`businessId:${order?.business_id}`]?.uuid
141
+
142
+ if (isRemoveCart) {
132
143
  setConfirm({
133
144
  open: true,
134
145
  content: [t('QUESTION_DELETE_PRODUCTS_FROM_CART', 'Are you sure that you want to delete all products from cart?')],
135
146
  title: t('ORDER', 'Order'),
136
147
  handleOnAccept: async () => {
137
- handleRemoveCart()
148
+ handleRemoveCart(order)
138
149
  setConfirm({ ...confirm, open: false })
139
150
  }
140
151
  })
141
152
  } else {
142
- setReorderSelected(order?.id);
143
- handleReorder && handleReorder(order?.id);
153
+ const orderId = Array.isArray(order?.id) ? order?.id[0] : order?.id
154
+ setReorderSelected(orderId)
155
+ reorderSelected = orderId
156
+ handleReorder && handleReorder(order?.id)
144
157
  }
145
158
  };
146
159
 
@@ -198,6 +211,10 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
198
211
  const hideFavorite = theme?.orders?.components?.favorite?.hidden
199
212
  const hideOrderStatus = theme?.orders?.components?.order_status?.hidden
200
213
 
214
+ useEffect(() => {
215
+ if (isFocused) setReorderSelected(null)
216
+ }, [isFocused])
217
+
201
218
  return (
202
219
  <>
203
220
  <CardAnimation
@@ -215,10 +232,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
215
232
  key={business?.id}
216
233
  style={styles.logoWrapper}
217
234
  >
218
- <OIcon
219
- url={optimizeImage(business?.logo, 'h_300,c_limit')}
220
- src={optimizeImage(!business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
235
+ <FastImage
221
236
  style={styles.minilogo}
237
+ source={business?.logo ? {
238
+ uri: optimizeImage(business?.logo, 'h_300,c_limit'),
239
+ priority: FastImage.priority.normal,
240
+ } : theme?.images?.dummies?.businessLogo}
241
+ resizeMode={FastImage.resizeMode.contain}
222
242
  />
223
243
  </Logo>
224
244
  ))}
@@ -228,10 +248,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
228
248
  </MultiLogosContainer>
229
249
  ) : (
230
250
  <Logo style={styles.logoWrapper}>
231
- <OIcon
232
- url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
233
- src={optimizeImage(!order.business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
251
+ <FastImage
234
252
  style={styles.logo}
253
+ source={order.business?.logo ? {
254
+ uri: optimizeImage(order.business?.logo, 'h_300,c_limit'),
255
+ priority: FastImage.priority.normal,
256
+ } : theme?.images?.dummies?.businessLogo}
257
+ resizeMode={FastImage.resizeMode.contain}
235
258
  />
236
259
  </Logo>
237
260
  )}
@@ -271,7 +294,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
271
294
  <ButtonWrapper>
272
295
  {!hideReviewOrderButton &&
273
296
  allowedOrderStatus.includes(parseInt(order?.status)) &&
274
- !order.review && (
297
+ !order.review && order?.cart && (
275
298
  <TouchableOpacity
276
299
  onPress={() => handleClickOrderReview(order)}
277
300
  style={styles.reviewButton}>
@@ -280,7 +303,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
280
303
  </OText>
281
304
  </TouchableOpacity>
282
305
  )}
283
- {order.cart && !hideReorderButton && (
306
+ {!hideReorderButton && typeof order?.id === 'number' && order?.cart && (
284
307
  <OButton
285
308
  text={t('REORDER', 'Reorder')}
286
309
  imgRightSrc={''}
@@ -333,7 +356,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
333
356
  {
334
357
  pastOrders
335
358
  ? order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })
336
- : order?.eta_time + 'min'
359
+ : <OrderEta order={order} />
337
360
  }
338
361
  </OText>
339
362
  )}
@@ -352,8 +375,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
352
375
  <LottieAnimation
353
376
  type='favorite'
354
377
  onClick={handleChangeFavorite}
355
- initialValue={order?.favorite ? 0.75 : 0}
356
- toValue={order?.favorite ? 0 : 0.75}
378
+ initialValue={order?.favorite ? 0.5 : 0}
379
+ toValue={order?.favorite ? 0 : 0.5}
357
380
  style={{ marginBottom: 5 }}
358
381
  iconProps={{ color: theme.colors.danger5, size: 16, style: { top: 7 } }}
359
382
  isActive={order?.favorite}
@@ -19,7 +19,7 @@ export const CardInfoWrapper = styled.View`
19
19
 
20
20
  export const ContentHeader = styled.View`
21
21
  flex-direction: row;
22
- justify-content: space-between;
22
+ justify-content: flex-end;
23
23
  `
24
24
 
25
25
  export const ButtonWrapper = styled.View`
@@ -17,7 +17,7 @@ import { InView } from 'react-native-intersection-observer'
17
17
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
18
18
  import { OButton, OIcon, OText } from '../shared';
19
19
  import FastImage from 'react-native-fast-image'
20
- import { shape } from '../../utils';
20
+ import { lightenDarkenColor, shape } from '../../utils';
21
21
  import { LottieAnimation } from '../LottieAnimation';
22
22
  import { CardAnimation } from '../shared/CardAnimation'
23
23
 
@@ -40,12 +40,13 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
40
40
  navigation,
41
41
  businessId,
42
42
  isPreviously,
43
- viewString
43
+ viewString,
44
+ businessSingleId
44
45
  } = props;
45
46
 
46
47
  const theme = useTheme();
47
48
  const hideAddButton = theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden ?? true
48
- const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
49
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
49
50
  const hideProductDescription = theme?.business_view?.components?.products?.components?.product?.components?.description?.hidden
50
51
  const hideProductLogo = viewString
51
52
  ? theme?.[viewString]?.components?.cart?.components?.products?.image?.hidden
@@ -108,7 +109,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
108
109
  },
109
110
  productTagsStyle: {
110
111
  width: 30,
111
- height: 30,
112
+ height: 30,
112
113
  marginRight: 5
113
114
  }
114
115
  });
@@ -168,7 +169,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
168
169
  }
169
170
 
170
171
  return (
171
- <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
172
+ <InView style={{ minHeight: hideAddButton ? 125 : 190, marginLeft: logoPosition === 'left' ? 12.5 : 0 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
172
173
  {isIntersectionObserver ? (
173
174
  <CardAnimation
174
175
  onClick={() => handleClickproduct()}
@@ -180,8 +181,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
180
181
  >
181
182
  <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
182
183
  {productAddedToCartLength > 0 && (
183
- <QuantityContainer style={[styles.quantityContainer, {
184
- transform: [{ translateX: 25 }, { translateY: -25 }],
184
+ <QuantityContainer businessSingleId={businessSingleId} style={[styles.quantityContainer, {
185
+ transform: [{ translateX: logoPosition === 'right' ? 25 : -25 }, { translateY: -25 }],
185
186
  }]}>
186
187
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
187
188
  </QuantityContainer>
@@ -200,8 +201,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
200
201
  <LottieAnimation
201
202
  type='favorite'
202
203
  onClick={handleChangeFavorite}
203
- initialValue={product?.favorite ? 0.75 : 0}
204
- toValue={product?.favorite ? 0 : 0.75}
204
+ initialValue={product?.favorite ? 0.5 : 0}
205
+ toValue={product?.favorite ? 0 : 0.5}
205
206
  disableAnimation={!auth}
206
207
  iconProps={{ color: theme.colors.danger5, size: 18 }}
207
208
  isActive={product?.favorite}
@@ -221,7 +222,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
221
222
  showsHorizontalScrollIndicator={false}
222
223
  horizontal
223
224
  style={{ marginLeft: 10 }}
224
- contentContainerStyle={{flexGrow: 1}}
225
+ contentContainerStyle={{ flexGrow: 1 }}
225
226
  >
226
227
  {product?.tags.map((tag: any, i: any) => (
227
228
  <TouchableWithoutFeedback key={i}>
@@ -265,13 +266,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
265
266
  {!!product?.ribbon?.enabled && (
266
267
  <RibbonBox
267
268
  bgColor={product?.ribbon?.color}
269
+ colorText={lightenDarkenColor(product?.ribbon?.color)}
270
+ borderRibbon={lightenDarkenColor(product?.ribbon?.color)}
268
271
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
269
272
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
270
273
  >
271
274
  <OText
272
275
  size={textSize}
273
276
  weight={'400'}
274
- color={theme.colors.white}
277
+ color={lightenDarkenColor(product?.ribbon?.color) ? theme.colors.black : theme.colors.white}
275
278
  numberOfLines={2}
276
279
  ellipsizeMode='tail'
277
280
  lineHeight={13}
@@ -49,16 +49,21 @@ export const RibbonBox = styled.View`
49
49
  background-color: ${(props: any) => props.theme.colors.primary};
50
50
  padding: 1px 8px;
51
51
  max-width: 60px;
52
-
53
52
  ${(props: any) => props.bgColor && css`
54
53
  background-color: ${props.bgColor};
55
54
  `}
56
-
57
55
  ${(props: any) => props.isRoundRect && css`
58
56
  border-radius: 7.6px;
59
57
  `}
60
-
61
58
  ${(props: any) => props.isCapsule && css`
62
59
  border-radius: 50px;
63
60
  `}
61
+
62
+ ${(props: any) => props.colorText && css`
63
+ color: ${props.colorText ? 'black' : 'white'};
64
+ `}
65
+
66
+ ${(props: any) => props.borderRibbon && css`
67
+ border: 1px solid ${props.borderRibbon ? 'black' : 'white'};
68
+ `}
64
69
  `
@@ -19,7 +19,7 @@ export const LogoWrapper = styled.View`
19
19
  shadowRadius: 3;
20
20
  shadowOffset: { width: 1, height: 4 };
21
21
  elevation: 3;
22
- borderRadius: 8;
22
+ border-radius: 8;
23
23
  shadowOpacity: 0.1;
24
24
  overflow: hidden;
25
25
  width: 80;