ordering-ui-react-native 0.21.13 → 0.21.14-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 (241) hide show
  1. package/package.json +7 -6
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +10 -9
  4. package/src/components/BusinessesListing/index.tsx +1 -1
  5. package/src/components/PaymentOptionsWebView/index.tsx +1 -0
  6. package/src/components/StripeMethodForm/index.tsx +4 -4
  7. package/src/components/VerifyPhone/styles.tsx +1 -2
  8. package/src/types/index.tsx +2 -1
  9. package/src/utils/index.tsx +2 -2
  10. package/themes/business/index.tsx +4 -0
  11. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -2
  12. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  13. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  14. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  15. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  16. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  17. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  18. package/themes/business/src/components/Chat/index.tsx +41 -13
  19. package/themes/business/src/components/DriverMap/index.tsx +4 -3
  20. package/themes/business/src/components/DriverSchedule/index.tsx +5 -5
  21. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  22. package/themes/business/src/components/Home/index.tsx +5 -1
  23. package/themes/business/src/components/MapView/index.tsx +11 -7
  24. package/themes/business/src/components/MessagesOption/index.tsx +22 -94
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +163 -113
  26. package/themes/business/src/components/OrderDetails/Business.tsx +50 -2
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +23 -11
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +60 -53
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +54 -23
  30. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  31. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +6 -1
  32. package/themes/business/src/components/OrderSummary/index.tsx +240 -76
  33. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  34. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  35. package/themes/business/src/components/OrdersOption/index.tsx +125 -48
  36. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  37. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  38. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +26 -34
  39. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  40. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  41. package/themes/business/src/components/PreviousOrders/index.tsx +194 -220
  42. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  43. package/themes/business/src/components/PrinterSettings/index.tsx +279 -0
  44. package/themes/business/src/components/PrinterSettings/styles.tsx +17 -0
  45. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  46. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  47. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  48. package/themes/business/src/components/Sessions/index.tsx +187 -0
  49. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  50. package/themes/business/src/components/StoresList/index.tsx +5 -3
  51. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  52. package/themes/business/src/components/UserProfileForm/index.tsx +98 -43
  53. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  54. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  55. package/themes/business/src/components/shared/OInput.tsx +2 -0
  56. package/themes/business/src/hooks/useLocation.tsx +5 -4
  57. package/themes/business/src/types/index.tsx +21 -1
  58. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  59. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  60. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  62. package/themes/kiosk/src/components/LoginForm/index.tsx +124 -96
  63. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  64. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  65. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  66. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  67. package/themes/original/index.tsx +9 -4
  68. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  69. package/themes/original/src/components/AddressForm/index.tsx +10 -6
  70. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  71. package/themes/original/src/components/AddressList/index.tsx +4 -7
  72. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  73. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  74. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  75. package/themes/original/src/components/BusinessBasicInformation/index.tsx +4 -4
  76. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -1
  77. package/themes/original/src/components/BusinessController/index.tsx +20 -12
  78. package/themes/original/src/components/BusinessController/styles.tsx +8 -7
  79. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  80. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -7
  81. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +317 -0
  82. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +96 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  84. package/themes/original/src/components/BusinessListingSearch/index.tsx +56 -361
  85. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -1
  86. package/themes/original/src/components/BusinessPreorder/index.tsx +2 -3
  87. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -1
  88. package/themes/original/src/components/BusinessProductsList/index.tsx +3 -3
  89. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  90. package/themes/original/src/components/BusinessProductsListing/index.tsx +51 -20
  91. package/themes/original/src/components/BusinessProductsListing/styles.tsx +3 -4
  92. package/themes/original/src/components/BusinessReviews/index.tsx +1 -1
  93. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  98. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +24 -404
  99. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  100. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  101. package/themes/original/src/components/Cart/index.tsx +32 -9
  102. package/themes/original/src/components/CartContent/index.tsx +96 -58
  103. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  104. package/themes/original/src/components/Checkout/index.tsx +190 -66
  105. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  106. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  107. package/themes/original/src/components/DatePicker/index.tsx +33 -0
  108. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  109. package/themes/original/src/components/Favorite/index.tsx +4 -9
  110. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  111. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  112. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  113. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  114. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  115. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  116. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +36 -3
  117. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  118. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +67 -4
  119. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  120. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +2 -2
  121. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  122. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  123. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  124. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +83 -0
  125. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  126. package/themes/original/src/components/GoogleMap/index.tsx +6 -5
  127. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  128. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  129. package/themes/original/src/components/Home/index.tsx +1 -1
  130. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  131. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  132. package/themes/original/src/components/LoginForm/Otp/index.tsx +48 -39
  133. package/themes/original/src/components/LoginForm/index.tsx +5 -0
  134. package/themes/original/src/components/Messages/index.tsx +9 -4
  135. package/themes/original/src/components/Messages/styles.tsx +1 -1
  136. package/themes/original/src/components/MomentOption/index.tsx +3 -3
  137. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  138. package/themes/original/src/components/MultiCheckout/index.tsx +208 -21
  139. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  140. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  141. package/themes/original/src/components/MyOrders/index.tsx +24 -29
  142. package/themes/original/src/components/NavBar/index.tsx +3 -1
  143. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  144. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  145. package/themes/original/src/components/Notifications/index.tsx +4 -8
  146. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  147. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +7 -3
  148. package/themes/original/src/components/OrderDetails/index.tsx +716 -667
  149. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  150. package/themes/original/src/components/OrderProgress/index.tsx +28 -6
  151. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  152. package/themes/original/src/components/OrderSummary/index.tsx +3 -1
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  155. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  156. package/themes/original/src/components/OrdersOption/index.tsx +3 -5
  157. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  158. package/themes/original/src/components/PageBanner/index.tsx +3 -0
  159. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  160. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  161. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  162. package/themes/original/src/components/PaymentOptions/index.tsx +72 -6
  163. package/themes/original/src/components/PhoneInputNumber/index.tsx +15 -1
  164. package/themes/original/src/components/ProductForm/ActionButton.tsx +120 -0
  165. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  166. package/themes/original/src/components/ProductForm/index.tsx +74 -165
  167. package/themes/original/src/components/ProductItemAccordion/index.tsx +19 -10
  168. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -1
  169. package/themes/original/src/components/ProductOptionSubOption/index.tsx +123 -82
  170. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +6 -1
  171. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  172. package/themes/original/src/components/Promotions/index.tsx +4 -4
  173. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  174. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  175. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  176. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  177. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  178. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  179. package/themes/original/src/components/SingleOrderCard/index.tsx +5 -4
  180. package/themes/original/src/components/SingleProductCard/index.tsx +2 -2
  181. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  182. package/themes/original/src/components/StripeCardsList/index.tsx +17 -36
  183. package/themes/original/src/components/StripeElementsForm/index.tsx +9 -4
  184. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  185. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +86 -0
  186. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  187. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  188. package/themes/original/src/components/UserFormDetails/index.tsx +54 -8
  189. package/themes/original/src/components/UserFormDetails/styles.tsx +7 -0
  190. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  191. package/themes/original/src/components/UserProfileForm/index.tsx +30 -36
  192. package/themes/original/src/components/UserVerification/index.tsx +3 -1
  193. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  194. package/themes/original/src/components/Wallets/index.tsx +8 -9
  195. package/themes/original/src/components/Wallets/styles.tsx +1 -1
  196. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  197. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  198. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  199. package/themes/original/src/components/shared/OButton.tsx +5 -5
  200. package/themes/original/src/components/shared/OInput.tsx +1 -4
  201. package/themes/original/src/components/shared/OModal.tsx +12 -14
  202. package/themes/original/src/layouts/Container.tsx +5 -3
  203. package/themes/original/src/types/index.tsx +6 -1
  204. package/themes/original/src/utils/index.tsx +124 -0
  205. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  206. package/src/navigators/BottomNavigator.tsx +0 -117
  207. package/src/navigators/CheckoutNavigator.tsx +0 -66
  208. package/src/navigators/HomeNavigator.tsx +0 -202
  209. package/src/navigators/NavigationRef.tsx +0 -7
  210. package/src/navigators/RootNavigator.tsx +0 -269
  211. package/src/pages/Account.tsx +0 -34
  212. package/src/pages/AddressForm.tsx +0 -62
  213. package/src/pages/AddressList.tsx +0 -24
  214. package/src/pages/BusinessProductsList.tsx +0 -81
  215. package/src/pages/BusinessesListing.tsx +0 -43
  216. package/src/pages/CartList.tsx +0 -49
  217. package/src/pages/Checkout.tsx +0 -101
  218. package/src/pages/ForgotPassword.tsx +0 -24
  219. package/src/pages/Help.tsx +0 -23
  220. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  221. package/src/pages/HelpGuide.tsx +0 -23
  222. package/src/pages/HelpOrder.tsx +0 -23
  223. package/src/pages/Home.tsx +0 -36
  224. package/src/pages/IntroductoryTutorial.tsx +0 -170
  225. package/src/pages/Login.tsx +0 -47
  226. package/src/pages/MomentOption.tsx +0 -30
  227. package/src/pages/MultiCheckout.tsx +0 -31
  228. package/src/pages/MultiOrdersDetails.tsx +0 -27
  229. package/src/pages/MyOrders.tsx +0 -40
  230. package/src/pages/NetworkError.tsx +0 -24
  231. package/src/pages/NotFound.tsx +0 -22
  232. package/src/pages/OrderDetails.tsx +0 -25
  233. package/src/pages/ProductDetails.tsx +0 -55
  234. package/src/pages/Profile.tsx +0 -36
  235. package/src/pages/ReviewDriver.tsx +0 -30
  236. package/src/pages/ReviewOrder.tsx +0 -32
  237. package/src/pages/ReviewProducts.tsx +0 -30
  238. package/src/pages/Sessions.tsx +0 -22
  239. package/src/pages/Signup.tsx +0 -53
  240. package/src/pages/SpinnerLoader.tsx +0 -10
  241. package/src/pages/Splash.tsx +0 -21
