ordering-ui-react-native 0.22.33 → 0.22.34-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 (163) hide show
  1. package/package.json +6 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/Checkout/index.tsx +40 -39
  5. package/src/components/StripeMethodForm/index.tsx +4 -2
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/context/OfflineActions/index.tsx +236 -0
  8. package/src/types/index.tsx +2 -1
  9. package/themes/business/index.tsx +2 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  11. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  12. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  13. package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
  14. package/themes/business/src/components/Chat/index.tsx +15 -3
  15. package/themes/business/src/components/DriverMap/index.tsx +49 -26
  16. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  17. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  18. package/themes/business/src/components/LanguageSelector/index.tsx +1 -4
  19. package/themes/business/src/components/LoginForm/index.tsx +123 -98
  20. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  21. package/themes/business/src/components/MapView/index.tsx +46 -29
  22. package/themes/business/src/components/NewOrderNotification/index.tsx +38 -19
  23. package/themes/business/src/components/OrderDetails/Business.tsx +47 -27
  24. package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
  25. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +156 -46
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +55 -29
  27. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  28. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  30. package/themes/business/src/components/OrderSummary/index.tsx +6 -4
  31. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  32. package/themes/business/src/components/OrdersOption/index.tsx +222 -158
  33. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +30 -18
  35. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  36. package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
  37. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  38. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  39. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  40. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  41. package/themes/business/src/components/PrinterSettings/index.tsx +162 -174
  42. package/themes/business/src/components/PrinterSettings/styles.tsx +14 -1
  43. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  44. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  45. package/themes/business/src/components/StoresList/index.tsx +2 -2
  46. package/themes/business/src/components/UserProfileForm/index.tsx +57 -24
  47. package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
  48. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  49. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  50. package/themes/business/src/config/currency.tsx +1010 -0
  51. package/themes/business/src/hooks/useLocation.tsx +16 -12
  52. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  53. package/themes/business/src/types/index.tsx +18 -5
  54. package/themes/business/src/utils/index.tsx +28 -3
  55. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  56. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  57. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  58. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  59. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  60. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  61. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  62. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  63. package/themes/original/index.tsx +11 -0
  64. package/themes/original/src/components/AddressForm/index.tsx +27 -16
  65. package/themes/original/src/components/AddressList/index.tsx +8 -7
  66. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  67. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  68. package/themes/original/src/components/BusinessItemAccordion/index.tsx +14 -6
  69. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
  70. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +8 -6
  71. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  72. package/themes/original/src/components/BusinessPreorder/index.tsx +46 -28
  73. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  74. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  75. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  76. package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
  77. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  78. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  79. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  80. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  81. package/themes/original/src/components/Cart/index.tsx +46 -14
  82. package/themes/original/src/components/CartContent/index.tsx +2 -4
  83. package/themes/original/src/components/Checkout/index.tsx +127 -77
  84. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  85. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  86. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  87. package/themes/original/src/components/Favorite/index.tsx +1 -5
  88. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  89. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  90. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  91. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  92. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  93. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  94. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  95. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  96. package/themes/original/src/components/Help/index.tsx +2 -0
  97. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  98. package/themes/original/src/components/Home/index.tsx +2 -11
  99. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  100. package/themes/original/src/components/LoginForm/index.tsx +12 -9
  101. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  102. package/themes/original/src/components/Messages/index.tsx +27 -19
  103. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  104. package/themes/original/src/components/MomentOption/index.tsx +80 -52
  105. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  106. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  107. package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
  108. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
  109. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  110. package/themes/original/src/components/NavBar/index.tsx +7 -4
  111. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  112. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  113. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  114. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +16 -11
  115. package/themes/original/src/components/OrderDetails/index.tsx +45 -22
  116. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  117. package/themes/original/src/components/OrderProgress/index.tsx +4 -3
  118. package/themes/original/src/components/OrderSummary/index.tsx +29 -10
  119. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  120. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  121. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  122. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  123. package/themes/original/src/components/PaymentOptions/index.tsx +462 -461
  124. package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
  125. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  126. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  127. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  128. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  129. package/themes/original/src/components/ProductItemAccordion/index.tsx +30 -38
  130. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  131. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  132. package/themes/original/src/components/Promotions/index.tsx +6 -9
  133. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  134. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  135. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  136. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  137. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  138. package/themes/original/src/components/Sessions/index.tsx +3 -3
  139. package/themes/original/src/components/SignupForm/index.tsx +42 -30
  140. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  141. package/themes/original/src/components/SingleProductCard/index.tsx +5 -5
  142. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  143. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  144. package/themes/original/src/components/StripeCardsList/index.tsx +16 -3
  145. package/themes/original/src/components/StripeElementsForm/index.tsx +10 -4
  146. package/themes/original/src/components/StripeElementsForm/naked.tsx +1 -1
  147. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  148. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  149. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  150. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  151. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  152. package/themes/original/src/components/UserFormDetails/index.tsx +102 -74
  153. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  154. package/themes/original/src/components/UserVerification/index.tsx +15 -4
  155. package/themes/original/src/components/Wallets/index.tsx +6 -3
  156. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  157. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  158. package/themes/original/src/components/shared/OButton.tsx +5 -4
  159. package/themes/original/src/components/shared/OInput.tsx +4 -8
  160. package/themes/original/src/components/shared/OModal.tsx +7 -2
  161. package/themes/original/src/types/index.tsx +12 -4
  162. package/themes/original/src/utils/index.tsx +29 -0
  163. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -35,10 +35,17 @@ export const ProductOptionSubOptionUI = (props: any) => {
35
35
  disabled,
36
36
  setIsScrollAvailable,
37
37
  image,
38
- enableIntersection
38
+ enableIntersection,
39
+ usePizzaValidation,
40
+ pizzaState
39
41
  } = props
