ordering-ui-react-native 0.22.21 → 0.22.22-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 (164) 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 +2 -3
  19. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  20. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  21. package/themes/business/src/components/MapView/index.tsx +36 -17
  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 +128 -41
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +45 -18
  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 +217 -156
  33. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  34. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  35. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
  36. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  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 +55 -22
  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 +16 -4
  54. package/themes/business/src/utils/index.tsx +33 -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 +32 -17
  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 +13 -5
  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 +3 -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 -51
  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 +44 -21
  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 +4 -3
  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 +50 -43
  130. package/themes/original/src/components/ProductItemAccordion/styles.tsx +0 -3
  131. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  132. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  133. package/themes/original/src/components/Promotions/index.tsx +6 -9
  134. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  135. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  136. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  137. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  138. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  139. package/themes/original/src/components/Sessions/index.tsx +3 -3
  140. package/themes/original/src/components/SignupForm/index.tsx +102 -88
  141. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  142. package/themes/original/src/components/SingleProductCard/index.tsx +5 -5
  143. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  144. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  145. package/themes/original/src/components/StripeCardsList/index.tsx +16 -3
  146. package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
  147. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  148. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  149. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  150. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  151. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  152. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  153. package/themes/original/src/components/UserFormDetails/index.tsx +164 -135
  154. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  155. package/themes/original/src/components/UserVerification/index.tsx +15 -4
  156. package/themes/original/src/components/Wallets/index.tsx +6 -3
  157. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  158. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  159. package/themes/original/src/components/shared/OButton.tsx +5 -4
  160. package/themes/original/src/components/shared/OInput.tsx +4 -8
  161. package/themes/original/src/components/shared/OModal.tsx +7 -2
  162. package/themes/original/src/types/index.tsx +10 -3
  163. package/themes/original/src/utils/index.tsx +30 -1
  164. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -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
  }