@@ -4,6 +4,7 @@ import {
4
4
  PaymentOptionStripe,
5
5
  useSession,
6
6
  useLanguage,
7
+ useValidationFields
7
8
  } from 'ordering-components/native';
8
9
  import { PlaceholderLine } from 'rn-placeholder';
9
10
  import { useTheme } from 'styled-components/native';
@@ -28,29 +29,29 @@ export const StripeCardsListUI = (props: any) => {
28
29
  cardSelected,
29
30
  cardsList,
30
31
  handleCardClick,
31
- setAddCardOpen,
32
+ onOpen,
32
33
  gateway,
33
- setCardsList,
34
- addCardOpen,
35
- isOpenMethod,
36
- handlePaymethodDataChange
34
+ paySelected
37
35
  } = props;
38
36
 
39
37
  const theme = useTheme();
40
38
 
41
39
  const [{ token }] = useSession();
42
40
  const [, t] = useLanguage();
43
-
41
+ const [validationFields] = useValidationFields()
42
+ const validateZipcodeCard =
43
+ validationFields?.fields?.card?.zipcode?.enabled && validationFields?.fields?.card?.zipcode?.required
44
44
  const paymethodsWithoutSaveCards = ['credomatic']
45
45
 
46
46
  const handleCardSelected = (card: any) => {
47
+ if (!card?.zipcode && validateZipcodeCard) return
47
48
  handleCardClick(card);
48
49
  onSelectCard(card);
49
50
  }