40
42
 
41
- const disableIncrement = option?.limit_suboptions_by_max ? balance === option?.max || state.quantity === suboption?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
43
+ const disableIncrement =
44
+ option?.with_half_option
45
+ ? pizzaState?.[`option:${option?.id}`]?.value === option?.max
46
+ : option?.limit_suboptions_by_max
47
+ ? (balance === option?.max || state.quantity === suboption.max)
48
+ : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
42
49
  const price = option?.with_half_option && suboption?.half_price && state.position !== 'whole' ? suboption?.half_price : suboption?.price
43
50
 
44
51
  const theme = useTheme();
@@ -65,8 +72,9 @@ export const ProductOptionSubOptionUI = (props: any) => {
65
72
  const handleSuboptionClick = () => {
66
73
  toggleSelect()
67
74
  setIsDirty(true)
75
+ const minMaxValidation = option?.with_half_option ? usePizzaValidation : (balance === option?.max && option?.suboptions?.length > balance && !(option?.min === 1 && option?.max === 1))
68
76
 
69
- if (balance === option?.max && option?.suboptions?.length > balance && !(option?.min === 1 && option?.max === 1)) {
77
+ if (!state.selected && minMaxValidation) {
70
78
  setShowMessage(true)
71
79
  }
72
80
  }
@@ -86,7 +94,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
86
94
  if (!(balance === option?.max && option?.suboptions?.length > balance && !(option?.min === 1 && option?.max === 1))) {
87
95
  setShowMessage(false)
88
96
  }
89
- }, [balance])
97
+ }, [balance, pizzaState?.[`option:${option?.id}`]?.value])
90
98
 
