ordering-ui-react-native 0.16.24 → 0.16.25-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 (201) hide show
  1. package/package.json +7 -4
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/AddressForm/index.tsx +18 -2
  6. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  7. package/src/components/BusinessController/index.tsx +10 -8
  8. package/src/components/BusinessInformation/index.tsx +33 -4
  9. package/src/components/BusinessInformation/styles.tsx +2 -2
  10. package/src/components/BusinessProductsList/index.tsx +10 -10
  11. package/src/components/BusinessesListing/index.tsx +1 -1
  12. package/src/components/Checkout/index.tsx +2 -1
  13. package/src/components/LanguageSelector/index.tsx +21 -16
  14. package/src/components/LoginForm/index.tsx +118 -30
  15. package/src/components/LoginForm/styles.tsx +6 -0
  16. package/src/components/Messages/index.tsx +2 -2
  17. package/src/components/NotificationSetting/index.tsx +85 -0
  18. package/src/components/OrderDetails/index.tsx +2 -20
  19. package/src/components/OrdersOption/index.tsx +54 -56
  20. package/src/components/PaymentOptions/index.tsx +335 -365
  21. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  22. package/src/components/ReviewDriver/index.tsx +1 -1
  23. package/src/components/ReviewOrder/index.tsx +2 -1
  24. package/src/components/ReviewProducts/index.tsx +11 -0
  25. package/src/components/SignupForm/index.tsx +143 -61
  26. package/src/components/SingleProductReview/index.tsx +8 -5
  27. package/src/components/StripeElementsForm/index.tsx +25 -16
  28. package/src/components/VerifyPhone/styles.tsx +1 -2
  29. package/src/components/shared/OBottomPopup.tsx +6 -2
  30. package/src/index.tsx +2 -0
  31. package/src/pages/BusinessesListing.tsx +7 -6
  32. package/src/pages/OrderDetails.tsx +1 -1
  33. package/src/pages/ReviewDriver.tsx +2 -2
  34. package/src/pages/ReviewOrder.tsx +2 -2
  35. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  36. package/src/types/index.tsx +13 -9
  37. package/src/utils/index.tsx +0 -1
  38. package/themes/business/index.tsx +4 -0
  39. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  40. package/themes/business/src/components/Chat/index.tsx +42 -34
  41. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  42. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  43. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  44. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  45. package/themes/business/src/components/MapView/index.tsx +12 -1
  46. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  47. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  48. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +25 -19
  49. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  50. package/themes/business/src/components/OrdersOption/index.tsx +65 -21
  51. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  52. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  53. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  54. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  55. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  56. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  57. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  58. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  59. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  60. package/themes/business/src/components/PreviousOrders/index.tsx +21 -23
  61. package/themes/business/src/components/ProductItemAccordion/index.tsx +5 -4
  62. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  63. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  64. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  65. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  66. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  67. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  68. package/themes/business/src/components/shared/OModal.tsx +40 -37
  69. package/themes/business/src/types/index.tsx +15 -9
  70. package/themes/business/src/utils/index.tsx +10 -0
  71. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  72. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  73. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  74. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  75. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  76. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  77. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  78. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  79. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  80. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  81. package/themes/kiosk/src/types/index.d.ts +2 -0
  82. package/themes/original/index.tsx +12 -0
  83. package/themes/original/src/components/AddressForm/index.tsx +139 -135
  84. package/themes/original/src/components/AddressList/index.tsx +1 -1
  85. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  86. package/themes/original/src/components/BusinessBasicInformation/index.tsx +311 -161
  87. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  88. package/themes/original/src/components/BusinessController/index.tsx +190 -113
  89. package/themes/original/src/components/BusinessController/styles.tsx +0 -7
  90. package/themes/original/src/components/BusinessItemAccordion/index.tsx +4 -4
  91. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  92. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  93. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  94. package/themes/original/src/components/BusinessListingSearch/index.tsx +101 -125
  95. package/themes/original/src/components/BusinessListingSearch/styles.tsx +18 -13
  96. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  97. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  98. package/themes/original/src/components/BusinessProductsList/index.tsx +49 -52
  99. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  100. package/themes/original/src/components/BusinessProductsListing/index.tsx +287 -175
  101. package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -8
  102. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  103. package/themes/original/src/components/BusinessTypeFilter/index.tsx +109 -40
  104. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  105. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +561 -0
  106. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -10
  107. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +676 -0
  108. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  109. package/themes/original/src/components/BusinessesListing/index.tsx +105 -519
  110. package/themes/original/src/components/Cart/index.tsx +42 -10
  111. package/themes/original/src/components/Cart/styles.tsx +4 -0
  112. package/themes/original/src/components/CartContent/index.tsx +22 -16
  113. package/themes/original/src/components/Checkout/index.tsx +90 -53
  114. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  115. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  116. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  117. package/themes/original/src/components/Favorite/index.tsx +1 -0
  118. package/themes/original/src/components/FavoriteList/index.tsx +32 -2
  119. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  120. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  121. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  122. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +8 -3
  123. package/themes/original/src/components/HelpGuide/index.tsx +8 -3
  124. package/themes/original/src/components/HelpOrder/index.tsx +8 -3
  125. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  126. package/themes/original/src/components/LoginForm/Otp/index.tsx +3 -2
  127. package/themes/original/src/components/LoginForm/index.tsx +82 -44
  128. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  129. package/themes/original/src/components/Messages/index.tsx +17 -17
  130. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  131. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  132. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -92
  133. package/themes/original/src/components/MultiCheckout/index.tsx +6 -0
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -16
  135. package/themes/original/src/components/MyOrders/index.tsx +70 -6
  136. package/themes/original/src/components/NavBar/index.tsx +15 -9
  137. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  138. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  139. package/themes/original/src/components/Notifications/index.tsx +148 -0
  140. package/themes/original/src/components/Notifications/styles.tsx +17 -0
  141. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  142. package/themes/original/src/components/OrderDetails/index.tsx +190 -35
  143. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  144. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  145. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  146. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  147. package/themes/original/src/components/OrderSummary/index.tsx +1 -34
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  149. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  150. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +100 -106
  151. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +17 -12
  152. package/themes/original/src/components/OrdersOption/index.tsx +71 -55
  153. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  154. package/themes/original/src/components/PaymentOptions/index.tsx +42 -24
  155. package/themes/original/src/components/PhoneInputNumber/index.tsx +4 -10
  156. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  157. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  158. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  159. package/themes/original/src/components/ProductForm/index.tsx +710 -653
  160. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  161. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  162. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  163. package/themes/original/src/components/ProfessionalFilter/index.tsx +129 -0
  164. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  165. package/themes/original/src/components/ProfessionalProfile/index.tsx +309 -0
  166. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  167. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  168. package/themes/original/src/components/ReviewOrder/index.tsx +18 -3
  169. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  170. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  171. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  172. package/themes/original/src/components/SearchBar/index.tsx +5 -3
  173. package/themes/original/src/components/ServiceForm/index.tsx +631 -0
  174. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  175. package/themes/original/src/components/SignupForm/index.tsx +350 -206
  176. package/themes/original/src/components/SingleOrderCard/index.tsx +229 -181
  177. package/themes/original/src/components/SingleOrderCard/styles.tsx +0 -7
  178. package/themes/original/src/components/SingleProductCard/index.tsx +207 -107
  179. package/themes/original/src/components/SingleProductCard/styles.tsx +1 -10
  180. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  181. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  182. package/themes/original/src/components/StripeElementsForm/index.tsx +15 -7
  183. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  184. package/themes/original/src/components/UserDetails/index.tsx +31 -17
  185. package/themes/original/src/components/UserFormDetails/index.tsx +74 -81
  186. package/themes/original/src/components/UserProfile/index.tsx +54 -29
  187. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  188. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  189. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  190. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  191. package/themes/original/src/components/Wallets/index.tsx +174 -162
  192. package/themes/original/src/components/Wallets/styles.tsx +10 -8
  193. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  194. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  195. package/themes/original/src/components/shared/OButton.tsx +10 -3
  196. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  197. package/themes/original/src/components/shared/OInput.tsx +3 -2
  198. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  199. package/themes/original/src/types/index.tsx +122 -30
  200. package/themes/original/src/utils/index.tsx +77 -0
  201. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -0,0 +1,197 @@
