ordering-ui-react-native 0.21.89 → 0.21.90-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/StripeMethodForm/index.tsx +6 -4
  5. package/src/components/VerifyPhone/styles.tsx +1 -2
  6. package/src/context/OfflineActions/index.tsx +236 -0
  7. package/src/types/index.tsx +3 -1
  8. package/themes/business/index.tsx +2 -0
  9. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  10. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  11. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  12. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  13. package/themes/business/src/components/Chat/index.tsx +5 -2
  14. package/themes/business/src/components/DriverMap/index.tsx +49 -27
  15. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  16. package/themes/business/src/components/Home/index.tsx +5 -1
  17. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  18. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  19. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  20. package/themes/business/src/components/MapView/index.tsx +36 -17
  21. package/themes/business/src/components/NewOrderNotification/index.tsx +69 -33
  22. package/themes/business/src/components/OrderDetails/Business.tsx +74 -9
  23. package/themes/business/src/components/OrderDetails/Delivery.tsx +131 -51
  24. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +112 -41
  25. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +62 -24
  26. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  27. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +221 -0
  28. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  29. package/themes/business/src/components/OrderSummary/index.tsx +223 -73
  30. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  31. package/themes/business/src/components/OrdersOption/index.tsx +251 -159
  32. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  33. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +42 -20
  35. package/themes/business/src/components/PreviousOrders/index.tsx +76 -66
  36. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  37. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  38. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  39. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  40. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  41. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  42. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  43. package/themes/business/src/components/Sessions/index.tsx +1 -1
  44. package/themes/business/src/components/StoresList/index.tsx +2 -2
  45. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  46. package/themes/business/src/components/UserProfileForm/index.tsx +43 -25
  47. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  48. package/themes/business/src/components/shared/OInput.tsx +2 -0
  49. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  50. package/themes/business/src/hooks/useLocation.tsx +5 -4
  51. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  52. package/themes/business/src/types/index.tsx +14 -4
  53. package/themes/business/src/utils/index.tsx +25 -1
  54. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  55. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  56. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  57. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  58. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  59. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  60. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  61. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  62. package/themes/original/index.tsx +11 -0
  63. package/themes/original/src/components/AddressDetails/index.tsx +18 -8
  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/AnalyticsSegment/index.tsx +6 -6
  67. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  68. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  69. package/themes/original/src/components/BusinessController/index.tsx +12 -7
  70. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  71. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  72. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  73. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  74. package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
  75. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +5 -5
  76. package/themes/original/src/components/BusinessProductsList/index.tsx +2 -2
  77. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  78. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  79. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  80. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  81. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -1
  82. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  83. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  84. package/themes/original/src/components/Cart/index.tsx +43 -15
  85. package/themes/original/src/components/CartContent/index.tsx +2 -4
  86. package/themes/original/src/components/Checkout/index.tsx +104 -58
  87. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  88. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  89. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  90. package/themes/original/src/components/Favorite/index.tsx +1 -5
  91. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  92. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  93. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  94. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  95. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  96. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  97. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  98. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  99. package/themes/original/src/components/Help/index.tsx +2 -0
  100. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  101. package/themes/original/src/components/Home/index.tsx +2 -10
  102. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  103. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  104. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  105. package/themes/original/src/components/Messages/index.tsx +13 -9
  106. package/themes/original/src/components/MomentOption/index.tsx +13 -2
  107. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  108. package/themes/original/src/components/MultiCheckout/index.tsx +130 -86
  109. package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -1
  110. package/themes/original/src/components/MyOrders/index.tsx +10 -23
  111. package/themes/original/src/components/NavBar/index.tsx +7 -4
  112. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  113. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  114. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  115. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +13 -10
  116. package/themes/original/src/components/OrderDetails/index.tsx +42 -19
  117. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  118. package/themes/original/src/components/OrderProgress/index.tsx +16 -6
  119. package/themes/original/src/components/OrderSummary/index.tsx +28 -9
  120. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  121. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  122. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  123. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  124. package/themes/original/src/components/PaymentOptions/index.tsx +17 -9
  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 +55 -49
  130. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  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 +86 -78
  141. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  142. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  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 +10 -3
  146. package/themes/original/src/components/StripeElementsForm/index.tsx +77 -60
  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 +3 -2
  153. package/themes/original/src/components/UserFormDetails/index.tsx +154 -130
  154. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  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 +5 -1
  162. package/themes/original/src/utils/index.tsx +30 -1
  163. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -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';
