ordering-ui-react-native 0.21.63 → 0.21.64-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/PaymentOptionsWebView/index.tsx +1 -0
  5. package/src/components/StripeMethodForm/index.tsx +6 -4
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/types/index.tsx +3 -1
  8. package/themes/business/index.tsx +4 -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/Chat/index.tsx +3 -1
  12. package/themes/business/src/components/DriverMap/index.tsx +36 -23
  13. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  14. package/themes/business/src/components/Home/index.tsx +5 -1
  15. package/themes/business/src/components/LanguageSelector/index.tsx +1 -2
  16. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  17. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  18. package/themes/business/src/components/MapView/index.tsx +30 -15
  19. package/themes/business/src/components/NewOrderNotification/index.tsx +76 -26
  20. package/themes/business/src/components/OrderDetails/Business.tsx +63 -7
  21. package/themes/business/src/components/OrderDetails/Delivery.tsx +36 -21
  22. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +107 -56
  23. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +61 -35
  24. package/themes/business/src/components/OrderDetails/styles.tsx +29 -3
  25. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  26. package/themes/business/src/components/OrderSummary/index.tsx +240 -76
  27. package/themes/business/src/components/OrdersListManager/index.tsx +9 -1
  28. package/themes/business/src/components/OrdersOption/index.tsx +249 -126
  29. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  30. package/themes/business/src/components/PreviousMessages/index.tsx +12 -0
  31. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +29 -19
  32. package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
  33. package/themes/business/src/components/PrinterEdition/index.tsx +363 -0
  34. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  35. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  36. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  37. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  38. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  39. package/themes/business/src/components/Sessions/index.tsx +187 -0
  40. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  41. package/themes/business/src/components/StoresList/index.tsx +2 -2
  42. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  43. package/themes/business/src/components/UserProfileForm/index.tsx +106 -54
  44. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  45. package/themes/business/src/components/shared/OInput.tsx +2 -0
  46. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  47. package/themes/business/src/hooks/useLocation.tsx +5 -4
  48. package/themes/business/src/types/index.tsx +23 -5
  49. package/themes/business/src/utils/index.tsx +19 -1
  50. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  51. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  52. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  54. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  55. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  56. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  57. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  58. package/themes/original/index.tsx +13 -1
  59. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  60. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  61. package/themes/original/src/components/AddressList/index.tsx +8 -7
  62. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  63. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  64. package/themes/original/src/components/BusinessBasicInformation/index.tsx +6 -9
  65. package/themes/original/src/components/BusinessController/index.tsx +14 -9
  66. package/themes/original/src/components/BusinessController/styles.tsx +8 -7
  67. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -7
  68. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  69. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  70. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  71. package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
  72. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +5 -5
  73. package/themes/original/src/components/BusinessProductsList/index.tsx +3 -3
  74. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  75. package/themes/original/src/components/BusinessProductsListing/index.tsx +28 -13
  76. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  77. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  78. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -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 +26 -9
  82. package/themes/original/src/components/CartContent/index.tsx +60 -45
  83. package/themes/original/src/components/Checkout/index.tsx +94 -62
  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/GiftCardOrdersList/index.tsx +64 -0
  91. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  92. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  93. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  94. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  95. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +9 -11
  96. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  97. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  98. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +82 -0
  99. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  100. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  101. package/themes/original/src/components/Help/index.tsx +2 -0
  102. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  103. package/themes/original/src/components/Home/index.tsx +2 -10
  104. package/themes/original/src/components/LoginForm/Otp/index.tsx +4 -19
  105. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  106. package/themes/original/src/components/MessageListing/index.tsx +1 -0
  107. package/themes/original/src/components/Messages/index.tsx +8 -7
  108. package/themes/original/src/components/MomentOption/index.tsx +13 -2
  109. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  110. package/themes/original/src/components/MultiCheckout/index.tsx +123 -62
  111. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  112. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -14
  113. package/themes/original/src/components/MyOrders/index.tsx +21 -26
  114. package/themes/original/src/components/NavBar/index.tsx +4 -2
  115. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  116. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  117. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +5 -7
  118. package/themes/original/src/components/OrderDetails/index.tsx +5 -7
  119. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  120. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  121. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  122. package/themes/original/src/components/OrdersOption/index.tsx +2 -4
  123. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  124. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  125. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  126. package/themes/original/src/components/PaymentOptions/index.tsx +47 -6
  127. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  128. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  129. package/themes/original/src/components/ProductForm/ActionButton.tsx +16 -19
  130. package/themes/original/src/components/ProductForm/index.tsx +120 -109
  131. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -49
  132. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  133. package/themes/original/src/components/ProductOptionSubOption/index.tsx +112 -91
  134. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  135. package/themes/original/src/components/Promotions/index.tsx +6 -9
  136. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  137. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  138. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  139. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  140. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  141. package/themes/original/src/components/Sessions/index.tsx +3 -3
  142. package/themes/original/src/components/SignupForm/index.tsx +65 -67
  143. package/themes/original/src/components/SingleOrderCard/index.tsx +1 -2
  144. package/themes/original/src/components/SingleProductCard/index.tsx +5 -6
  145. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  146. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  147. package/themes/original/src/components/StripeCardsList/index.tsx +12 -36
  148. package/themes/original/src/components/StripeElementsForm/index.tsx +78 -59
  149. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  150. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  151. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  152. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  153. package/themes/original/src/components/UserFormDetails/index.tsx +83 -84
  154. package/themes/original/src/components/UserProfile/index.tsx +11 -2
  155. package/themes/original/src/components/Wallets/index.tsx +7 -4
  156. package/themes/original/src/components/WebsocketStatus/index.tsx +169 -0
  157. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  158. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  159. package/themes/original/src/components/shared/OButton.tsx +8 -7
  160. package/themes/original/src/components/shared/OInput.tsx +1 -4
  161. package/themes/original/src/types/index.tsx +5 -1
  162. package/themes/original/src/utils/index.tsx +12 -1
  163. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -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({
@@ -583,65 +583,67 @@ const SignupFormUI = (props: SignupParams) => {
583
583
  {sortInputFields({
584
584
  values: validationFields?.fields?.checkout,
585
585
  }).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
- />
586
+ (item: any, i: number) => {
587
+ const field = item?.validation_field || item
588
+ return (!notValidationFields.includes(field.code) &&
589
+ showField &&
590
+ showField(field.code) &&
591
+ (signUpTab === 'default' ||
592
+ (signUpTab === 'otpEmail' && field.code === 'email')) && (
593
+ <React.Fragment key={field.id}>
594
+ {errors?.[`${field.code}`] && (
595
+ <OText
596
+ size={14}
597
+ color={theme.colors.danger5}
598
+ weight={'normal'}>
599
+ {errors?.[`${field.code}`]?.message} {errors?.[`${field.code}`]?.type === 'required' && '*'}
600
+ </OText>
638
601
  )}
639
- name={field.code}
640
- rules={getInputRules(field)}
641
- defaultValue=""
642
- />
643
- </React.Fragment>
644
- ),
602
+ <Controller
603
+ control={control}
604
+ render={({ onChange, value }: any) => (
605
+ <OInput
606
+ placeholder={t(field.name?.replace(/\s/g, '_')?.toUpperCase(), field.name)}
607
+ style={style.inputStyle}
608
+ icon={
609
+ field.code === 'email'
610
+ ? theme.images.general.email
611
+ : theme.images.general.user
612
+ }
613
+ value={value}
614
+ onChange={(val: any) =>
615
+ field.code !== 'email'
616
+ ? (onChange(val))
617
+ : handleChangeInputEmail(val, onChange)
618
+ }
619
+ autoCapitalize={
620
+ field.code === 'email' ? 'none' : 'sentences'
621
+ }
622
+ autoCorrect={field.code === 'email' && false}
623
+ type={
624
+ field.code === 'email' ? 'email-address' : 'default'
625
+ }
626
+ autoCompleteType={
627
+ field.code === 'email' ? 'email' : 'off'
628
+ }
629
+ returnKeyType="next"
630
+ blurOnSubmit={false}
631
+ forwardRef={(ref: any) => handleRefs(ref, field.code)}
632
+ onSubmitEditing={() =>
633
+ field.code === 'email'
634
+ ? phoneRef?.current?.focus?.()
635
+ : handleFocusRef(getNextFieldCode(i))
636
+ }
637
+ borderColor={errors?.[`${field.code}`] ? theme.colors.danger5 : theme.colors.border}
638
+ />
639
+ )}
640
+ name={field.code}
641
+ rules={getInputRules(field)}
642
+ defaultValue=""
643
+ />
644
+ </React.Fragment>
645
+ ))
646
+ }
645
647
  )}
646
648
 
647
649
  {(!!showInputPhoneNumber && (signUpTab === 'default' || signUpTab === 'otpCellphone')) && (
@@ -787,9 +789,9 @@ const SignupFormUI = (props: SignupParams) => {
787
789
  <OButton
788
790
  imgRightSrc={null}
789
791
  text={t('TERMS_AND_CONDITIONS', 'Terms & Conditions')}
790
- bgColor='#FFF'
791
- borderColor='#FFF'
792
- style={{ paddingLeft: 0, paddingRight: 0, height: 30, shadowColor: '#FFF' }}
792
+ bgColor={theme.colors.white}
793
+ borderColor={theme.colors.white}
794
+ style={{ paddingLeft: 0, paddingRight: 0, height: 30, shadowColor: theme.colors.white }}
793
795
  textStyle={{ color: theme.colors.primary, marginLeft: 0, marginRight: 0 }}
794
796
  onClick={() => handleOpenTermsUrl(configs?.terms_and_conditions_url?.value)}
795
797
  />
@@ -833,6 +835,7 @@ const SignupFormUI = (props: SignupParams) => {
833
835
  />
834
836
  )
835
837
  }
838
+ autoCapitalize='none'
836
839
  value={value}
837
840
  onChange={(val: any) => onChange(val)}
838
841
  returnKeyType="done"
@@ -874,9 +877,7 @@ const SignupFormUI = (props: SignupParams) => {
874
877
  <OButton
875
878
  onClick={handleSubmit(onSubmit)}
876
879
  text={t('GET_VERIFY_CODE', 'Get Verify Code')}
877
- borderColor={theme.colors.primary}
878
880
  imgRightSrc={null}
879
- textStyle={{ color: 'white' }}
880
881
  isLoading={isLoadingVerifyModal}
881
882
  indicatorColor={theme.colors.white}
882
883
  style={{ borderRadius: 7.6, marginTop: 6 }}
@@ -885,9 +886,6 @@ const SignupFormUI = (props: SignupParams) => {
885
886
  <OButton
886
887
  onClick={handleSubmit(onSubmit)}
887
888
  text={signupButtonText}
888
- bgColor={theme.colors.primary}
889
- borderColor={theme.colors.primary}
890
- textStyle={{ color: 'white' }}
891
889
  imgRightSrc={null}
892
890
  isDisabled={formState.loading || validationFields.loading}
893
891
  style={{ borderRadius: 7.6, marginTop: 6, shadowOpacity: 0 }}
@@ -82,7 +82,6 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
82
82
  elevation: 3
83
83
  },
84
84
  buttonText: {
85
- color: theme.colors.primary,
86
85
  fontSize: 10,
87
86
  marginLeft: 2,
88
87
  marginRight: 2,
@@ -285,7 +284,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
285
284
  ) : (
286
285
  <Price>
287
286
  <OText size={12} lineHeight={18}>
288
- {parsePrice(order?.summary?.total || order?.total)}
287
+ {parsePrice(order?.total)}
289
288
  </OText>
290
289
  </Price>
291
290
  )}
@@ -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
@@ -169,7 +170,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
169
170
  }
170
171
 
171
172
  return (
172
- <InView style={{ minHeight: hideAddButton ? 125 : 190, marginLeft: logoPosition === 'left' ? 12.5 : 0 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
173
+ <View style={{ minHeight: hideAddButton ? 125 : 190, marginLeft: logoPosition === 'left' ? 12.5 : 0 }}>
173
174
  {isIntersectionObserver ? (
174
175
  <CardAnimation
175
176
  onClick={() => handleClickproduct()}
@@ -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
  )}
@@ -340,7 +339,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
340
339
  </Placeholder>
341
340
  </View>
342
341
  )}
343
- </InView>
342
+ </View>
344
343
  );
345
344
  }, SingleProductCardPropsAreEqual);