1
+ import React, { useEffect, useState } from 'react'
2
+ import { StyleSheet, View, Platform } from 'react-native'
3
+ import SelectDropdown from 'react-native-select-dropdown'
4
+ import { useTheme } from 'styled-components/native'
5
+ import {
6
+ MomentOption as MomentOptionController,
7
+ useConfig,
8
+ useUtils
9
+ } from 'ordering-components/native'
10
+ import { useSafeAreaInsets } from 'react-native-safe-area-context'
11
+ import IconAntDesign from 'react-native-vector-icons/AntDesign'
12
+ import { Container } from './styles'
13
+ import moment from 'moment'
14
+
15
+ const MomentSelectorUI = (props: any) => {
16
+ const {
17
+ datesList,
18
+ hoursList,
19
+ dateSelected,
20
+ timeSelected,
21
+ handleChangeDate,
22
+ handleChangeTime,
23
+ } = props
24
+
25
+ const theme = useTheme()
26
+ const { top } = useSafeAreaInsets()
27
+ const [{ configs }] = useConfig()
28
+ const [{ parseTime }] = useUtils()
29
+
30
+ const [customizedDateList, setCustomizedDateList] = useState([])
31
+ const [customizedTimeList, setCustomizedTimeList] = useState([])
32
+
33
+ const is12hours = configs?.dates_moment_format?.value?.includes('hh:mm')
34
+
35
+ const styles = StyleSheet.create({
36
+ selectOption: {
37
+ width: '100%',
38
+ backgroundColor: theme.colors.backgroundGray100,
39
+ paddingVertical: 5,
40
+ paddingHorizontal: 14,
41
+ flexDirection: 'row-reverse',
42
+ alignItems: 'center',
43
+ justifyContent: 'space-between',
44
+ height: 30
45
+ },
46
+ selectWrapper: {
47
+ flex: 1
48
+ }
49
+ })
50
+
51
+ useEffect(() => {
52
+ const updatedDatesList = datesList?.map((date: any) => {
53
+ return { value: moment(date).format('MMM DD, YYYY'), key: date }
54
+ })
55
+ setCustomizedDateList(updatedDatesList)
56
+ }, [datesList])
57
+
58
+ useEffect(() => {
59
+ if (hoursList?.length > 0) {
60
+
61
+ const updatedHoursList = hoursList?.map((hour: any) => {
62
+ const timeValue = is12hours ? (
63
+ hour?.startTime?.includes('12')
64
+ ? `${hour.startTime}PM`
65
+ : parseTime(moment(hour.startTime, 'HH:mm'), { outputFormat: 'hh:mma' })
66
+ ) : (
67
+ parseTime(moment(hour.startTime, 'HH:mm'), { outputFormat: 'HH:mm' })
68
+ )
69
+ return { value: timeValue, key: hour.startTime }
70
+ })
71
+ setCustomizedTimeList(updatedHoursList)
72
+ }
73
+ }, [hoursList])
74
+
75
+ const dropDownIcon = () => {
76
+ return (
77
+ <IconAntDesign
78
+ name='down'
79
+ color={theme.colors.textThird}
80
+ size={12}
81
+ />
82
+ )
83
+ }
84
+
85
+ return (
86
+ <Container>
87
+ <View style={styles.selectWrapper}>
88
+ <SelectDropdown
89
+ defaultValue={customizedDateList?.find((item: any) => item.key === dateSelected)}
90
+ data={customizedDateList}
91
+ onSelect={(selectedItem, index) => {
92
+ handleChangeDate(selectedItem?.key)
93
+ }}
94
+ buttonTextAfterSelection={(selectedItem, index) => {
95
+ return selectedItem?.value
96
+ }}
97
+ rowTextForSelection={(item, index) => {
98
+ return item.value
99
+ }}
100
+ buttonStyle={{borderTopLeftRadius: 7.6, borderBottomLeftRadius: 7.6, ...styles.selectOption}}
101
+ buttonTextStyle={{
102
+ color: theme.colors.disabled,
103
+ fontSize: 12,
104
+ textAlign: 'left',
105
+ marginHorizontal: 0
106
+ }}
107
+ dropdownStyle={{
108
+ borderRadius: 8,
109
+ borderColor: theme.colors.lightGray,
110
+ marginTop: Platform.OS === 'ios' ? 12 : -top
111
+ }}
112
+ rowStyle={{
113
+ borderBottomColor: theme.colors.backgroundGray100,
114
+ backgroundColor: theme.colors.backgroundGray100,
115
+ height: 30,
116
+ flexDirection: 'column',
117
+ alignItems: 'flex-start',
118
+ paddingTop: 8,
119
+ paddingHorizontal: 12
120
+ }}
121
+ rowTextStyle={{
122
+ color: theme.colors.disabled,
123
+ fontSize: 12,
124
+ marginHorizontal: 0
125
+ }}
126
+ renderDropdownIcon={() => dropDownIcon()}
127
+ dropdownOverlayColor='transparent'
128
+ />
129
+ </View>
130
+ <View style={styles.selectWrapper}>
131
+ <SelectDropdown
132
+ defaultValue={customizedTimeList?.find((item: any) => item.key === timeSelected)}
133
+ data={customizedTimeList}
134
+ onSelect={(selectedItem, index) => {
135
+ handleChangeTime(selectedItem.key)
136
+ }}
137
+ buttonTextAfterSelection={(selectedItem, index) => {
138
+ return selectedItem.value
139
+ }}
140
+ rowTextForSelection={(item, index) => {
141
+ return item.value
142
+ }}
143
+ buttonStyle={{borderTopRightRadius: 7.6, borderBottomRightRadius: 7.6, ...styles.selectOption}}
144
+ buttonTextStyle={{
145
+ color: theme.colors.disabled,
146
+ fontSize: 12,
147
+ textAlign: 'left',
148
+ marginHorizontal: 0
149
+ }}
150
+ dropdownStyle={{
151
+ borderRadius: 8,
152
+ borderColor: theme.colors.lightGray,
153
+ marginTop: Platform.OS === 'ios' ? 12 : -top
154
+ }}
155
+ rowStyle={{
156
+ borderBottomColor: theme.colors.backgroundGray100,
157
+ backgroundColor: theme.colors.backgroundGray100,
158
+ height: 30,
159
+ flexDirection: 'column',
160
+ alignItems: 'flex-start',
161
+ paddingTop: 8,
162
+ paddingHorizontal: 14
163
+ }}
164
+ rowTextStyle={{
165
+ color: theme.colors.disabled,
166
+ fontSize: 12,
167
+ marginHorizontal: 0
168
+ }}
169
+ renderDropdownIcon={() => dropDownIcon()}
170
+ dropdownOverlayColor='transparent'
171
+ />
172
+ </View>
173
+ </Container>
174
+ )
175
+ }
176
+
177
+ export const MomentSelector = (props: any) => {
178
+ const [{ configs }] = useConfig()
179
+
180
+ const limitDays = parseInt(configs?.max_days_preorder?.value, 10)
181
+
182
+ const currentDate = new Date()
183
+ const time = limitDays > 1
184
+ ? currentDate.getTime() + ((limitDays - 1) * 24 * 60 * 60 * 1000)
185
+ : limitDays === 1 ? currentDate.getTime() : currentDate.getTime() + (6 * 24 * 60 * 60 * 1000)
186
+
187
+ currentDate.setTime(time)
188
+ currentDate.setHours(23)
189
+ currentDate.setMinutes(59)
190
+
191
+ const businessPreorderProps = {
192
+ ...props,
193
+ UIComponent: MomentSelectorUI,
194
+ maxDate: currentDate
195
+ }
196
+ return <MomentOptionController {...businessPreorderProps} />
197
+ }
@@ -0,0 +1,6 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const Container = styled.View`
4
+ flex-direction: row;
5
+ width: 100%;
6
+ `
@@ -7,7 +7,7 @@ import {
7
7
  } from 'ordering-components/native'