91
99
  return (
92
100
  <InView onChange={(inView: boolean) => handleChangeInterSection(inView)} triggerOnce={true}>
@@ -122,7 +130,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
122
130
  {suboption?.name}
123
131
  </OText>
124
132
  </IconControl>
125
- {option?.allow_suboption_quantity && state?.selected && (
133
+ {!(option?.max === 1 && option?.min === 1) && option?.allow_suboption_quantity && state?.selected && (
126
134
  <QuantityControl>
127
135
  <>
128
136
  <Checkbox disabled={disabled || state.quantity === 0} onPress={decrement}>
@@ -135,11 +143,11 @@ export const ProductOptionSubOptionUI = (props: any) => {
135
143
  <OText size={12}>
136
144
  {state.quantity}
137
145
  </OText>
138
- <Checkbox disabled={disabled || disableIncrement} onPress={increment}>
146
+ <Checkbox disabled={disabled || disableIncrement || usePizzaValidation} onPress={increment}>
139
147
  <IconAntDesign
140
148
  name='pluscircleo'
141
149
  size={iconsSize}
142
- color={disableIncrement || disabled ? theme.colors.disabled : theme.colors.primary}
150
+ color={disableIncrement || disabled || usePizzaValidation ? theme.colors.disabled : theme.colors.primary}
143
151
  />
144
152
  </Checkbox>
145
153
  </>
@@ -157,7 +165,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
157
165
  style={styles.inverse}
158
166
  />
159
167
  </Circle>
160
- <Circle disabled={disabled} onPress={() => changePosition('whole')}>
168
+ <Circle disabled={disabled || (pizzaState?.[`option:${option?.id}`]?.value === option?.max)} onPress={() => changePosition('whole')}>
161
169
  <OIcon
162
170
  src={theme.images.general.half_f}
163
171
  color={state.selected && state.position === 'whole' ? theme.colors.primary : '#cbcbcb'}
@@ -233,7 +233,7 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
233
233
  <CalendarWrapper>
234
234
  {(timeList?.length > 0 && isEnabled) ? (
235
235
  <SelectDropdown
236
- ref={dropdownRef}
236
+ ref={dropdownRef}
237
237
  data={timeList}
238
238
  onSelect={(selectedItem, index) => {
239
239
  console.log(selectedItem.value)
@@ -244,7 +244,7 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
244
244
  rowTextForSelection={(item, index) => {
245
245
  return item.text
246
246
  }}
247
- buttonStyle={{borderRadius: 7.6, ...styles.selectOption}}
247
+ buttonStyle={{ borderRadius: 7.6, ...styles.selectOption }}
248
248
  buttonTextStyle={{
249
249
  color: theme.colors.disabled,
250
250
  fontSize: 14,
@@ -267,7 +267,7 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
267
267
  }}
268
268
  renderCustomizedRowChild={(item, index) => {
269
269
  return (
270
- <Text style={[styles.dropDownRow, { color: isBusyTime(professional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary } ]}>
270
+ <Text style={[styles.dropDownRow, { color: isBusyTime(professional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary }]}>
271
271
  {item.text}
272
272
  </Text>
273
273
  )
@@ -326,11 +326,10 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
326
326
  </ScheduleWrapper>
327
327
  <ButtonWrapper>
328
328
  <OButton
329
- bgColor={theme.colors.primary}
330
329
  onClick={() => handleSelectProfessional()}
331
330
  text={t('BOOK', 'Book')}
332
331
  style={styles.buttonStyle}
333
- textStyle={{ fontSize: 14, color: theme.colors.white }}
332
+ textStyle={{ fontSize: 14 }}
334
333
  />
335
334
  </ButtonWrapper>
336
335
  </Container>
@@ -171,7 +171,7 @@ const PromotionsUI = (props: PromotionParams) => {
171
171
  onClick={() => handleClickOffer(offer)}
172
172
  text={t('VIEW', 'View')}
173
173
  style={styles.buttonStyle}
174
- textStyle={{ fontSize: 14, color: '#fff', flexWrap: 'nowrap' }}
174
+ textStyle={{ fontSize: 14, flexWrap: 'nowrap' }}
175
175
  />
176
176
  </WrapperSingleOffer>
177
177
  ))}
@@ -182,7 +182,7 @@ const PromotionsUI = (props: PromotionParams) => {
182
182
  title={``}
183
183
  onClose={() => setOpenModal(false)}
184
184
  >
185
- <View style={{ padding: 20 }}>
185
+ <ScrollView style={{ padding: 20 }}>
186
186
  <OText style={{ alignSelf: 'center', fontWeight: '700' }} mBottom={20}>
187
187
  {offerSelected?.name} / {t('VALUE_OF_OFFER', 'Value of offer')}: {offerSelected?.rate_type === 1 ? `${offerSelected?.rate}%` : `${parsePrice(offerSelected?.rate)}`}
188
188
  </OText>
@@ -210,10 +210,7 @@ const PromotionsUI = (props: PromotionParams) => {
210
210
  <OText style={{ marginTop: 10, marginBottom: 10 }}>
211
211
  {t('AVAILABLE_BUSINESSES_FOR_OFFER', 'Available businesses for this offer')}:
212
212
  </OText>
213
- <ScrollView
214
- showsVerticalScrollIndicator={false}
215
- style={{ height: '68%' }}
216
- >
213
+ <View style={{ marginBottom: 70 }}>
217
214
  {offerSelected?.businesses?.map((business: any) => {
218
215
  return (
219
216
  <SingleBusinessOffer key={business.id}>
@@ -238,14 +235,14 @@ const PromotionsUI = (props: PromotionParams) => {
238
235
  onClick={() => handleBusinessClick(business)}
239
236
  text={t('GO_TO_BUSINESSS', 'Go to business')}
240
237
  style={styles.modalButtonStyle}
241
- textStyle={{ fontSize: 10, color: '#fff' }}
238
+ textStyle={{ fontSize: 10 }}
242
239
  />
243
240
  </BusinessInfo>
244
241
  </SingleBusinessOffer>
245
242
  )
246
243
  })}
247
- </ScrollView>
248
- </View>
244
+ </View>
245
+ </ScrollView>
249
246
  </OModal>
250
247
  </PromotionsContainer>
251
248
  </Container>
@@ -293,7 +293,7 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
293
293
  <FloatingBottomContainer>
294
294
  <ActionContainer>
295
295
  <OButton
296
- textStyle={{ color: theme.colors.white, paddingRight: 10 }}
296
+ textStyle={{ paddingRight: 10 }}
297
297
  text={t('SEND_REVIEW', 'Send Review')}
298
298
  style={{ borderRadius: 8 }}
299
299
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
@@ -227,7 +227,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
227
227
  </View>
228
228
  ) : (
229
229
  <MultiLogosContainer>
230
- {order?.logo?.map((logo : string, i : number) => (
230
+ {order?.logo?.map((logo: string, i: number) => (
231
231
  <React.Fragment key={logo}>
232
232
  <View style={styles.logoWrapper}>
233
233
  <OIcon
@@ -333,7 +333,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
333
333
  <OText weight={700} size={18} color={theme.colors.textNormal}>{t('FRONT_VISUALS_SKIP', 'Skip')}</OText>
334
334
  </SkipButton>
335
335
  <OButton
336
- textStyle={{ color: theme.colors.white, paddingRight: 10 }}
336
+ textStyle={{ paddingRight: 10 }}
337
337
  text={t('CONTINUE', 'Continue')}
338
338
  style={{ borderRadius: 8 }}
339
339
  imgRightSrc={theme.images.general.arrow_right}
@@ -104,7 +104,7 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
104
104
  <OText weight={700} size={18} color={theme.colors.textNormal}>{t('FRONT_VISUALS_SKIP', 'Skip')}</OText>
105
105
  </SkipButton>
106
106
  <OButton
107
- textStyle={{ color: theme.colors.white, paddingRight: 10 }}
107
+ textStyle={{ paddingRight: 10 }}
108
108
  text={order?.driver && !order?.user_review ? t('CONTINUE', 'Continue') : t('SEND_REVIEW', 'Send Review')}
109
109
  style={{ borderRadius: 8 }}
110
110
  imgRightSrc={theme.images.general.arrow_right}
@@ -90,7 +90,7 @@ export const ReviewTrigger = (props: any) => {
90
90
  </View>
91
91
  ) : (
92
92
  <MultiLogosContainer>
93
- {order?.logo?.map((logo : string, i : number) => (
93
+ {order?.logo?.map((logo: string, i: number) => (
94
94
  <React.Fragment key={logo}>
95
95
  <View style={styles.logoWrapper}>
96
96
  <OIcon
@@ -122,7 +122,7 @@ export const ReviewTrigger = (props: any) => {
122
122
  <FloatingBottomContainer borderTopWidth={0} borderRadius={10}>
123
123
  <ActionContainer>
124
124
  <OButton
125
- textStyle={{ color: theme.colors.white, paddingRight: 10 }}
125
+ textStyle={{ paddingRight: 10 }}
126
126
  text={t('GOTO_REVIEW', 'Go to review')}
127
127
  style={{ borderRadius: 8 }}
128
128
  imgRightSrc={theme.images.general.arrow_right}
@@ -57,9 +57,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
57
57
  const [{ optimizeImage, parsePrice, parseDate }] = useUtils()
58
58
  const { top } = useSafeAreaInsets()
59
59
  const [{ configs }] = useConfig()
60
- const [orderState] = useOrder()
61
- const [{ auth }] = useSession()
62
- const { product, loading, error } = productObject;
60
+ const [orderState] = useOrder()
61
+ const [{ auth }] = useSession()
62
+ const { product, loading, error } = productObject;
63
63
 
64
64
  const [selectDate, setSelectedDate] = useState<any>(new Date())
65
65
  const [timeList, setTimeList] = useState<any>([])
@@ -77,8 +77,8 @@ const ServiceFormUI = (props: ServiceFormParams) => {
77
77
  const styles = StyleSheet.create({
78
78
  photoStyle: {
79
79
  width: 45,
80
- height: 45,
81
- borderRadius: 7.6
80
+ height: 45,
81
+ borderRadius: 7.6
82
82
  },
83
83
  buttonStyle: {
84
84
  borderRadius: 7.6,
@@ -144,7 +144,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
144
144
  return (moment.utc(item?.start).local().valueOf() <= moment(selectedMoment).valueOf() &&
145
145
  moment(selectedMoment).valueOf() < moment.utc(item?.end).local().valueOf()) ||
146
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())
147
+ moment(selectedMoment).add(duration, 'minutes').valueOf() < moment.utc(item?.end).local().valueOf())
148
148
  })
149
149
  return valid
150
150
  }
@@ -166,9 +166,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
166
166
  }
167
167
 
168
168
  const handleUpdateGuest = () => {
169
- const guestToken = uuid.v4()
170
- if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
171
- }
169
+ const guestToken = uuid.v4()
170
+ if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
171
+ }
172
172
 
173
173
  const customDayHeaderStylesCallback = () => {
174
174
  return {
@@ -193,11 +193,11 @@ const ServiceFormUI = (props: ServiceFormParams) => {
193
193
  }
194
194
 
195
195
  const handleRedirectLogin = () => {
196
- navigation && navigation.navigate('Login', {
197
- store_slug: props.businessSlug
198
- });
196
+ navigation && navigation.navigate('Login', {
197
+ store_slug: props.businessSlug
198
+ });
199
199
  onClose && onClose()
200
- };
200
+ };
201
201
 
202
202
  const getTimes = (curdate: any, menu: any) => {
203
203
  validateSelectedDate(curdate, menu)
@@ -290,7 +290,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
290
290
  setSelectedDate(moment.utc(productCart?.calendar_event?.start).local())
291
291
  setTimeSelected(moment.utc(productCart?.calendar_event?.start).local().format('HH:mm'))
292
292
  }, [productCart])
293
-
293
+
294
294
  return (
295
295
  <>
296
296
  {loading && !error && (
@@ -450,7 +450,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
450
450
  <CalendarWrapper>
451
451
  {(timeList?.length > 0 && isEnabled) ? (
452
452
  <SelectDropdown
453
- ref={dropdownRef}
453
+ ref={dropdownRef}
454
454
  defaultValueByIndex={timeList.findIndex((item: any) => item.value === timeSelected)}
455
455
  data={timeList}
456
456
  onSelect={(selectedItem, index) => {
@@ -462,7 +462,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
462
462
  rowTextForSelection={(item, index) => {
463
463
  return item.text
464
464
  }}
465
- buttonStyle={{borderRadius: 7.6, ...styles.selectOption}}
465
+ buttonStyle={{ borderRadius: 7.6, ...styles.selectOption }}
466
466
  buttonTextStyle={{
467
467
  color: theme.colors.disabled,
468
468
  fontSize: 14,
@@ -485,7 +485,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
485
485
  }}
486
486
  renderCustomizedRowChild={(item, index) => {
487
487
  return (
488
- <Text style={[styles.dropDownRow, { color: isBusyTime(currentProfessional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary } ]}>
488
+ <Text style={[styles.dropDownRow, { color: isBusyTime(currentProfessional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary }]}>
489
489
  {item.text}
490
490
  </Text>
491
491
  )
@@ -553,7 +553,6 @@ const ServiceFormUI = (props: ServiceFormParams) => {
553
553
  auth &&
554
554
  orderState.options?.address_id)) && (
555
555
  <OButton
556
- bgColor={theme.colors.primary}
557
556
  onClick={() => handleSaveService()}
558
557
  text={orderState.loading
559
558
  ? t('LOADING', 'Loading')
@@ -562,7 +561,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
562
561
  : t('BOOK', 'Book'))}
563
562
  style={styles.buttonStyle}
564
563
  isDisabled={isSoldOut || maxProductQuantity <= 0 || !currentProfessional?.id || !dateSelected || isBusyTime(currentProfessional, dateSelected)}
565
- textStyle={{ fontSize: 14, color: theme.colors.white }}
564
+ textStyle={{ fontSize: 14 }}
566
565
  />
567
566
  )}
568
567
  {auth &&
@@ -577,45 +576,44 @@ const ServiceFormUI = (props: ServiceFormParams) => {
577
576
  ) : (
578
577
  <OButton onClick={() => addressRedirect()} />
579
578
  ))}
580
- {!auth && (
581
- <OButton
582
- isDisabled={isSoldOut || maxProductQuantity <= 0}
583
- onClick={() => handleRedirectLogin()}
584
- text={
585
- isSoldOut || maxProductQuantity <= 0
586
- ? t('SOLD_OUT', 'Sold out')
587
- : t('LOGIN_SIGNUP', 'Login / Sign Up')
588
- }
589
- imgRightSrc=""
590
- textStyle={{ color: theme.colors.primary, fontSize: 14 }}
591
- style={{
592
- height: 44,
593
- borderColor: theme.colors.primary,
594
- backgroundColor: theme.colors.white,
595
- }}
596
- />
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
- )}
579
+ {!auth && (
580
+ <OButton
581
+ isDisabled={isSoldOut || maxProductQuantity <= 0}
582
+ onClick={() => handleRedirectLogin()}
583
+ text={
584
+ isSoldOut || maxProductQuantity <= 0
585
+ ? t('SOLD_OUT', 'Sold out')
586
+ : t('LOGIN_SIGNUP', 'Login / Sign Up')
587
+ }
588
+ imgRightSrc=""
589
+ textStyle={{ color: theme.colors.primary, fontSize: 14 }}
590
+ style={{
591
+ height: 44,
592
+ backgroundColor: theme.colors.white,
593
+ }}
594
+ />
595
+ )}
596
+ {!auth && guestCheckoutEnabled && orderTypeEnabled && (
597
+ <TouchableOpacity style={{ marginTop: 10 }} onPress={handleUpdateGuest}>
598
+ {actionStatus?.loading ? (
599
+ <Placeholder Animation={Fade}>
600
+ <PlaceholderLine width={60} height={20} />
601
+ </Placeholder>
602
+ ) : (
603
+ <OText color={theme.colors.primary} size={13}>{t('AS_GUEST_USER', 'As guest user')}</OText>
604
+ )}
605
+ </TouchableOpacity>
606
+ )}
609
607
  </ButtonWrapper>
610
608
  </Container>
611
609
  )}
612
610
 
613
611
  <OModal
614
- open={isOpen}
615
- onClose={() => setIsOpen(false)}
616
- entireModal
617
- >
618
- <ScrollView contentContainerStyle={styles.professionalList}>
612
+ open={isOpen}
613
+ onClose={() => setIsOpen(false)}
614
+ entireModal
615
+ >
616
+ <ScrollView contentContainerStyle={styles.professionalList}>
619
617
  <View style={{ paddingVertical: 11 }}>
620
618
  <OText
621
619
  size={14}
@@ -671,7 +669,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
671
669
  </TouchableOpacity>
672
670
  ))}
673
671
  </ScrollView>
674
- </OModal>
672
+ </OModal>
675
673
  </>
676
674
  )
677
675
  }
@@ -111,14 +111,14 @@ export const SessionsUI = (props: SessionsParams) => {
111
111
  <OButton
112
112
  text={t('DELETE_ALL_SESSIONS', 'Delete all sessions')}
113
113
  isDisabled={actionState.loading}
114
- textStyle={{ color: theme.colors.white, fontSize: 14 }}
114
+ textStyle={{ fontSize: 14 }}
115
115
  onClick={() => onDeleteAllSessions(false, true)}
116
116
  style={{ borderRadius: 7.6, marginTop: 30 }}
117
117
  />
118
118
  <OButton
119
119
  text={t('DELETE_ALL_SESSIONS_EXCEPT_CURRENT', 'Delete all sessions except current')}
120
120
  isDisabled={actionState.loading}
121
- textStyle={{ color: theme.colors.white, fontSize: 14 }}
121
+ textStyle={{ fontSize: 14 }}
122
122
  onClick={() => onDeleteAllSessions(false, false)}
123
123
  style={{ borderRadius: 7.6, marginTop: 20 }}
124
124
  />
@@ -136,7 +136,7 @@ export const SessionsUI = (props: SessionsParams) => {
136
136
  <OButton
137
137
  text={t('ACTIVE_SESSIONS', 'Active sessions')}
138
138
  isDisabled={actionState.loading}
139
- textStyle={{ color: theme.colors.white, fontSize: 14 }}
139
+ textStyle={{ fontSize: 14 }}
140
140
  onClick={() => onDeleteAllSessions(true, false)}
141
141
  style={{ borderRadius: 7.6, marginTop: 20 }}
142
142
  />
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
- import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity } from 'react-native';
2
+ import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity, Modal } 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';
@@ -32,11 +32,9 @@ import {
32
32
  } from '../LoginForm/styles';
33
33
 
34
34
  import NavBar from '../NavBar';
35
- import { VerifyPhone } from '../VerifyPhone';
36
35
 
37
36
  import Alert from '../../../../../src/providers/AlertProvider'
38
37
  import { OText, OButton, OInput } from '../shared';
39
- import { OModal } from '../../../../../src/components/shared';
40
38
  import { SignupParams } from '../../types';
41
39
  import { sortInputFields } from '../../utils';
42
40
  import { GoogleLogin } from '../GoogleLogin';
@@ -85,7 +83,8 @@ const SignupFormUI = (props: SignupParams) => {
85
83
  useSignUpFullDetails,
86
84
  useSignUpOtpEmail,
87
85
  useSignUpOtpCellphone,
88
- isGuest
86
+ isGuest,
87
+ setCellphoneStartZero
89
88
  } = props;
90
89
 
91
90
  const theme = useTheme();
@@ -141,6 +140,8 @@ const SignupFormUI = (props: SignupParams) => {
141
140
  const [recaptchaConfig, setRecaptchaConfig] = useState<any>({})
142
141
  const [recaptchaVerified, setRecaptchaVerified] = useState(false)
143
142
  const [tabLayouts, setTabLayouts] = useState<any>({})
143
+ const [isCheckingCode, setCheckingCode] = useState(false)
144
+ const [otpError, setOtpError] = useState(null)
144
145
 
145
146
  const tabsRef = useRef<any>(null)
146
147
  const nameRef = useRef<any>(null);
@@ -155,7 +156,7 @@ const SignupFormUI = (props: SignupParams) => {
155
156
  const showInputPhoneNumber = (validationFields?.fields?.checkout?.cellphone?.enabled ?? false) || configs?.verification_phone_required?.value === '1'
156
157
  const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
157
158
  const facebookLoginEnabled = configs?.facebook_login_enabled?.value === '1' || !configs?.facebook_login_enabled?.enabled
158
- const appleLoginEnabled = configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled
159
+ const appleLoginEnabled = Platform.OS === 'ios' && (configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled)
159
160
 
160
161
  const closeAlert = () => {
161
162
  setAlertState({
@@ -366,6 +367,19 @@ const SignupFormUI = (props: SignupParams) => {
366
367
  handleReCaptcha && handleReCaptcha({ code: token, version: recaptchaConfig?.version })
367
368
  }
368
369
 
370
+ const handleChangePhoneNumber = (number : any, rawNumber: any) => {
371
+ setPhoneInputData({
372
+ ...phoneInputData,
373
+ ...number,
374
+ phone: {
375
+ ...phoneInputData.phone,
376
+ ...number.phone,
377
+ country_code: phoneInputData.phone.country_code
378
+ }
379
+ })
380
+ setCellphoneStartZero && setCellphoneStartZero(rawNumber?.number && rawNumber?.countryCallingCode ? rawNumber?.number : null)
381
+ }
382
+
369
383
  useEffect(() => {
370
384
  if (configs && Object.keys(configs).length > 0 && enableReCaptcha) {
371
385
  if (configs?.security_recaptcha_type?.value === 'v3' &&
@@ -467,9 +481,16 @@ const SignupFormUI = (props: SignupParams) => {
467
481
 
468
482
  useEffect(() => {
469
483
  if (checkPhoneCodeState?.result?.error) {
470
- setAlertState({
484
+ const titleText = (
485
+ typeof checkPhoneCodeState?.result?.result === 'string'
486
+ ? checkPhoneCodeState?.result?.result
487
+ : checkPhoneCodeState?.result?.result[0].toString()
488
+ ) || t('ERROR', 'Error')
489
+ setCheckingCode(false)
490
+ setOtpError(titleText)
491
+ checkPhoneCodeState?.generate && setAlertState({
471
492
  open: true,
472
- title: (typeof checkPhoneCodeState?.result?.result === 'string' ? checkPhoneCodeState?.result?.result : checkPhoneCodeState?.result?.result[0].toString()) || t('ERROR', 'Error'),
493
+ title: titleText,
473
494
  content: []
474
495
  })
475
496
  }
@@ -650,15 +671,7 @@ const SignupFormUI = (props: SignupParams) => {
650
671
  <View style={{ marginBottom: 25 }}>
651
672
  <PhoneInputNumber
652
673
  data={phoneInputData}
653
- handleData={(val: any) => setPhoneInputData({
654
- ...phoneInputData,
655
- ...val,
656
- phone: {
657
- ...phoneInputData.phone,
658
- ...val.phone,
659
- country_code: phoneInputData.phone.country_code
660
- }
661
- })}
674
+ handleData={handleChangePhoneNumber}
662
675
  forwardRef={phoneRef}
663
676
  changeCountry={(val: any) => setPhoneInputData({
664
677
  ...phoneInputData,
@@ -789,9 +802,9 @@ const SignupFormUI = (props: SignupParams) => {
789
802
  <OButton
790
803
  imgRightSrc={null}
791
804
  text={t('TERMS_AND_CONDITIONS', 'Terms & Conditions')}
792
- bgColor='#FFF'
793
- borderColor='#FFF'
794
- style={{ paddingLeft: 0, paddingRight: 0, height: 30, shadowColor: '#FFF' }}
805
+ bgColor={theme.colors.white}
806
+ borderColor={theme.colors.white}
807
+ style={{ paddingLeft: 0, paddingRight: 0, height: 30, shadowColor: theme.colors.white }}
795
808
  textStyle={{ color: theme.colors.primary, marginLeft: 0, marginRight: 0 }}
796
809
  onClick={() => handleOpenTermsUrl(configs?.terms_and_conditions_url?.value)}
797
810
  />
@@ -835,6 +848,7 @@ const SignupFormUI = (props: SignupParams) => {
835
848
  />
836
849
  )
837
850
  }
851
+ autoCapitalize='none'
838
852
  value={value}
839
853
  onChange={(val: any) => onChange(val)}
840
854
  returnKeyType="done"
@@ -876,9 +890,7 @@ const SignupFormUI = (props: SignupParams) => {
876
890
  <OButton
877
891
  onClick={handleSubmit(onSubmit)}
878
892
  text={t('GET_VERIFY_CODE', 'Get Verify Code')}
879
- borderColor={theme.colors.primary}
880
893
  imgRightSrc={null}
881
- textStyle={{ color: 'white' }}
882
894
  isLoading={isLoadingVerifyModal}
883
895
  indicatorColor={theme.colors.white}
884
896
  style={{ borderRadius: 7.6, marginTop: 6 }}
@@ -887,9 +899,6 @@ const SignupFormUI = (props: SignupParams) => {
887
899
  <OButton
888
900
  onClick={handleSubmit(onSubmit)}
889
901
  text={signupButtonText}
890
- bgColor={theme.colors.primary}
891
- borderColor={theme.colors.primary}
892
- textStyle={{ color: 'white' }}
893
902
  imgRightSrc={null}
894
903
  isDisabled={formState.loading || validationFields.loading}
895
904
  style={{ borderRadius: 7.6, marginTop: 6, shadowOpacity: 0 }}
@@ -971,13 +980,16 @@ const SignupFormUI = (props: SignupParams) => {
971
980
  )
972
981
  )}
973
982
  </FormSide>
974
- <OModal
975
- open={willVerifyOtpState}
976
- onClose={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
977
- entireModal
978
- title={t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
983
+ <Modal
984
+ visible={willVerifyOtpState}
985
+ onDismiss={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
986
+ animationType='slide'
979
987
  >
980
988
  <Otp
989
+ isCheckingCode={isCheckingCode}
990
+ setCheckingCode={setCheckingCode}
991
+ otpError={otpError}
992
+ setOtpError={setOtpError}
981
993
  pinCount={numOtpInputs || 6}
982
994
  willVerifyOtpState={willVerifyOtpState || false}
983
995
  setWillVerifyOtpState={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
@@ -985,7 +997,7 @@ const SignupFormUI = (props: SignupParams) => {
985
997
  onSubmit={onSubmit}
986
998
  setAlertState={setAlertState}
987
999
  />
988
- </OModal>
1000
+ </Modal>
989
1001
  <Spinner
990
1002
  visible={formState.loading || validationFields.loading || isFBLoading}
991
1003
  />