@@ -141,6 +139,8 @@ const SignupFormUI = (props: SignupParams) => {
141
139
  const [recaptchaConfig, setRecaptchaConfig] = useState<any>({})
142
140
  const [recaptchaVerified, setRecaptchaVerified] = useState(false)
143
141
  const [tabLayouts, setTabLayouts] = useState<any>({})
142
+ const [isCheckingCode, setCheckingCode] = useState(false)
143
+ const [otpError, setOtpError] = useState(null)
144
144
 
145
145
  const tabsRef = useRef<any>(null)
146
146
  const nameRef = useRef<any>(null);
@@ -155,7 +155,7 @@ const SignupFormUI = (props: SignupParams) => {
155
155
  const showInputPhoneNumber = (validationFields?.fields?.checkout?.cellphone?.enabled ?? false) || configs?.verification_phone_required?.value === '1'
156
156
  const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
157
157
  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
158
+ const appleLoginEnabled = Platform.OS === 'ios' && (configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled)
159
159
 
160
160
  const closeAlert = () => {
161
161
  setAlertState({
@@ -467,9 +467,16 @@ const SignupFormUI = (props: SignupParams) => {
467
467
 
468
468
  useEffect(() => {
469
469
  if (checkPhoneCodeState?.result?.error) {
470
- setAlertState({
470
+ const titleText = (
471
+ typeof checkPhoneCodeState?.result?.result === 'string'
472
+ ? checkPhoneCodeState?.result?.result
473
+ : checkPhoneCodeState?.result?.result[0].toString()
474
+ ) || t('ERROR', 'Error')
475
+ setCheckingCode(false)
476
+ setOtpError(titleText)
477
+ checkPhoneCodeState?.generate && setAlertState({
471
478
  open: true,
472
- title: (typeof checkPhoneCodeState?.result?.result === 'string' ? checkPhoneCodeState?.result?.result : checkPhoneCodeState?.result?.result[0].toString()) || t('ERROR', 'Error'),
479
+ title: titleText,
473
480
  content: []
474
481
  })
475
482
  }
@@ -583,65 +590,67 @@ const SignupFormUI = (props: SignupParams) => {
583
590
  {sortInputFields({
584
591
  values: validationFields?.fields?.checkout,
585
592
  }).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
- />
593
+ (item: any, i: number) => {
594
+ const field = item?.validation_field || item
595
+ return (!notValidationFields.includes(field.code) &&
596
+ showField &&
597
+ showField(field.code) &&
598
+ (signUpTab === 'default' ||
599
+ (signUpTab === 'otpEmail' && field.code === 'email')) && (
600
+ <React.Fragment key={field.id}>
601
+ {errors?.[`${field.code}`] && (
602
+ <OText
603
+ size={14}
604
+ color={theme.colors.danger5}
605
+ weight={'normal'}>
606
+ {errors?.[`${field.code}`]?.message} {errors?.[`${field.code}`]?.type === 'required' && '*'}
607
+ </OText>
638
608
  )}
639
- name={field.code}
640
- rules={getInputRules(field)}
641
- defaultValue=""
642
- />
643
- </React.Fragment>
644
- ),
609
+ <Controller
610
+ control={control}
611
+ render={({ onChange, value }: any) => (
612
+ <OInput
613
+ placeholder={t(field.name?.replace(/\s/g, '_')?.toUpperCase(), field.name)}
614
+ style={style.inputStyle}
615
+ icon={
616
+ field.code === 'email'
617
+ ? theme.images.general.email
618
+ : theme.images.general.user
619
+ }
620
+ value={value}
621
+ onChange={(val: any) =>
622
+ field.code !== 'email'
623
+ ? (onChange(val))
624
+ : handleChangeInputEmail(val, onChange)
625
+ }
626
+ autoCapitalize={
627
+ field.code === 'email' ? 'none' : 'sentences'
628
+ }
629
+ autoCorrect={field.code === 'email' && false}
630
+ type={
631
+ field.code === 'email' ? 'email-address' : 'default'
632
+ }
633
+ autoCompleteType={
634
+ field.code === 'email' ? 'email' : 'off'
635
+ }
636
+ returnKeyType="next"
637
+ blurOnSubmit={false}
638
+ forwardRef={(ref: any) => handleRefs(ref, field.code)}
639
+ onSubmitEditing={() =>
640
+ field.code === 'email'
641
+ ? phoneRef?.current?.focus?.()
642
+ : handleFocusRef(getNextFieldCode(i))
643
+ }
644
+ borderColor={errors?.[`${field.code}`] ? theme.colors.danger5 : theme.colors.border}
645
+ />
646
+ )}
647
+ name={field.code}
648
+ rules={getInputRules(field)}
649
+ defaultValue=""
650
+ />
651
+ </React.Fragment>
652
+ ))
653
+ }
645
654
  )}
646
655
 
647
656
  {(!!showInputPhoneNumber && (signUpTab === 'default' || signUpTab === 'otpCellphone')) && (
@@ -787,9 +796,9 @@ const SignupFormUI = (props: SignupParams) => {
787
796
  <OButton
788
797
  imgRightSrc={null}
789
798
  text={t('TERMS_AND_CONDITIONS', 'Terms & Conditions')}
790
- bgColor='#FFF'
791
- borderColor='#FFF'
792
- style={{ paddingLeft: 0, paddingRight: 0, height: 30, shadowColor: '#FFF' }}
799
+ bgColor={theme.colors.white}
800
+ borderColor={theme.colors.white}
801
+ style={{ paddingLeft: 0, paddingRight: 0, height: 30, shadowColor: theme.colors.white }}
793
802
  textStyle={{ color: theme.colors.primary, marginLeft: 0, marginRight: 0 }}
794
803
  onClick={() => handleOpenTermsUrl(configs?.terms_and_conditions_url?.value)}
795
804
  />
@@ -833,6 +842,7 @@ const SignupFormUI = (props: SignupParams) => {
833
842
  />
834
843
  )
835
844
  }
845
+ autoCapitalize='none'
836
846
  value={value}
837
847
  onChange={(val: any) => onChange(val)}
838
848
  returnKeyType="done"
@@ -874,9 +884,7 @@ const SignupFormUI = (props: SignupParams) => {
874
884
  <OButton
875
885
  onClick={handleSubmit(onSubmit)}
876
886
  text={t('GET_VERIFY_CODE', 'Get Verify Code')}
877
- borderColor={theme.colors.primary}
878
887
  imgRightSrc={null}
879
- textStyle={{ color: 'white' }}
880
888
  isLoading={isLoadingVerifyModal}
881
889
  indicatorColor={theme.colors.white}
882
890
  style={{ borderRadius: 7.6, marginTop: 6 }}
@@ -885,9 +893,6 @@ const SignupFormUI = (props: SignupParams) => {
885
893
  <OButton
886
894
  onClick={handleSubmit(onSubmit)}
887
895
  text={signupButtonText}
888
- bgColor={theme.colors.primary}
889
- borderColor={theme.colors.primary}
890
- textStyle={{ color: 'white' }}
891
896
  imgRightSrc={null}
892
897
  isDisabled={formState.loading || validationFields.loading}
893
898
  style={{ borderRadius: 7.6, marginTop: 6, shadowOpacity: 0 }}
@@ -969,13 +974,16 @@ const SignupFormUI = (props: SignupParams) => {
969
974
  )
970
975
  )}
971
976
  </FormSide>
972
- <OModal
973
- open={willVerifyOtpState}
974
- onClose={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
975
- entireModal
976
- title={t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
977
+ <Modal
978
+ visible={willVerifyOtpState}
979
+ onDismiss={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
980
+ animationType='slide'
977
981
  >
978
982
  <Otp
983
+ isCheckingCode={isCheckingCode}
984
+ setCheckingCode={setCheckingCode}
985
+ otpError={otpError}
986
+ setOtpError={setOtpError}
979
987
  pinCount={numOtpInputs || 6}
980
988
  willVerifyOtpState={willVerifyOtpState || false}
981
989
  setWillVerifyOtpState={() => setWillVerifyOtpState && setWillVerifyOtpState(false)}
@@ -983,7 +991,7 @@ const SignupFormUI = (props: SignupParams) => {
983
991
  onSubmit={onSubmit}
984
992
  setAlertState={setAlertState}
985
993
  />
986
- </OModal>
994
+ </Modal>
987
995
  <Spinner
988
996
  visible={formState.loading || validationFields.loading || isFBLoading}
989
997
  />
@@ -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,6 +48,7 @@ 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
@@ -283,7 +284,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
283
284
  </OText>
284
285
  </RibbonBox>
285
286
  )}
286
- {!hideProductLogo && (
287
+ {(!hideProductLogo && (product?.images || !hideProductDummyLogo)) && (
287
288
  <FastImage
288
289
  style={styles.productStyle}
289
290
  source={product?.images ? {
@@ -313,9 +314,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
313
314
  height: 40
314
315
 
315
316
  }}
316
- bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
317
- borderColor={theme?.colors.primary}
318
- textStyle={{ color: theme.colors.primary }}
317
+ isDisabled={isSoldOut}
319
318
  text={t('ADD', 'Add')}
320
319
  />
321
320
  )}
@@ -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
  />
@@ -26,11 +26,13 @@ export const StripeCardsListUI = (props: any) => {
26
26
  const {
27
27
  onSelectCard,
28
28
  deleteCard,
29
- cardSelected,
30
29
  cardsList,
31
30
  handleCardClick,
32
31
  onOpen,
33
32
  gateway,
33
+ paySelected,
34
+ newCardAdded,
35
+ addNewCardAsDefault
34
36
  } = props;
35
37
 
36
38
  const theme = useTheme();
@@ -54,6 +56,12 @@ export const StripeCardsListUI = (props: any) => {
54
56
  }
55
57
  }, [cardsList?.loading])
56
58
 
59
+ useEffect(() => {
60
+ if (newCardAdded && addNewCardAsDefault) {
61
+ handleCardSelected(newCardAdded)
62
+ }
63
+ }, [JSON.stringify(newCardAdded)])
64
+
57
65
  return (
58
66
  <>
59
67
  {token && !cardsList.loading && cardsList.cards && cardsList.cards.length === 0 && (
@@ -93,10 +101,9 @@ export const StripeCardsListUI = (props: any) => {
93
101
  >
94
102
  {cardsList.cards.map((card: any) => (
95
103
  <OSItem key={card.id} isUnique={cardsList.cards.length} isInvalid={!card?.zipcode && validateZipcodeCard}>
96
- {console.log(card?.zipcode && validateZipcodeCard)}
97
104
  <OSItemContent onPress={() => handleCardSelected(card)}>
98
105
  <View style={styles.viewStyle}>
99
- {card.id === cardSelected?.id ? (
106
+ {(card.id === paySelected?.data?.id) ? (
100
107
  <OIcon
101
108
  src={theme.images.general.radio_act}
102
109
  width={16}
@@ -9,7 +9,7 @@ import {
9
9
  } from '@stripe/stripe-react-native';
10
10
  import { useTheme } from 'styled-components/native';
11
11
  import { ErrorMessage } from './styles';
12
-
12
+ import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
13
13
  import { StripeElementsForm as StripeFormController } from './naked';
14
14
  import { OButton, OText } from '../shared';
15
15
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
@@ -17,7 +17,7 @@ import { StripeMethodForm } from '../../../../../src/components/StripeMethodForm
17
17
 
18
18
  const StripeElementsFormUI = (props: any) => {
19
19
  const {
20
- publicKey,
20
+ publicKeyState,
21
21
  handleSource,
22
22
  values,
23
23
  businessId,
@@ -34,7 +34,11 @@ const StripeElementsFormUI = (props: any) => {
34
34
  methodPaySupported,
35
35
  setPlaceByMethodPay,
36
36
  cartTotal,
37
- publicKeyAddCard
37
+ publicKeyAddCard,
38
+ urlscheme,
39
+ androidAppId,
40
+ businessNames,
41
+ setNewCardAdded
38
42
  } = props;
39
43
 
40
44
  const theme = useTheme();
@@ -53,7 +57,7 @@ const StripeElementsFormUI = (props: any) => {
53
57
  const [isKeyboardShow, setIsKeyboardShow] = useState(false);
54
58
  const zipCodeEnabled = validationFields?.fields?.card?.zipcode?.enabled
55
59
  const zipCodeRequired = validationFields?.fields?.card?.zipcode?.required
56
- const isToSave = methodsPay?.includes(paymethod) ? publicKey : publicKeyAddCard
60
+ const isToSave = methodsPay?.includes(paymethod) ? publicKeyState?.key : (publicKeyAddCard || publicKeyState?.key)
57
61
  const styles = StyleSheet.create({
58
62
  container: {
59
63
  width: '100%',
@@ -147,6 +151,10 @@ const StripeElementsFormUI = (props: any) => {
147
151
  const _isNewCard = index === 0
148
152
  stripeTokenHandler(setupIntent?.paymentMethodId, user, businessId, _isNewCard);
149
153
  })
154
+ setNewCardAdded?.({
155
+ ...card,
156
+ id: setupIntent?.paymentMethodId
157
+ })
150
158
  } else {
151
159
  stripeTokenHandler(setupIntent?.paymentMethodId, user, businessId);
152
160
  }
@@ -199,69 +207,79 @@ const StripeElementsFormUI = (props: any) => {
199
207
 
200
208
  return (
201
209
  <View style={{ ...styles.container, height: methodsPay?.includes(paymethod) ? 'auto' : height - top - bottom - 60 - (isKeyboardShow ? 250 : 0) }}>
202
- {publicKey ? (
203
- <View style={{ flex: 1 }}>
204
- <StripeProvider
205
- publishableKey={isToSave}
206
- merchantIdentifier={merchantId}
207
- urlScheme={merchantId}
208
- >
209
- {methodsPay?.includes(paymethod) ? (
210
- <StripeMethodForm
211
- handleSource={handleSource}
212
- onCancel={onCancel}
213
- cart={cart}
214
- cartTotal={cartTotal}
215
- setErrors={setErrors}
216
- paymethod={paymethod}
217
- devMode={publicKey?.includes('test')}
218
- setMethodPaySupported={setMethodPaySupported}
219
- placeByMethodPay={placeByMethodPay}
220
- methodPaySupported={methodPaySupported}
221
- setPlaceByMethodPay={setPlaceByMethodPay}
222
- />
223
- ) : (
224
- <CardField
225
- postalCodeEnabled={zipCodeEnabled}
226
- cardStyle={{
227
- backgroundColor: '#FFFFFF',
228
- textColor: '#000000',
229
- borderWidth: 1,
230
- borderRadius: 8,
231
- borderColor: theme.colors.border
232
- }}
233
- style={{
234
- width: '100%',
235
- height: 50,
236
- marginVertical: 30,
237
- zIndex: 9999,
238
- }}
239
- onCardChange={(cardDetails: any) => setCard(cardDetails)}
240
- />
241
- )}
242
- </StripeProvider>
243
- {!!errors && (
210
+ {publicKeyState.loading ? (
211
+ <Placeholder Animation={Fade}>
212
+ <PlaceholderLine height={50} style={{ marginTop: 20 }} />
213
+ </Placeholder>
214
+ ) : (
215
+ <>
216
+ {publicKeyState?.key ? (
217
+ <View style={{ flex: 1 }}>
218
+ <StripeProvider
219
+ publishableKey={isToSave}
220
+ merchantIdentifier={merchantId}
221
+ urlscheme={`${urlscheme}://checkout/${cart?.uuid}`}
222
+ >
223
+ {methodsPay?.includes(paymethod) ? (
224
+ <StripeMethodForm
225
+ handleSource={handleSource}
226
+ onCancel={onCancel}
227
+ cart={cart}
228
+ cartTotal={cartTotal}
229
+ setErrors={setErrors}
230
+ paymethod={paymethod}
231
+ devMode={publicKeyState?.key?.includes('test')}
232
+ setMethodPaySupported={setMethodPaySupported}
233
+ placeByMethodPay={placeByMethodPay}
234
+ methodPaySupported={methodPaySupported}
235
+ setPlaceByMethodPay={setPlaceByMethodPay}
236
+ androidAppId={androidAppId}
237
+ businessNames={businessNames}
238
+ />
239
+ ) : (
240
+ <CardField
241
+ postalCodeEnabled={zipCodeEnabled}
242
+ cardStyle={{
243
+ backgroundColor: '#FFFFFF',
244
+ textColor: '#000000',
245
+ borderWidth: 1,
246
+ borderRadius: 8,
247
+ borderColor: theme.colors.border
248
+ }}
249
+ style={{
250
+ width: '100%',
251
+ height: 50,
252
+ marginVertical: 30,
253
+ zIndex: 9999,
254
+ }}
255
+ onCardChange={(cardDetails: any) => setCard(cardDetails)}
256
+ />
257
+ )}
258
+ </StripeProvider>
259
+ {!!errors && (
260
+ <ErrorMessage>
261
+ <OText
262
+ size={20}
263
+ color={theme.colors.error}
264
+ style={{ marginTop: 20, textAlign: 'center' }}
265
+ >
266
+ {errors}
267
+ </OText>
268
+ </ErrorMessage>
269
+ )}
270
+ </View>
271
+ ) : (
244
272
  <ErrorMessage>
245
273
  <OText
246
274
  size={20}
247
275
  color={theme.colors.error}
248
- style={{ marginTop: 20, textAlign: 'center' }}
276
+ style={{ marginTop: 20 }}
249
277
  >
250
- {errors}
278
+ {t('SOMETHING_WRONG', 'Something is wrong!')}
251
279
  </OText>
252
280
  </ErrorMessage>
253
281
  )}
254
- </View>
255
- ) : (
256
- <ErrorMessage>
257
- <OText
258
- size={20}
259
- color={theme.colors.error}
260
- style={{ marginTop: 20 }}
261
- >
262
- {t('SOMETHING_WRONG', 'Something is wrong!')}
263
- </OText>
264
- </ErrorMessage>
282
+ </>
265
283
  )}
266
284
  {!methodsPay?.includes(paymethod) && (
267
285
  <OButton
@@ -269,7 +287,6 @@ const StripeElementsFormUI = (props: any) => {
269
287
  bgColor={isCompleted ? theme.colors.primary : theme.colors.backgroundGray}
270
288
  borderColor={isCompleted ? theme.colors.primary : theme.colors.backgroundGray}
271
289
  style={styles.btnAddStyle}
272
- textStyle={{ color: 'white' }}
273
290
  imgRightSrc={null}
274
291
  onClick={() => handleSaveCard()}
275
292
  isDisabled={!isCompleted}
@@ -13,6 +13,7 @@ export const StripeElementsForm = (props: any) => {
13
13
  const [ordering] = useApi();
14
14
  const [{ token }] = useSession();
15
15
  const [state, setState] = useState({ loading: false, loadingAdd: false, error: null, requirements: null });
16
+ const [publicKeyState, setPublicKeyState] = useState({ key: props.publicKey, loading: true, error: null })
16
17
 
17
18
  const getRequirements = async () => {
18
19
  try {
@@ -52,7 +53,7 @@ export const StripeElementsForm = (props: any) => {
52
53
  const result = await fetch(`${ordering.root}/payments/stripe/cards`, {
53
54
  method: 'POST',
54
55
  headers: {
55
- Authorization: `Bearer ${user?.session?.access_token}`,
56
+ Authorization: `Bearer ${token}`,
56
57
  'Content-Type': 'application/json'
57
58
  },
58
59
  body: JSON.stringify({
@@ -85,6 +86,51 @@ export const StripeElementsForm = (props: any) => {
85
86
  }
86
87
  }
87
88
 
89
+ /**
90
+ * Method to get stripe credentials from API
91
+ */
92
+ const getCredentials = async () => {
93
+ try {
94
+ setPublicKeyState({
95
+ ...publicKeyState,
96
+ loading: true
97
+ })
98
+ const { content: { result, error } } = await ordering.setAccessToken(token).paymentCards().getCredentials()
99
+ if (!error) {
100
+ setPublicKeyState({
101
+ loading: false,
102
+ key: result.publishable,
103
+ error: null
104
+ })
105
+ } else {
106
+ setPublicKeyState({
107
+ ...publicKeyState,
108
+ loading: false,
109
+ error: result
110
+ })
111
+ }
112
+ } catch (error) {
113
+ setPublicKeyState({
114
+ ...publicKeyState,
115
+ loading: false,
116
+ error: error.message
117
+ })
118
+ }
119
+ }
120
+
121
+ useEffect(() => {
122
+ if (!token) return
123
+ if (props.publicKey) {
124
+ setPublicKeyState({
125
+ loading: false,
126
+ key: props.publicKey,
127
+ error: null
128
+ })
129
+ } else {
130
+ getCredentials()
131
+ }
132
+ }, [token, props.publicKey])
133
+
88
134
  useEffect(() => {
89
135
  if (!token || state.requirements) return
90
136
  toSave && getRequirements()
@@ -96,6 +142,7 @@ export const StripeElementsForm = (props: any) => {
96
142
  values={state}
97
143
  requirements={state.requirements}
98
144
  stripeTokenHandler={stripeTokenHandler}
145
+ publicKeyState={publicKeyState}
99
146
  />
100
147
  )
101
148
  }
@@ -138,9 +138,6 @@ const StripeRedirectFormUI = (props: any) => {
138
138
  <OButton
139
139
  // text={formState.isSubmitting ? t('LOADING', 'Loading...') : t('OK', 'OK')}
140
140
  text={t('OK', 'OK')}
141
- bgColor={theme.colors.primary}
142
- borderColor={theme.colors.primary}
143
- textStyle={{ color: 'white' }}
144
141
  imgRightSrc={null}
145
142
  // isDisabled={formState.isSubmitting}
146
143
  // onClick={() => handleSubmit(onSubmit)}