8
8
  import { useTheme } from 'styled-components/native'
9
9
  import { View, TouchableOpacity, FlatList, StyleSheet, KeyboardAvoidingView, Platform } from 'react-native'
10
- import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
10
+ import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
11
11
  import { OText, OIcon, OModal, OButton } from '../shared'
12
12
  import { getIconCard, flatArray } from '../../utils'
13
13
  import { StripeElementsForm } from '../StripeElementsForm'
@@ -37,7 +37,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
37
37
  const [{ configs }] = useConfig()
38
38
  const [{ parsePrice }] = useUtils()
39
39
 
40
- const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
40
+ const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
41
41
 
42
42
  const isWalletCashEnabled = configs?.wallet_cash_enabled?.value === '1'
43
43
  const isWalletPointsEnabled = configs?.wallet_credit_point_enabled?.value === '1'
@@ -54,52 +54,52 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
54
54
  }
55
55
 
56
56
  const getPayIcon = (method: string) => {
57
- switch (method) {
58
- case 'cash':
59
- return theme.images.general.cash
60
- case 'card_delivery':
61
- return theme.images.general.carddelivery
62
- case 'paypal':
63
- return theme.images.general.paypal
64
- case 'stripe':
65
- return theme.images.general.stripe
66
- case 'stripe_direct':
67
- return theme.images.general.stripecc
68
- case 'stripe_connect':
69
- return theme.images.general.stripes
70
- case 'stripe_redirect':
71
- return theme.images.general.stripesb
72
- default:
73
- return theme.images.general.creditCard
74
- }
75
- }
57
+ switch (method) {
58
+ case 'cash':
59
+ return theme.images.general.cash
60
+ case 'card_delivery':
61
+ return theme.images.general.carddelivery
62
+ case 'paypal':
63
+ return theme.images.general.paypal
64
+ case 'stripe':
65
+ return theme.images.general.stripe
66
+ case 'stripe_direct':
67
+ return theme.images.general.stripecc
68
+ case 'stripe_connect':
69
+ return theme.images.general.stripes
70
+ case 'stripe_redirect':
71
+ return theme.images.general.stripesb
72
+ default:
73
+ return theme.images.general.creditCard
74
+ }
75
+ }
76
76
 