346
345
 
@@ -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,15 +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
- setAddCardOpen,
31
+ onOpen,
33
32
  gateway,
34
- setCardsList,
35
- addCardOpen,
36
- isOpenMethod,
37
- handlePaymethodDataChange
33
+ paySelected,
34
+ newCardAdded,
35
+ addNewCardAsDefault
38
36
  } = props;
39
37
 
40
38
  const theme = useTheme();
@@ -54,10 +52,16 @@ export const StripeCardsListUI = (props: any) => {
54
52
 
55
53
  useEffect(() => {
56
54
  if (!cardsList?.loading && cardsList?.cards?.length === 0 && !paymethodsWithoutSaveCards.includes(gateway)) {
57
- setAddCardOpen({ ...addCardOpen, stripe: true })
55
+ onOpen && onOpen();
58
56
  }
59
57
  }, [cardsList?.loading])
60
58
 
59
+ useEffect(() => {
60
+ if (newCardAdded && addNewCardAsDefault) {
61
+ handleCardSelected(newCardAdded)
62
+ }
63
+ }, [JSON.stringify(newCardAdded)])
64
+
61
65
  return (
62
66
  <>
63
67
  {token && !cardsList.loading && cardsList.cards && cardsList.cards.length === 0 && (
@@ -97,10 +101,9 @@ export const StripeCardsListUI = (props: any) => {
97
101
  >
98
102
  {cardsList.cards.map((card: any) => (
99
103
  <OSItem key={card.id} isUnique={cardsList.cards.length} isInvalid={!card?.zipcode && validateZipcodeCard}>
100
- {console.log(card?.zipcode && validateZipcodeCard)}
101
104
  <OSItemContent onPress={() => handleCardSelected(card)}>
102
105
  <View style={styles.viewStyle}>
103
- {card.id === cardSelected?.id ? (
106
+ {(card.id === paySelected?.data?.id) ? (
104
107
  <OIcon
105
108
  src={theme.images.general.radio_act}
106
109
  width={16}
@@ -147,33 +150,6 @@ export const StripeCardsListUI = (props: any) => {
147
150
  ))}
148
151
  </ScrollView>
149
152
  )}
150
- <OModal
151
- entireModal
152
- title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
153
- open={addCardOpen.stripe}
154
- onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
155
- style={{ backgroundColor: 'red' }}
156
- >
157
- <KeyboardAvoidingView
158
- behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
159
- keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
160
- enabled={Platform.OS === 'ios' ? true : false}
161
- >
162
- <StripeElementsForm
163
- openCarts={props.openCarts}
164
- toSave
165
- businessId={props.businessId}
166
- businessIds={props.businessIds}
167
- publicKey={props.publicKey || isOpenMethod?.paymethod?.credentials?.publishable}
168
- setCardsList={setCardsList}
169
- cardsList={cardsList}
170
- requirements={props.clientSecret}
171
- handleCardClick={handleCardClick}
172
- onSelectCard={handlePaymethodDataChange}
173
- onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
174
- />
175
- </KeyboardAvoidingView>
176
- </OModal>
177
153
  </>
178
154
  )
179
155
  }
@@ -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,
@@ -33,7 +33,12 @@ const StripeElementsFormUI = (props: any) => {
33
33
  placeByMethodPay,
34
34
  methodPaySupported,
35
35
  setPlaceByMethodPay,
36
- cartTotal
36
+ cartTotal,
37
+ publicKeyAddCard,
38
+ urlScheme,
39
+ androidAppId,
40
+ businessNames,
41
+ setNewCardAdded
37
42
  } = props;
38
43
 
39
44
  const theme = useTheme();
@@ -52,6 +57,7 @@ const StripeElementsFormUI = (props: any) => {
52
57
  const [isKeyboardShow, setIsKeyboardShow] = useState(false);
53
58
  const zipCodeEnabled = validationFields?.fields?.card?.zipcode?.enabled
54
59
  const zipCodeRequired = validationFields?.fields?.card?.zipcode?.required
60
+ const isToSave = methodsPay?.includes(paymethod) ? publicKeyState?.key : (publicKeyAddCard || publicKeyState?.key)
55
61
  const styles = StyleSheet.create({
56
62
  container: {
57
63
  width: '100%',
@@ -145,6 +151,10 @@ const StripeElementsFormUI = (props: any) => {
145
151
  const _isNewCard = index === 0
146
152
  stripeTokenHandler(setupIntent?.paymentMethodId, user, businessId, _isNewCard);
147
153
  })
154
+ setNewCardAdded?.({
155
+ ...card,
156
+ id: setupIntent?.paymentMethodId
157
+ })
148
158
  } else {
149
159
  stripeTokenHandler(setupIntent?.paymentMethodId, user, businessId);
150
160
  }
@@ -197,69 +207,79 @@ const StripeElementsFormUI = (props: any) => {
197
207
 
198
208
  return (
199
209
  <View style={{ ...styles.container, height: methodsPay?.includes(paymethod) ? 'auto' : height - top - bottom - 60 - (isKeyboardShow ? 250 : 0) }}>
200
- {publicKey ? (
201
- <View style={{ flex: 1 }}>
202
- <StripeProvider
203
- publishableKey={publicKey}
204
- merchantIdentifier={merchantId}
205
- urlScheme={merchantId}
206
- >
207
- {methodsPay?.includes(paymethod) ? (
208
- <StripeMethodForm
209
- handleSource={handleSource}
210
- onCancel={onCancel}
211
- cart={cart}
212
- cartTotal={cartTotal}
213
- setErrors={setErrors}
214
- paymethod={paymethod}
215
- devMode={publicKey?.includes('test')}
216
- setMethodPaySupported={setMethodPaySupported}
217
- placeByMethodPay={placeByMethodPay}
218
- methodPaySupported={methodPaySupported}
219
- setPlaceByMethodPay={setPlaceByMethodPay}
220
- />
221
- ) : (
222
- <CardField
223
- postalCodeEnabled={zipCodeEnabled}
224
- cardStyle={{
225
- backgroundColor: '#FFFFFF',
226
- textColor: '#000000',
227
- borderWidth: 1,
228
- borderRadius: 8,
229
- borderColor: theme.colors.border
230
- }}
231
- style={{
232
- width: '100%',
233
- height: 50,
234
- marginVertical: 30,
235
- zIndex: 9999,
236
- }}
237
- onCardChange={(cardDetails: any) => setCard(cardDetails)}
238
- />
239
- )}
240
- </StripeProvider>
241
- {!!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
+ ) : (
242
272
  <ErrorMessage>
243
273
  <OText
244
274
  size={20}
245
275
  color={theme.colors.error}
246
- style={{ marginTop: 20, textAlign: 'center' }}
276
+ style={{ marginTop: 20 }}
247
277
  >
248
- {errors}
278
+ {t('SOMETHING_WRONG', 'Something is wrong!')}
249
279
  </OText>
250
280
  </ErrorMessage>
251
281
  )}
252
- </View>
253
- ) : (
254
- <ErrorMessage>
255
- <OText
256
- size={20}
257
- color={theme.colors.error}
258
- style={{ marginTop: 20 }}
259
- >
260
- {t('SOMETHING_WRONG', 'Something is wrong!')}
261
- </OText>
262
- </ErrorMessage>
282
+ </>
263
283
  )}
264
284
  {!methodsPay?.includes(paymethod) && (
265
285
  <OButton
@@ -267,7 +287,6 @@ const StripeElementsFormUI = (props: any) => {
267
287
  bgColor={isCompleted ? theme.colors.primary : theme.colors.backgroundGray}
268
288
  borderColor={isCompleted ? theme.colors.primary : theme.colors.backgroundGray}
269
289
  style={styles.btnAddStyle}
270
- textStyle={{ color: 'white' }}
271
290
  imgRightSrc={null}
272
291
  onClick={() => handleSaveCard()}
273
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)}