50
51
 
51
52
  useEffect(() => {
52
53
  if (!cardsList?.loading && cardsList?.cards?.length === 0 && !paymethodsWithoutSaveCards.includes(gateway)) {
53
- setAddCardOpen({ ...addCardOpen, stripe: true })
54
+ onOpen && onOpen();
54
55
  }
55
56
  }, [cardsList?.loading])
56
57
 
@@ -92,10 +93,10 @@ export const StripeCardsListUI = (props: any) => {
92
93
  style={styles.cardsList}
93
94
  >
94
95
  {cardsList.cards.map((card: any) => (
95
- <OSItem key={card.id} isUnique={cardsList.cards.length}>
96
+ <OSItem key={card.id} isUnique={cardsList.cards.length} isInvalid={!card?.zipcode && validateZipcodeCard}>
96
97
  <OSItemContent onPress={() => handleCardSelected(card)}>
97
98
  <View style={styles.viewStyle}>
98
- {card.id === cardSelected?.id ? (
99
+ {(card.id === cardSelected?.id || card.id === paySelected?.data?.id) ? (
99
100
  <OIcon
100
101
  src={theme.images.general.radio_act}
101
102
  width={16}
@@ -117,6 +118,13 @@ export const StripeCardsListUI = (props: any) => {
117
118
  XXXX-XXXX-XXXX-{card.last4}
118
119
  </OText>
119
120
  </View>
121
+ {!card?.zipcode && validateZipcodeCard && (
122
+ <View style={styles.viewStyle}>
123
+ <OText size={10} color={theme?.colors?.danger5}>
124
+ ({t('MISSING_ZIPCODE', 'Missing zipcode')})
125
+ </OText>
126
+ </View>
127
+ )}
120
128
  </OSItemContent>
121
129
  <OSItemActions>
122
130
  <OAlert
@@ -135,33 +143,6 @@ export const StripeCardsListUI = (props: any) => {
135
143
  ))}
136
144
  </ScrollView>
137
145
  )}
138
- <OModal
139
- entireModal
140
- title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
141
- open={addCardOpen.stripe}
142
- onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
143
- style={{ backgroundColor: 'red' }}
144
- >
145
- <KeyboardAvoidingView
146
- behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
147
- keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
148
- enabled={Platform.OS === 'ios' ? true : false}
149
- >
150
- <StripeElementsForm
151
- openCarts={props.openCarts}
152
- toSave
153
- businessId={props.businessId}
154
- businessIds={props.businessIds}
155
- publicKey={props.publicKey || isOpenMethod?.paymethod?.credentials?.publishable}
156
- setCardsList={setCardsList}
157
- cardsList={cardsList}
158
- requirements={props.clientSecret}
159
- handleCardClick={handleCardClick}
160
- onSelectCard={handlePaymethodDataChange}
161
- onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
162
- />
163
- </KeyboardAvoidingView>
164
- </OModal>
165
146
  </>
166
147
  )
167
148
  }
@@ -33,7 +33,10 @@ const StripeElementsFormUI = (props: any) => {
33
33
  placeByMethodPay,
34
34
  methodPaySupported,
35
35
  setPlaceByMethodPay,
36
- cartTotal
36
+ cartTotal,
37
+ publicKeyAddCard,
38
+ urlScheme,
39
+ androidAppId
37
40
  } = props;
38
41
 
39
42
  const theme = useTheme();
@@ -52,10 +55,11 @@ const StripeElementsFormUI = (props: any) => {
52
55
  const [isKeyboardShow, setIsKeyboardShow] = useState(false);
53
56
  const zipCodeEnabled = validationFields?.fields?.card?.zipcode?.enabled
54
57
  const zipCodeRequired = validationFields?.fields?.card?.zipcode?.required
58
+ const isToSave = methodsPay?.includes(paymethod) ? publicKey : publicKeyAddCard
55
59
  const styles = StyleSheet.create({
56
60
  container: {
57
61
  width: '100%',
58
- paddingHorizontal: 40,
62
+ paddingHorizontal: 20,
59
63
  justifyContent: 'space-between',
60
64
  paddingBottom: 12
61
65
  },
@@ -200,9 +204,9 @@ const StripeElementsFormUI = (props: any) => {
200
204
  {publicKey ? (
201
205
  <View style={{ flex: 1 }}>
202
206
  <StripeProvider
203
- publishableKey={publicKey}
207
+ publishableKey={isToSave}
204
208
  merchantIdentifier={merchantId}
205
- urlScheme={merchantId}
209
+ urlScheme={`${urlScheme}://checkout/${cart?.uuid}`}
206
210
  >
207
211
  {methodsPay?.includes(paymethod) ? (
208
212
  <StripeMethodForm
@@ -217,6 +221,7 @@ const StripeElementsFormUI = (props: any) => {
217
221
  placeByMethodPay={placeByMethodPay}
218
222
  methodPaySupported={methodPaySupported}
219
223
  setPlaceByMethodPay={setPlaceByMethodPay}
224
+ androidAppId={androidAppId}
220
225
  />
221
226
  ) : (
222
227
  <CardField
@@ -0,0 +1,170 @@
1
+ import React, { useState } from 'react'
2
+ import { Platform, StyleSheet, View } from 'react-native'
3
+ import {
4
+ useLanguage,
5
+ useOrder,
6
+ useConfig
7
+ } from 'ordering-components/native'
8
+ import { useTheme } from 'styled-components/native';
9
+ import { OText, OButton } from '../shared'
10
+ import {
11
+ CartList,
12
+ CartDivider,
13
+ TopActionsHeader,
14
+ TopHeader
15
+ } from './styles'
16
+ import { OrderSummary } from '../OrderSummary';
17
+ import { Cart } from '../Cart';
18
+ import { ScrollView } from 'react-native-gesture-handler';
19
+ import IconAntDesign from 'react-native-vector-icons/AntDesign';
20
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
21
+ import { UpsellingLayout } from './UpsellingLayout';
22
+
23
+ export const UpsellingContent = (props : any) => {
24
+ const {
25
+ onGoBack,
26
+ handleUpsellingPage,
27
+ onNavigationRedirect,
28
+ cart,
29
+ productsList
30
+ } = props
31
+
32
+ const theme = useTheme();
33
+
34
+ const [{ carts }] = useOrder()
35
+ const [{ configs }] = useConfig()
36
+ const [, t] = useLanguage()
37
+ const { bottom } = useSafeAreaInsets()
38
+ const [isCartsLoading, setIsCartsLoading] = useState(false)
39
+ const [showTitle, setShowTitle] = useState(false)
40
+
41
+ const isMultiCheckout = configs?.checkout_multi_business_enabled?.value === '1'
42
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
43
+ const showCartList = isChewLayout
44
+ const commentDelayTime = isChewLayout ? 500 : null
45
+
46
+ const cartList = (carts && Object.values(carts).filter((_cart: any) => _cart?.products?.length > 0 && _cart.uuid !== cart?.uuid)) || []
47
+
48
+ const styles = StyleSheet.create({
49
+ closeUpsellingButton: {
50
+ borderRadius: 7.6,
51
+ borderColor: theme.colors.primary,
52
+ backgroundColor: theme.colors.primary,
53
+ borderWidth: 1,
54
+ alignSelf: 'center',
55
+ height: 44,
56
+ shadowOpacity: 0,
57
+ width: '80%',
58
+ },
59
+ cancelBtn: {
60
+ paddingHorizontal: 18,
61
+ borderWidth: 1,
62
+ borderRadius: 7.6,
63
+ borderColor: theme.colors.textSecondary,
64
+ height: 38
65
+ },
66
+ headerItem: {
67
+ flexDirection: 'row',
68
+ alignItems: 'center',
69
+ marginVertical: 2,
70
+ marginHorizontal: 20,
71
+ },
72
+ btnBackArrow: {
73
+ borderWidth: 0,
74
+ width: 26,
75
+ height: 26,
76
+ backgroundColor: theme.colors.clear,
77
+ borderColor: theme.colors.clear,
78
+ shadowColor: theme.colors.clear,
79
+ paddingLeft: 0,
80
+ paddingRight: 0,
81
+ marginLeft: 20,
82
+ marginBottom: 10
83
+ },
84
+ wrapperNavbar: {
85
+ paddingHorizontal: 20,
86
+ paddingTop: 0,
87
+ }
88
+ })
89
+
90
+
91
+ const handleScroll = ({ nativeEvent: { contentOffset } }: any) => {
92
+ setShowTitle(contentOffset.y > 30)
93
+ }
94
+
95
+ return (
96
+ <>
97
+ <View style={styles.wrapperNavbar}>
98
+ <TopHeader>
99
+ <>
100
+ <TopActionsHeader onPress={() => onGoBack()}>
101
+ <IconAntDesign
102
+ name='arrowleft'
103
+ size={26}
104
+ />
105
+ </TopActionsHeader>
106
+ {showTitle && (
107
+ <OText
108
+ size={16}
109
+ style={{ flex: 1, textAlign: 'center', right: 15 }}
110
+ weight={Platform.OS === 'ios' ? '600' : 'bold'}
111
+ numberOfLines={2}
112
+ ellipsizeMode='tail'
113
+ >
114
+ {t('WANT_SOMETHING_ELSE', 'Do you want something else?')}
115
+ </OText>
116
+ )}
117
+ </>
118
+ </TopHeader>
119
+ </View>
120
+ <ScrollView style={{ marginTop: 10, marginBottom: props.isPage ? 40 : bottom + (Platform.OS == 'ios' ? 96 : 130) }} showsVerticalScrollIndicator={false} onScroll={handleScroll}>
121
+ {productsList.length > 0 &&
122
+ <View style={{ paddingHorizontal: 40, overflow: 'visible' }}>
123
+ <OText size={16} lineHeight={24} weight={'500'}>{t('WANT_SOMETHING_ELSE', 'Do you want something else?')}</OText>
124
+ <UpsellingLayout {...props} />
125
+ </View>
126
+ }
127
+ <View style={{ paddingHorizontal: 40 }}>
128
+ <OText size={20} lineHeight={30} weight={600} style={{ marginTop: 10, marginBottom: 17 }}>{t('YOUR_CART', 'Your cart')}</OText>
129
+ <OrderSummary
130
+ cart={cart}
131
+ commentDelayTime={commentDelayTime}
132
+ isCartPending={cart?.status === 2}
133
+ onNavigationRedirect={onNavigationRedirect}
134
+ />
135
+ </View>
136
+ {showCartList && cartList.map((cart: any, i: number) => (
137
+ <CartList key={i}>
138
+ <Cart
139
+ isFromUpselling
140
+ cart={cart}
141
+ cartuuid={cart.uuid}
142
+ hideUpselling
143
+ singleBusiness={props.singleBusiness}
144
+ isFranchiseApp={props.isFranchiseApp}
145
+ isCartsLoading={isCartsLoading}
146
+ setIsCartsLoading={setIsCartsLoading}
147
+ isMultiCheckout={isMultiCheckout}
148
+ onNavigationRedirect={props.onNavigationRedirect}
149
+ />
150
+ <CartDivider />
151
+ </CartList>
152
+ ))}
153
+ </ScrollView>
154
+ <View
155
+ style={{
156
+ alignItems: 'center',
157
+ bottom: props.isPage ? Platform.OS === 'ios' ? 0 : 20 : Platform.OS === 'ios' ? bottom + 59 : bottom + 125
158
+ }}
159
+ >
160
+ <OButton
161
+ imgRightSrc=''
162
+ text={t('CHECKOUT', 'Checkout')}
163
+ style={{ ...styles.closeUpsellingButton }}
164
+ textStyle={{ color: theme.colors.white, fontSize: 14 }}
165
+ onClick={() => handleUpsellingPage(cart)}
166
+ />
167
+ </View>
168
+ </>
169
+ )
170
+ }
@@ -0,0 +1,86 @@
1
+ import React from 'react'
2
+ import { Platform, StyleSheet, View } from 'react-native'
3
+ import {
4
+ useUtils,
5
+ useLanguage
6
+ } from 'ordering-components/native'
7
+ import {
8
+ Container,
9
+ UpsellingContainer,
10
+ Item,
11
+ Details,
12
+ AddButton,
13
+ } from './styles'
14
+ import { OIcon, OText } from '../shared'
15
+ import { useTheme } from 'styled-components/native';
16
+
17
+ export const UpsellingLayout = (props : any) => {
18
+ const {
19
+ upsellingProducts,
20
+ productsList,
21
+ onNavigationRedirect,
22
+ business
23
+ } = props
24
+ const theme = useTheme()
25
+ const [{ parsePrice }] = useUtils()
26
+ const [, t] = useLanguage()
27
+
28
+ const styles = StyleSheet.create({
29
+ imageStyle: {
30
+ width: 73,
31
+ height: 73,
32
+ resizeMode: 'cover',
33
+ borderRadius: 7.6,
34
+ },
35
+ })
36
+
37
+ const handleFormProduct = (product: any) => {
38
+ onNavigationRedirect && onNavigationRedirect('ProductDetails', {
39
+ product: product,
40
+ businessId: product?.api?.businessId,
41
+ businessSlug: business.slug,
42
+ })
43
+ }
44
+
45
+
46
+ return (
47
+ <>
48
+ <Container>
49
+ <UpsellingContainer
50
+ horizontal
51
+ showsHorizontalScrollIndicator={false}
52
+ contentContainerStyle={{ paddingHorizontal: Platform.OS === 'ios' ? 40 : 0 }}
53
+ >
54
+ {
55
+ !upsellingProducts.loading && (
56
+ <>
57
+ {
58
+ !upsellingProducts.error ? productsList.map((product: any, i: number) => (
59
+ <Item key={`${product.id}_${i}`}>
60
+ <View style={{ flexBasis: '57%' }}>
61
+ <Details>
62
+ <OText size={12} lineHeight={18} numberOfLines={1} ellipsizeMode='tail'>{product.name}</OText>
63
+ <OText size={12} lineHeight={18} color={theme.colors.textNormal}>{parsePrice(product.price)}</OText>
64
+ </Details>
65
+ <AddButton onPress={() => handleFormProduct(product)}>
66
+ <OText size={10} color={theme.colors.primary}>{t('ADD', 'Add')}</OText>
67
+ </AddButton>
68
+ </View>
69
+ <View>
70
+ <OIcon url={product?.images || theme?.images?.dummies?.product} style={styles.imageStyle} />
71
+ </View>
72
+ </Item>
73
+ )) : (
74
+ <OText>
75
+ {upsellingProducts.message}
76
+ </OText>
77
+ )
78
+ }
79
+ </>
80
+ )
81
+ }
82
+ </UpsellingContainer>
83
+ </Container>
84
+ </>
85
+ )
86
+ }
@@ -1,116 +1,41 @@
1
- import React, { useState, useEffect } from 'react'
2
- import { Platform, StyleSheet, TouchableOpacity, View } from 'react-native'
1
+ import React, { useEffect } from 'react'
3
2
  import {
4
3
  UpsellingPage as UpsellingPageController,
5
- useUtils,
6
- useLanguage,
7
4
  useOrder,
8
- useConfig
9
5
  } from 'ordering-components/native'
10
- import { useTheme } from 'styled-components/native';
11
- import { OText, OIcon, OBottomPopup, OButton } from '../shared'
6
+ import { OBottomPopup } from '../shared'
12
7
  import { UpsellingProductsParams } from '../../types'
13
- import {
14
- Container,
15
- UpsellingContainer,
16
- Item,
17
- Details,
18
- AddButton,
19
- CartList,
20
- CartDivider
21
- } from './styles'
22
- import { OrderSummary } from '../OrderSummary';
23
- import { Cart } from '../Cart';
24
- import { ScrollView } from 'react-native-gesture-handler';
25
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
8
+
9
+ import { UpsellingLayout } from './UpsellingLayout';
10
+ import { UpsellingContent } from './UpsellingContent';
26
11
 
27
12
  const UpsellingProductsUI = (props: UpsellingProductsParams) => {
28
13
  const {
29
14
  isCustomMode,
30
15
  upsellingProducts,
31
- business,
32
16
  handleUpsellingPage,
33
17
  openUpselling,
34
18
  canOpenUpselling,
35
19
  setCanOpenUpselling,
36
- isFromCart,
37
- onNavigationRedirect,
38
- onGoBack
20
+ isFromCart
39
21
  } = props
40
22
 
41
- const theme = useTheme();
42
-
43
- const styles = StyleSheet.create({
44
- imageStyle: {
45
- width: 73,
46
- height: 73,
47
- resizeMode: 'cover',
48
- borderRadius: 7.6,
49
- },
50
- closeUpsellingButton: {
51
- borderRadius: 7.6,
52
- borderColor: theme.colors.primary,
53
- backgroundColor: theme.colors.primary,
54
- borderWidth: 1,
55
- alignSelf: 'center',
56
- height: 44,
57
- shadowOpacity: 0,
58
- width: '80%',
59
- },
60
- cancelBtn: {
61
- paddingHorizontal: 18,
62
- borderWidth: 1,
63
- borderRadius: 7.6,
64
- borderColor: theme.colors.textSecondary,
65
- height: 38
66
- },
67
- headerItem: {
68
- flexDirection: 'row',
69
- alignItems: 'center',
70
- marginVertical: 2,
71
- marginHorizontal: 20,
72
- },
73
- btnBackArrow: {
74
- borderWidth: 0,
75
- width: 26,
76
- height: 26,
77
- backgroundColor: theme.colors.clear,
78
- borderColor: theme.colors.clear,
79
- shadowColor: theme.colors.clear,
80
- paddingLeft: 0,
81
- paddingRight: 0,
82
- marginLeft: 20,
83
- marginBottom: 10
84
- },
85
- })
86
-
87
23
  const [{ carts }] = useOrder()
88
- const [{ parsePrice }] = useUtils()
89
- const [{ configs }] = useConfig()
90
- const [, t] = useLanguage()
91
- const { bottom } = useSafeAreaInsets()
92
- const [isCartsLoading, setIsCartsLoading] = useState(false)
93
-
94
- const isMultiCheckout = configs?.checkout_multi_business_enabled?.value === '1'
95
- const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
96
- const showCartList = isChewLayout
97
- const commentDelayTime = isChewLayout ? 500 : null
98
24
 
99
25
  const cart = carts?.[`businessId:${props.businessId}`] ?? {}
100
- const cartList = (carts && Object.values(carts).filter((_cart: any) => _cart?.products?.length > 0 && _cart.uuid !== cart?.uuid)) || []
101
26
  const cartProducts = cart?.products?.length
102
- ? cart?.products.map((product: any) => product.id)
103
- : []
27
+ ? cart?.products.map((product: any) => product.id)
28
+ : []
104
29
 
105
30
  const productsList = !upsellingProducts.loading && !upsellingProducts.error
106
- ? upsellingProducts?.products?.length
31
+ ? upsellingProducts?.products?.length
107
32
  ? upsellingProducts?.products.filter((product: any) => !cartProducts.includes(product.id))
108
33
  : (props?.products ?? []).filter((product: any) => !cartProducts.includes(product.id)) ?? []
109
- : []
34
+ : []
110
35
 
111
36
  useEffect(() => {
112
37
  if (!isCustomMode && !props.products) {
113
- if (!upsellingProducts.loading) {
38
+ if (!upsellingProducts?.loading) {
114
39
  if (upsellingProducts?.products?.length && !isFromCart) {
115
40
  setCanOpenUpselling && setCanOpenUpselling(true)
116
41
  } else {
@@ -118,125 +43,16 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
118
43
  }
119
44
  }
120
45
  }
121
- }, [upsellingProducts.loading, upsellingProducts?.products.length])
122
-
123
- const handleFormProduct = (product: any) => {
124
- onNavigationRedirect && onNavigationRedirect('ProductDetails', {
125
- product: product,
126
- businessId: product?.api?.businessId,
127
- businessSlug: business.slug,
128
- })
129
- }
130
-
131
- const UpsellingLayout = () => {
132
- return (
133
- <Container>
134
- <UpsellingContainer
135
- horizontal
136
- showsHorizontalScrollIndicator={false}
137
- contentContainerStyle={{ paddingHorizontal: Platform.OS === 'ios' ? 40 : 0 }}
138
- >
139
- {
140
- !upsellingProducts.loading && (
141
- <>
142
- {
143
- !upsellingProducts.error ? productsList.map((product: any, i: number) => (
144
- <Item key={`${product.id}_${i}`}>
145
- <View style={{ flexBasis: '57%' }}>
146
- <Details>
147
- <OText size={12} lineHeight={18} numberOfLines={1} ellipsizeMode='tail'>{product.name}</OText>
148
- <OText size={12} lineHeight={18} color={theme.colors.textNormal}>{parsePrice(product.price)}</OText>
149
- </Details>
150
- <AddButton onPress={() => handleFormProduct(product)}>
151
- <OText size={10} color={theme.colors.primary}>{t('ADD', 'Add')}</OText>
152
- </AddButton>
153
- </View>
154
- <View>
155
- <OIcon url={product?.images || theme?.images?.dummies?.product} style={styles.imageStyle} />
156
- </View>
157
- </Item>
158
- )) : (
159
- <OText>
160
- {upsellingProducts.message}
161
- </OText>
162
- )
163
- }
164
- </>
165
- )
166
- }
167
- </UpsellingContainer>
168
- </Container>
169
- )
170
- }
171
-
172
- const UpsellingContent = () => {
173
- return (
174
- <>
175
- <View style={{ ...styles.headerItem, flex: 1, marginTop: Platform.OS == 'ios' ? 35 : 14 }}>
176
- <TouchableOpacity onPress={() => onGoBack()} style={styles.btnBackArrow}>
177
- <OIcon src={theme.images.general.arrow_left} color={theme.colors.textNormal} />
178
- </TouchableOpacity>
179
- </View>
180
- <ScrollView style={{ marginTop: 10, marginBottom: props.isPage ? 40 : bottom + (Platform.OS == 'ios' ? 96 : 130) }} showsVerticalScrollIndicator={false}>
181
- {productsList.length > 0 &&
182
- <View style={{ paddingHorizontal: 40, overflow: 'visible' }}>
183
- <OText size={16} lineHeight={24} weight={'500'}>{t('WANT_SOMETHING_ELSE', 'Do you want something else?')}</OText>
184
- <UpsellingLayout />
185
- </View>
186
- }
187
- <View style={{ paddingHorizontal: 40 }}>
188
- <OText size={20} lineHeight={30} weight={600} style={{ marginTop: 10, marginBottom: 17 }}>{t('YOUR_CART', 'Your cart')}</OText>
189
- <OrderSummary
190
- cart={cart}
191
- commentDelayTime={commentDelayTime}
192
- isCartPending={cart?.status === 2}
193
- onNavigationRedirect={onNavigationRedirect}
194
- />
195
- </View>
196
- {showCartList && cartList.map((cart: any, i: number) => (
197
- <CartList key={i}>
198
- <Cart
199
- isFromUpselling
200
- cart={cart}
201
- cartuuid={cart.uuid}
202
- hideUpselling
203
- singleBusiness={props.singleBusiness}
204
- isFranchiseApp={props.isFranchiseApp}
205
- isCartsLoading={isCartsLoading}
206
- setIsCartsLoading={setIsCartsLoading}
207
- isMultiCheckout={isMultiCheckout}
208
- onNavigationRedirect={props.onNavigationRedirect}
209
- />
210
- <CartDivider />
211
- </CartList>
212
- ))}
213
- </ScrollView>
214
- <View
215
- style={{
216
- alignItems: 'center',
217
- bottom: props.isPage ? Platform.OS === 'ios' ? 0 : 20 : Platform.OS === 'ios' ? bottom + 59 : bottom + 125
218
- }}
219
- >
220
- <OButton
221
- imgRightSrc=''
222
- text={t('CHECKOUT', 'Checkout')}
223
- style={{ ...styles.closeUpsellingButton }}
224
- textStyle={{ color: theme.colors.white, fontSize: 14 }}
225
- onClick={() => handleUpsellingPage(cart)}
226
- />
227
- </View>
228
- </>
229
- )
230
- }
46
+ }, [upsellingProducts?.loading, upsellingProducts?.products?.length])
231
47
 
232
48
  return (
233
49
  <>
234
50
  {isCustomMode ? (
235
- <UpsellingLayout />
51
+ <UpsellingLayout {...props} productsList={productsList} />
236
52
  ) : (
237
53
  <>
238
54
  {props.isPage ? (
239
- <UpsellingContent />
55
+ <UpsellingContent {...props} cart={cart} productsList={productsList} />
240
56
  ) : (
241
57
  canOpenUpselling && (
242
58
  <OBottomPopup
@@ -245,7 +61,7 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
245
61
  onClose={() => handleUpsellingPage(cart)}
246
62
  isStatusBar
247
63
  >
248
- <UpsellingContent />
64
+ <UpsellingContent {...props} productsList={productsList} />
249
65
  </OBottomPopup>
250
66
  )
251
67
  )}
@@ -59,3 +59,22 @@ export const CartDivider = styled.View`
59
59
  background-color: ${(props: any) => props.theme.colors.backgroundGray100};
60
60
  margin: 20px -40px 0;
61
61
  `
62
+
63
+
64
+ export const TopActionsHeader = styled.TouchableOpacity`
65
+ height: 60px;
66
+ justify-content: center;
67
+ min-width: 30px;
68
+ padding-right: 15px;
69
+ `;
70
+
71
+ export const TopHeader = styled.View`
72
+ width: 100%;
73
+ flex-direction: row;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ z-index: 1;
77
+ height: 60px;
78
+ min-height: 60px;
79
+ `
80
+