77
77
  const renderPaymethods = ({ item }: any) => {
78
- return (
79
- <TouchableOpacity
80
- onPress={() => handleSelectPaymethod(item)}
81
- >
82
- <PMItem
83
- key={item.id}
84
- isActive={paymethodSelected?.paymethod_id === item.paymethod_id}
85
- >
86
- <OIcon
87
- src={getPayIcon(item.paymethod?.gateway)}
88
- width={20}
89
- height={20}
90
- color={paymethodSelected?.paymethod_id === item.paymethod_id ? theme.colors.white : theme.colors.backgroundDark}
91
- />
92
- <OText
93
- size={10}
94
- style={{ margin: 0, marginTop: 4 }}
95
- color={paymethodSelected?.paymethod_id === item.paymethod_id ? theme.colors.white : '#000'}
96
- >
97
- {t(item?.paymethod?.gateway.toUpperCase(), item?.paymethod?.name)}
98
- </OText>
99
- </PMItem>
100
- </TouchableOpacity>
101
- )
102
- }
78
+ return (
79
+ <TouchableOpacity
80
+ onPress={() => handleSelectPaymethod(item)}
81
+ >
82
+ <PMItem
83
+ key={item.id}
84
+ isActive={paymethodSelected?.paymethod_id === item.paymethod_id}
85
+ >
86
+ <OIcon
87
+ src={getPayIcon(item.paymethod?.gateway)}
88
+ width={20}
89
+ height={20}
90
+ color={paymethodSelected?.paymethod_id === item.paymethod_id ? theme.colors.white : theme.colors.backgroundDark}
91
+ />
92
+ <OText
93
+ size={10}
94
+ style={{ margin: 0, marginTop: 4 }}
95
+ color={paymethodSelected?.paymethod_id === item.paymethod_id ? theme.colors.white : '#000'}
96
+ >
97
+ {t(item?.paymethod?.gateway.toUpperCase(), item?.paymethod?.name)}
98
+ </OText>
99
+ </PMItem>
100
+ </TouchableOpacity>
101
+ )
102
+ }
103
103
 