@@ -583,80 +604,74 @@ const SignupFormUI = (props: SignupParams) => {
583
604
  {sortInputFields({
584
605
  values: validationFields?.fields?.checkout,
585
606
  }).map(
586
- (field: any, i: number) =>
587
- !notValidationFields.includes(field.code) &&
588
- showField &&
589
- showField(field.code) &&
590
- (signUpTab === 'default' ||
591
- (signUpTab === 'otpEmail' && field.code === 'email')) && (
592
- <React.Fragment key={field.id}>
593
- {errors?.[`${field.code}`] && (
594
- <OText
595
- size={14}
596
- color={theme.colors.danger5}
597
- weight={'normal'}>
598
- {errors?.[`${field.code}`]?.message} {errors?.[`${field.code}`]?.type === 'required' && '*'}
599
- </OText>
600
- )}
601
- <Controller
602
- control={control}
603
- render={({ onChange, value }: any) => (
604
- <OInput
605
- placeholder={t(field.name?.replace(/\s/g, '_')?.toUpperCase(), field.name)}
606
- style={style.inputStyle}
607
- icon={
608
- field.code === 'email'
609
- ? theme.images.general.email
610
- : theme.images.general.user
611
- }
612
- value={value}
613
- onChange={(val: any) =>
614
- field.code !== 'email'
615
- ? (onChange(val))
616
- : handleChangeInputEmail(val, onChange)
617
- }
618
- autoCapitalize={
619
- field.code === 'email' ? 'none' : 'sentences'
620
- }
621
- autoCorrect={field.code === 'email' && false}
622
- type={
623
- field.code === 'email' ? 'email-address' : 'default'
624
- }
625
- autoCompleteType={
626
- field.code === 'email' ? 'email' : 'off'
627
- }
628
- returnKeyType="next"
629
- blurOnSubmit={false}
630
- forwardRef={(ref: any) => handleRefs(ref, field.code)}
631
- onSubmitEditing={() =>
632
- field.code === 'email'
633
- ? phoneRef?.current?.focus?.()
634
- : handleFocusRef(getNextFieldCode(i))
635
- }
636
- borderColor={errors?.[`${field.code}`] ? theme.colors.danger5 : theme.colors.border}
637
- />
607
+ (item: any, i: number) => {
608
+ const field = item?.validation_field || item
609
+ return (!notValidationFields.includes(field.code) &&
610
+ showField &&
611
+ showField(field.code) &&
612
+ (signUpTab === 'default' ||
613
+ (signUpTab === 'otpEmail' && field.code === 'email')) && (
614
+ <React.Fragment key={field.id}>
615
+ {errors?.[`${field.code}`] && (
616
+ <OText
617
+ size={14}
618
+ color={theme.colors.danger5}
619
+ weight={'normal'}>
620
+ {errors?.[`${field.code}`]?.message} {errors?.[`${field.code}`]?.type === 'required' && '*'}
621
+ </OText>
638
622
  )}
639
- name={field.code}
640
- rules={getInputRules(field)}
641
- defaultValue=""
642
- />
643
- </React.Fragment>
644
- ),
623
+ <Controller
624
+ control={control}
625
+ render={({ onChange, value }: any) => (
626
+ <OInput
627
+ placeholder={t(field.name?.replace(/\s/g, '_')?.toUpperCase(), field.name)}
628
+ style={style.inputStyle}
629
+ icon={
630
+ field.code === 'email'
631
+ ? theme.images.general.email
632
+ : theme.images.general.user
633
+ }
634
+ value={value}
635
+ onChange={(val: any) =>
636
+ field.code !== 'email'
637
+ ? (onChange(val))
638
+ : handleChangeInputEmail(val, onChange)
639
+ }
640
+ autoCapitalize={
641
+ field.code === 'email' ? 'none' : 'sentences'
642
+ }
643
+ autoCorrect={field.code === 'email' && false}
644
+ type={
645
+ field.code === 'email' ? 'email-address' : 'default'
646
+ }
647
+ autoCompleteType={
648
+ field.code === 'email' ? 'email' : 'off'
649
+ }
650
+ returnKeyType="next"
651
+ blurOnSubmit={false}
652
+ forwardRef={(ref: any) => handleRefs(ref, field.code)}
653
+ onSubmitEditing={() =>
654
+ field.code === 'email'
655
+ ? phoneRef?.current?.focus?.()
656
+ : handleFocusRef(getNextFieldCode(i))
657
+ }
658
+ borderColor={errors?.[`${field.code}`] ? theme.colors.danger5 : theme.colors.border}
659
+ />
660
+ )}
661
+ name={field.code}
662
+ rules={getInputRules(field)}
663
+ defaultValue=""
664
+ />
665
+ </React.Fragment>
666
+ ))
667
+ }
645
668
  )}
646
669
 
647
670
  {(!!showInputPhoneNumber && (signUpTab === 'default' || signUpTab === 'otpCellphone')) && (
648
671
  <View style={{ marginBottom: 25 }}>
649
672
  <PhoneInputNumber
650
673
  data={phoneInputData}
651
- handleData={(val: any) => setPhoneInputData({
652
- ...phoneInputData,
653
- ...val,
654
- phone: {
655
- ...phoneInputData.phone,
656
- ...val.phone,
657
- country_code: phoneInputData.phone.country_code
658
- }
659
- })}
674
+ handleData={handleChangePhoneNumber}
660
675
  forwardRef={phoneRef}
661
676
  changeCountry={(val: any) => setPhoneInputData({
662
677
  ...phoneInputData,
@@ -787,9 +802,9 @@ const SignupFormUI = (props: SignupParams) => {
787
802
  <OButton
788
803
  imgRightSrc={null}
789
804
  text={t('TERMS_AND_CONDITIONS', 'Terms & Conditions')}
790
- bgColor='#FFF'
791
- borderColor='#FFF'
792
- 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 }}
793
808
  textStyle={{ color: theme.colors.primary, marginLeft: 0, marginRight: 0 }}
794
809
  onClick={() => handleOpenTermsUrl(configs?.terms_and_conditions_url?.value)}
795
810
  />
@@ -833,6 +848,7 @@ const SignupFormUI = (props: SignupParams) => {
833
848
  />
834
849
  )
835
850
  }
851
+ autoCapitalize='none'
836
852
  value={value}
837
853
  onChange={(val: any) => onChange(val)}
838
854
  returnKeyType="done"
@@ -874,9 +890,7 @@ const SignupFormUI = (props: SignupParams) => {
874
890
  <OButton
875
891
  onClick={handleSubmit(onSubmit)}
876
892
  text={t('GET_VERIFY_CODE', 'Get Verify Code')}
877
- borderColor={theme.colors.primary}
878
893
  imgRightSrc={null}
879
- textStyle={{ color: 'white' }}
880
894
  isLoading={isLoadingVerifyModal}
881
895
  indicatorColor={theme.colors.white}
882
896
  style={{ borderRadius: 7.6, marginTop: 6 }}
@@ -885,9 +899,6 @@ const SignupFormUI = (props: SignupParams) => {
885
899
  <OButton
886
900
  onClick={handleSubmit(onSubmit)}
887
901
  text={signupButtonText}
888
- bgColor={theme.colors.primary}
889
- borderColor={theme.colors.primary}
890
- textStyle={{ color: 'white' }}
891
902
  imgRightSrc={null}
892
903
  isDisabled={formState.loading || validationFields.loading}
893
904
  style={{ borderRadius: 7.6, marginTop: 6, shadowOpacity: 0 }}
@@ -969,13 +980,16 @@ const SignupFormUI = (props: SignupParams) => {
969
980
  )
970
981
  )}
971
982
  </FormSide>
972
- <OModal
973
- open={willVerifyOtpState}
974
- onClose={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
975
- entireModal
976
- title={t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
983
+ <Modal
984
+ visible={willVerifyOtpState}
985
+ onDismiss={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
986
+ animationType='slide'
977
987
  >
978
988
  <Otp
989
+ isCheckingCode={isCheckingCode}
990
+ setCheckingCode={setCheckingCode}
991
+ otpError={otpError}
992
+ setOtpError={setOtpError}
979
993
  pinCount={numOtpInputs || 6}
980
994
  willVerifyOtpState={willVerifyOtpState || false}
981
995
  setWillVerifyOtpState={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
@@ -983,7 +997,7 @@ const SignupFormUI = (props: SignupParams) => {
983
997
  onSubmit={onSubmit}
984
998
  setAlertState={setAlertState}
985
999
  />
986
- </OModal>
1000
+ </Modal>
987
1001
  <Spinner
988
1002
  visible={formState.loading || validationFields.loading || isFBLoading}
989
1003
  />
@@ -3,7 +3,8 @@ import {
3
3
  SingleOrderCard as SingleOrderCardController,
4
4
  useUtils,
5
5
  useOrder,
6
- useLanguage
6
+ useLanguage,
7
+ useConfig
7
8
  } from 'ordering-components/native';
8
9
  import FastImage from 'react-native-fast-image'
9
10
  import { StyleSheet, TouchableOpacity, View } from 'react-native';
@@ -45,6 +46,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
45
46
  const [{ parsePrice, optimizeImage, parseDate }] = useUtils();
46
47
  const [, t] = useLanguage();
47
48
  const [{ carts }] = useOrder()
49
+ const [{ configs }] = useConfig()
48
50
  const theme = useTheme();
49
51
  const isFocused = useIsFocused();
50
52
 
@@ -54,6 +56,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
54
56
 
55
57
  const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12, 15];
56
58
  const isGiftCardOrder = !order?.business_id
59
+ const changeIdToExternalId = configs?.change_order_id?.value === '1'
57
60
 
58
61
  const styles = StyleSheet.create({
59
62
  container: {
@@ -82,7 +85,6 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
82
85
  elevation: 3
83
86
  },
84
87
  buttonText: {
85
- color: theme.colors.primary,
86
88
  fontSize: 10,
87
89
  marginLeft: 2,
88
90
  marginRight: 2,
@@ -334,7 +336,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
334
336
  lineHeight={15}
335
337
  numberOfLines={1}
336
338
  >
337
- {order?.business?.length > 1 ? order?.business?.length : (t('ORDER_NO', 'Order No') + '.')}
339
+ {order?.business?.length > 1 ? order?.business?.length : !(changeIdToExternalId && order?.external_id) && (t('ORDER_NO', 'Order No') + '.')}
338
340
  </OText>
339
341
  <OText
340
342
  size={10}
@@ -343,7 +345,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
343
345
  lineHeight={15}
344
346
  numberOfLines={1}
345
347
  >
346
- {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : order.id + ` \u2022 `}
348
+ {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : ((changeIdToExternalId && order?.external_id) || order.id) + ` \u2022 `}
347
349
  </OText>
348
350
  </>
349
351
  )}
@@ -48,11 +48,13 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
48
48
  const hideAddButton = theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden ?? true
49
49
  const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
50
50
  const hideProductDescription = theme?.business_view?.components?.products?.components?.product?.components?.description?.hidden
51
+ const hideProductDummyLogo = theme?.business_view?.components?.products?.components?.product?.components?.dummy?.hidden
51
52
  const hideProductLogo = viewString
52
53
  ? theme?.[viewString]?.components?.cart?.components?.products?.image?.hidden
53
54
  : theme?.business_view?.components?.products?.components?.product?.components?.image?.hidden
54
55
  const textSize = isChewLayout ? 12 : 10
55
56
  const logoPosition = theme?.business_view?.components?.products?.components?.product?.components?.image?.position
57
+ const hideFavoriteIcon = theme?.business_view?.components?.products?.components?.product?.components?.favorite?.hidden
56
58
 
57
59
  const styles = StyleSheet.create({
58
60
  container: {
@@ -197,7 +199,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
197
199
  style={{ ...styles.line18, flex: 1 }}>
198
200
  {product?.name}
199
201
  </OText>
200
- {!isPreviously && (
202
+ {!isPreviously && !hideFavoriteIcon && (
201
203
  <LottieAnimation
202
204
  type='favorite'
203
205
  onClick={handleChangeFavorite}
@@ -283,7 +285,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
283
285
  </OText>
284
286
  </RibbonBox>
285
287
  )}
286
- {!hideProductLogo && (
288
+ {(!hideProductLogo && (product?.images || !hideProductDummyLogo)) && (
287
289
  <FastImage
288
290
  style={styles.productStyle}
289
291
  source={product?.images ? {
@@ -313,9 +315,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
313
315
  height: 40
314
316
 
315
317
  }}
316
- bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
317
- borderColor={theme?.colors.primary}
318
- textStyle={{ color: theme.colors.primary }}
318
+ isDisabled={isSoldOut}
319
319
  text={t('ADD', 'Add')}
320
320
  />
321
321
  )}
@@ -49,15 +49,12 @@ 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
  `}
@@ -65,9 +65,6 @@ const StripeCardFormUI = (props: any) => {
65
65
  <OButton
66
66
  text={loading ? t('LOADING', 'Loading...') : t('ADD', 'Add')}
67
67
  isDisabled={!cardState?.valid || loading}
68
- bgColor={theme.colors.primary}
69
- borderColor={theme.colors.primary}
70
- textStyle={{ color: 'white' }}
71
68
  imgRightSrc={null}
72
69
  onClick={handleSubmit}
73
70
  />