104
104
  return (
105
105
  <PMContainer>
@@ -123,10 +123,10 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
123
123
  ) : (
124
124
  <FlatList
125
125
  horizontal
126
- showsHorizontalScrollIndicator={false}
127
- data={businessPaymethods.result.filter((paymethod: any) => paymethodsAndWallets.paymethods.find((item: any) => item.id === paymethod.paymethod_id))}
128
- renderItem={renderPaymethods}
129
- keyExtractor={(paymethod: any) => paymethod?.id?.toString?.()}
126
+ showsHorizontalScrollIndicator={false}
127
+ data={businessPaymethods?.result?.filter((paymethod: any) => paymethodsAndWallets.paymethods.find((item: any) => item.id === paymethod.paymethod_id))}
128
+ renderItem={renderPaymethods}
129
+ keyExtractor={(paymethod: any) => paymethod?.id?.toString?.()}
130
130
  />
131
131
  )}
132
132
  {!paymethodsAndWallets.loading && !paymethodsAndWallets.error && paymethodsAndWallets.paymethods.length === 0 && (
@@ -138,22 +138,22 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
138
138
  {paymethodSelected?.paymethod?.gateway === 'stripe' && (
139
139
  <View>
140
140
  <OButton
141
- text={t('ADD_PAYMENT_CARD', 'Add New Payment Card')}
142
- bgColor={theme.colors.white}
143
- borderColor={theme.colors.primary}
144
- style={styles.btnAddStyle}
145
- textStyle={{ color: theme.colors.primary, fontSize: 12 }}
146
- imgRightSrc={null}
147
- onClick={() => setAddCardOpen({ ...addCardOpen, stripe: true })}
148
- />
141
+ text={t('ADD_PAYMENT_CARD', 'Add New Payment Card')}
142
+ bgColor={theme.colors.white}
143
+ borderColor={theme.colors.primary}
144
+ style={styles.btnAddStyle}
145
+ textStyle={{ color: theme.colors.primary, fontSize: 12 }}
146
+ imgRightSrc={null}
147
+ onClick={() => setAddCardOpen({ ...addCardOpen, stripe: true })}
148
+ />
149
149
  <StripeCardsList
150
- paymethod={paymethodSelected?.paymethod}
151
- businessId={businessIds[0]}
150
+ paymethod={paymethodSelected?.paymethod}
151
+ businessId={businessIds[0]}
152
152
  businessIds={businessIds}
153
- publicKey={paymethodSelected?.data?.publishable}
154
- payType={paymethodSelected?.paymethod?.name}
155
- onSelectCard={handlePaymethodDataChange}
156
- />
153
+ publicKey={paymethodSelected?.data?.publishable}
154
+ payType={paymethodSelected?.paymethod?.name}
155
+ onSelectCard={handlePaymethodDataChange}
156
+ />
157
157
  </View>
158
158
  )}
159
159
 
@@ -170,7 +170,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
170
170
  </>
171
171
  ) : (
172
172
  <>
173
- {walletsState.result.filter((wallet: any) => paymethodsAndWallets.wallets.find((item: any) => item.type === wallet.type)).map((wallet: any, idx: any) => walletName[wallet.type]?.isActive && (
173
+ {walletsState?.result?.filter((wallet: any) => paymethodsAndWallets.wallets.find((item: any) => item.type === wallet.type)).map((wallet: any, idx: any) => walletName[wallet.type]?.isActive && (
174
174
  <WalletItem
175
175
  key={wallet.type}
176
176
  isBottomBorder={idx === paymethodsAndWallets.wallets?.length - 1}
@@ -197,40 +197,40 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
197
197
  )}
198
198
 
199
199
  <OModal
200
- entireModal
201
- title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
202
- open={addCardOpen.stripe}
203
- onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
204
- style={{ backgroundColor: 'red' }}
205
- >
206
- <KeyboardAvoidingView
207
- behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
208
- keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
209
- enabled={Platform.OS === 'ios' ? true : false}
210
- >
211
- <StripeElementsForm
212
- toSave
213
- businessId={businessIds[0]}
200
+ entireModal
201
+ title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
202
+ open={addCardOpen.stripe}
203
+ onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
204
+ style={{ backgroundColor: 'red' }}
205
+ >
206
+ <KeyboardAvoidingView
207
+ behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
208
+ keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
209
+ enabled={Platform.OS === 'ios' ? true : false}
210
+ >
211
+ <StripeElementsForm
212
+ toSave
213
+ businessId={businessIds[0]}
214
214
  businessIds={businessIds}
215
215
  publicKey={paymethodSelected?.data?.publishable}
216
- requirements={props.clientSecret}
217
- onSelectCard={handlePaymethodDataChange}
218
- onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
219
- />
220
- </KeyboardAvoidingView>
221
- </OModal>
216
+ requirements={props.clientSecret}
217
+ onSelectCard={handlePaymethodDataChange}
218
+ onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
219
+ />
220
+ </KeyboardAvoidingView>
221
+ </OModal>
222
222
  </PMContainer>
223
223
  )
224
224
  }
225
225
 
226
226
  const styles = StyleSheet.create({
227
- btnAddStyle: {
228
- marginVertical: 20,
229
- borderRadius: 7.6,
230
- shadowOpacity: 0,
231
- height: 44,
232
- borderWidth: 1
233
- },
227
+ btnAddStyle: {
228
+ marginVertical: 20,
229
+ borderRadius: 7.6,
230
+ shadowOpacity: 0,
231
+ height: 44,
232
+ borderWidth: 1
233
+ },
234
234
  })
235
235
 
236
236
 
@@ -79,6 +79,7 @@ const MultiCheckoutUI = (props: any) => {
79
79
  const isPreOrder = configs?.preorder_status_enabled?.value === '1'
80
80
  const maximumCarts = 5
81
81
  const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || openCarts.length > maximumCarts
82
+ const walletCarts = (Object.values(carts)?.filter((cart: any) => cart?.products && cart?.products?.length && cart?.status !== 2 && cart?.valid_schedule && cart?.valid_products && cart?.valid_address && cart?.valid_maximum && cart?.valid_minimum && cart?.wallets) || null) || []
82
83
 
83
84
  const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
84
85
  const [phoneUpdate, setPhoneUpdate] = useState(false);
@@ -253,6 +254,11 @@ const MultiCheckoutUI = (props: any) => {
253
254
  </OText>
254
255
  </CCNotCarts>
255
256
  )}
257
+ {walletCarts.length > 0 && (
258
+ <OText size={14} color={theme.colors.danger5} style={{ marginVertical: 20 }}>
259
+ {t('WARNING_PARTIAL_WALLET_CARTS', 'Important: One or more carts can`t be completed due a partial payment with cash/points wallet and requires to be paid individually')}
260
+ </OText>
261
+ )}
256
262
  {openCarts.length > 0 && (
257
263
  <ChCartsTotal>
258
264
  <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
@@ -1,11 +1,12 @@
1
1
  import React, { useEffect } from 'react'
2
- import { useLanguage, useUtils, useToast, ToastType, MultiOrdersDetails as MultiOrdersDetailsController } from 'ordering-components/native'
3
- import { View, StyleSheet, BackHandler } from 'react-native'
2
+ import { useLanguage, useUtils, useToast, ToastType, MultiOrdersDetails as MultiOrdersDetailsController } from 'ordering-components/native'
3
+ import { View, StyleSheet, BackHandler, TouchableOpacity } from 'react-native'
4
4
  import { useTheme } from 'styled-components/native'
5
5
  import { OText, OButton } from '../shared'
6
6
  import { Container } from '../../layouts/Container'
7
7
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
8
8
  import { SingleOrderCard } from './SingleOrderCard'
9
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
9
10
 
10
11
  import {
11
12
  OrdersDetailsContainer,
@@ -29,20 +30,20 @@ export const MultiOrdersDetailsUI = (props: any) => {
29
30
  } = props
30
31
 
31
32
  const theme = useTheme()
32
- const styles = StyleSheet.create({
33
+ const styles = StyleSheet.create({
33
34
  btnBackArrow: {
34
- borderWidth: 0,
35
- backgroundColor: theme.colors.clear,
36
- shadowColor: theme.colors.clear,
37
- padding: 0,
35
+ borderWidth: 0,
36
+ backgroundColor: theme.colors.clear,
37
+ shadowColor: theme.colors.clear,
38
+ padding: 0,
38
39
  marginLeft: -20
39
- },
40
- })
41
-
40
+ },
41
+ })
42
+
42
43
  const { loading, orders, error } = props.ordersList
43
44
  const [, t] = useLanguage()
44
45
  const [{ parsePrice, parseNumber, parseDate }] = useUtils();
45
- const [, { showToast }] = useToast();
46
+ const [, { showToast }] = useToast();
46
47
 
47
48
  const walletName: any = {
48
49
  cash: {
@@ -60,7 +61,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
60
61
  }
61
62
  navigation.navigate('BusinessList');
62
63
  return true
63
- }
64
+ }
64
65
 
65
66
  const handleGoToOrderDetails = (uuid: any) => {
66
67
  navigation.navigate('OrderDetails', { orderId: uuid })
@@ -68,7 +69,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
68
69
 
69
70
  useEffect(() => {
70
71
  if (error) {
71
- showToast(ToastType.Error, error)
72
+ showToast(ToastType.Error, error)
72
73
  }
73
74
  }, [error])
74
75
 
@@ -83,11 +84,14 @@ export const MultiOrdersDetailsUI = (props: any) => {
83
84
  <OrdersDetailsContainer keyboardShouldPersistTaps="handled" contentContainerStyle={{ paddingHorizontal: 40 }}>
84
85
  <View style={{ flexDirection: 'row' }}>
85
86
  <OButton
86
- imgLeftSrc={theme.images.general.arrow_left}
87
87
  imgRightSrc={null}
88
88
  style={styles.btnBackArrow}
89
89
  onClick={() => handleArrowBack()}
90
- imgLeftStyle={{ tintColor: theme.colors.textNormal, width: 16 }}
90
+ icon={AntDesignIcon}
91
+ iconProps={{
92
+ name: 'arrowleft',
93
+ size: 26
94
+ }}
91
95
  />
92
96
  </View>
93
97
  <Header>
@@ -202,7 +206,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
202
206
  </Row>
203
207
  <Row>
204
208
  <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
205
- {t('ESTIMATED_TAX_TO_BE_COLLECTED', 'Estimated tax to be collected')}:
209
+ {t('ESTIMATED_TAX_TO_BE_COLLECTED', 'Estimated tax to be collected')}:
206
210
  </OText>
207
211
  <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
208
212
  {parsePrice(ordersSummary?.tax)}
@@ -1,9 +1,10 @@
1
1
  import React, { useState, useEffect } from 'react'
2
2
  import { useLanguage } from 'ordering-components/native';
3
- import { View, StyleSheet, RefreshControl } from 'react-native';
3
+ import { View, StyleSheet, RefreshControl, Platform } from 'react-native';
4
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
4
5
 
5
6
  import { OrdersOption } from '../OrdersOption'
6
- import { HeaderTitle, OText } from '../shared'
7
+ import { HeaderTitle, OButton, OText } from '../shared'
7
8
  import { ScrollView } from 'react-native-gesture-handler';
8
9
  import { Tab } from './styles'
9
10
  import { useTheme } from 'styled-components/native';
@@ -11,6 +12,7 @@ import { Container } from '../../layouts/Container';
11
12
 
12
13
  export const MyOrders = (props: any) => {
13
14
  const {
15
+ navigation,
14
16
  hideOrders,
15
17
  businessesSearchList
16
18
  } = props
@@ -33,6 +35,10 @@ export const MyOrders = (props: any) => {
33
35
  { key: 'business', value: t('BUSINESS', 'Business') },
34
36
  { key: 'products', value: t('PRODUCTS', 'Products') }
35
37
  ]
38
+ const isChewLayout = theme?.business_view?.components?.header?.components?.layout?.type === 'chew'
39
+ const showNavbar = theme?.bar_menu?.components?.orders?.hidden
40
+
41
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
36
42
 
37
43
  const handleOnRefresh = () => {
38
44
  setRefreshOrders(true);
@@ -67,7 +73,48 @@ export const MyOrders = (props: any) => {
67
73
  onRefresh={() => handleOnRefresh()}
68
74
  />
69
75
  }>
70
- {!hideOrders && (
76
+ {(isChewLayout || showNavbar) && (
77
+ <View style={{
78
+ width: '100%',
79
+ display: 'flex',
80
+ flexDirection: 'row',
81
+ alignItems: 'center',
82
+ paddingHorizontal: 40,
83
+ marginTop: Platform.OS === 'android' ? 50 : 30,
84
+ }}>
85
+ <OButton
86
+ imgLeftStyle={{ width: 18 }}
87
+ imgRightSrc={null}
88
+ style={{
89
+ borderWidth: 0,
90
+ width: 26,
91
+ height: 26,
92
+ backgroundColor: '#FFF',
93
+ borderColor: '#FFF',
94
+ shadowColor: '#FFF',
95
+ paddingLeft: 0,
96
+ paddingRight: 0
97
+ }}
98
+ onClick={goToBack}
99
+ icon={AntDesignIcon}
100
+ iconProps={{
101
+ name: 'arrowleft',
102
+ size: 26
103
+ }}
104
+ />
105
+ <OText
106
+ size={24}
107
+ style={{
108
+ textTransform: 'capitalize',
109
+ marginLeft: 20,
110
+ top: 2
111
+ }}
112
+ >
113
+ {t('MY_ORDERS', 'My Orders')}
114
+ </OText>
115
+ </View>
116
+ )}
117
+ {!hideOrders && !isChewLayout && !showNavbar && (
71
118
  <HeaderTitle text={t('MY_ORDERS', 'My Orders')} />
72
119
  )}
73
120
  {!allEmpty && (
@@ -119,14 +166,31 @@ export const MyOrders = (props: any) => {
119
166
  </View>
120
167
  </>
121
168
  )}
122
- {notOrderOptions.includes(selectedOption) && (
169
+ {selectedOption === 'business' && (
170
+ <OrdersOption
171
+ {...props}
172
+ isBusiness
173
+ titleContent={t('PREVIOUSLY_ORDERED', 'Previously ordered')}
174
+ hideOrders
175
+ horizontal
176
+ activeOrders
177
+ pastOrders
178
+ preOrders
179
+ businessesSearchList={businessesSearchList}
180
+ setIsEmptyBusinesses={setIsEmptyBusinesses}
181
+ businessOrderIds={businessOrderIds}
182
+ setBusinessOrderIds={setBusinessOrderIds}
183
+ ordersLength={ordersLength}
184
+ setOrdersLength={setOrdersLength}
185
+ />
186
+ )}
187
+ {selectedOption === 'products' && (
123
188
  <OrdersOption
124
189
  {...props}
190
+ isProducts
125
191
  titleContent={t('PREVIOUSLY_ORDERED', 'Previously ordered')}
126
192
  hideOrders
127
193
  horizontal
128
- isBusiness={selectedOption === 'business'}
129
- isProducts={selectedOption === 'products'}
130
194
  activeOrders
131
195
  pastOrders
132
196
  preOrders