ordering-ui-react-native 0.17.53 → 0.17.54-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.
- package/package.json +8 -7
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/OrderCreating/index.tsx +1 -21
- package/src/components/PaymentOptionsWebView/index.tsx +29 -8
- package/src/components/PhoneInputNumber/index.tsx +6 -2
- package/src/components/StripeMethodForm/index.tsx +136 -102
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OToast.tsx +4 -4
- package/src/types/index.tsx +5 -0
- package/src/utils/index.tsx +5 -0
- package/themes/business/index.tsx +2 -0
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
- package/themes/business/src/components/BusinessController/index.tsx +0 -1
- package/themes/business/src/components/Chat/index.tsx +125 -113
- package/themes/business/src/components/DriverMap/index.tsx +17 -6
- package/themes/business/src/components/DriverSchedule/index.tsx +29 -2
- package/themes/business/src/components/GoogleMap/index.tsx +58 -57
- package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
- package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
- package/themes/business/src/components/LoginForm/index.tsx +238 -80
- package/themes/business/src/components/LoginForm/styles.tsx +10 -0
- package/themes/business/src/components/MapView/index.tsx +10 -10
- package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
- package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +93 -50
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +63 -62
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
- package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
- package/themes/business/src/components/OrderMessage/index.tsx +18 -17
- package/themes/business/src/components/OrderSummary/index.tsx +113 -121
- package/themes/business/src/components/OrdersOption/index.tsx +32 -75
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +249 -0
- package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
- package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
- package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
- package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
- package/themes/business/src/components/ReviewCustomer/index.tsx +30 -15
- package/themes/business/src/components/StoresList/index.tsx +2 -2
- package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
- package/themes/business/src/components/shared/OLink.tsx +33 -13
- package/themes/business/src/components/shared/OModal.tsx +16 -9
- package/themes/business/src/components/shared/OText.tsx +8 -2
- package/themes/business/src/types/index.tsx +32 -2
- package/themes/business/src/utils/index.tsx +44 -1
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
- package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
- package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
- package/themes/kiosk/src/components/LoginForm/index.tsx +480 -156
- package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
- package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
- package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
- package/themes/kiosk/src/layouts/Container.tsx +7 -1
- package/themes/kiosk/src/types/index.d.ts +13 -0
- package/themes/kiosk/src/utils/index.tsx +15 -0
- package/themes/original/index.tsx +4 -0
- package/themes/original/src/components/AddressDetails/index.tsx +28 -10
- package/themes/original/src/components/AddressForm/index.tsx +68 -40
- package/themes/original/src/components/AddressList/index.tsx +27 -22
- package/themes/original/src/components/AddressList/styles.tsx +4 -2
- package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +152 -95
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -7
- package/themes/original/src/components/BusinessController/index.tsx +122 -68
- package/themes/original/src/components/BusinessController/styles.tsx +23 -4
- package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
- package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
- package/themes/original/src/components/BusinessInformation/index.tsx +110 -108
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
- package/themes/original/src/components/BusinessListingSearch/index.tsx +352 -326
- package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
- package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
- package/themes/original/src/components/BusinessProductsList/index.tsx +25 -15
- package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
- package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
- package/themes/original/src/components/BusinessProductsListing/index.tsx +668 -514
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
- package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +97 -91
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -4
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +77 -50
- package/themes/original/src/components/CartContent/index.tsx +115 -19
- package/themes/original/src/components/CartContent/styles.tsx +17 -7
- package/themes/original/src/components/Checkout/index.tsx +359 -171
- package/themes/original/src/components/Checkout/styles.tsx +4 -2
- package/themes/original/src/components/CitiesControl/index.tsx +89 -0
- package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
- package/themes/original/src/components/CouponControl/index.tsx +10 -3
- package/themes/original/src/components/DriverTips/index.tsx +52 -34
- package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
- package/themes/original/src/components/Favorite/index.tsx +8 -9
- package/themes/original/src/components/Favorite/styles.tsx +1 -1
- package/themes/original/src/components/FavoriteList/index.tsx +51 -80
- package/themes/original/src/components/FloatingButton/index.tsx +1 -2
- package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
- package/themes/original/src/components/GPSButton/index.tsx +6 -4
- package/themes/original/src/components/GPSButton/styles.ts +3 -3
- package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
- package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
- package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
- package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
- package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
- package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
- package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
- package/themes/original/src/components/GoogleMap/index.tsx +15 -4
- package/themes/original/src/components/Help/index.tsx +8 -8
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
- package/themes/original/src/components/HelpGuide/index.tsx +6 -6
- package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
- package/themes/original/src/components/HelpOrder/index.tsx +6 -15
- package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
- package/themes/original/src/components/Home/index.tsx +13 -4
- package/themes/original/src/components/LastOrder/index.tsx +1 -34
- package/themes/original/src/components/LoginForm/Otp/index.tsx +55 -13
- package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
- package/themes/original/src/components/LoginForm/index.tsx +64 -26
- package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
- package/themes/original/src/components/MessageListing/index.tsx +16 -42
- package/themes/original/src/components/Messages/index.tsx +32 -10
- package/themes/original/src/components/MomentOption/index.tsx +195 -88
- package/themes/original/src/components/MultiCart/index.tsx +50 -0
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +151 -49
- package/themes/original/src/components/MultiCheckout/index.tsx +308 -88
- package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
- package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
- package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
- package/themes/original/src/components/MyOrders/index.tsx +77 -52
- package/themes/original/src/components/NavBar/index.tsx +18 -18
- package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
- package/themes/original/src/components/Notifications/index.tsx +46 -50
- package/themes/original/src/components/Notifications/styles.tsx +6 -3
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
- package/themes/original/src/components/OrderDetails/index.tsx +190 -358
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
- package/themes/original/src/components/OrderProgress/index.tsx +33 -59
- package/themes/original/src/components/OrderSummary/index.tsx +85 -57
- package/themes/original/src/components/OrderTypeSelector/index.tsx +1 -1
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
- package/themes/original/src/components/OrdersOption/index.tsx +76 -66
- package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
- package/themes/original/src/components/PageBanner/index.tsx +107 -40
- package/themes/original/src/components/PageBanner/styles.tsx +4 -1
- package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
- package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +64 -7
- package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
- package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
- package/themes/original/src/components/ProductForm/index.tsx +109 -33
- package/themes/original/src/components/ProductForm/styles.tsx +5 -7
- package/themes/original/src/components/ProductItemAccordion/index.tsx +22 -19
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +24 -14
- package/themes/original/src/components/ProductOptionSubOption/styles.tsx +3 -4
- package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
- package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
- package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
- package/themes/original/src/components/Promotions/index.tsx +234 -220
- package/themes/original/src/components/Promotions/styles.tsx +10 -3
- package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
- package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
- package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
- package/themes/original/src/components/ReviewProducts/index.tsx +23 -11
- package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
- package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
- package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
- package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
- package/themes/original/src/components/ServiceForm/index.tsx +66 -17
- package/themes/original/src/components/Sessions/index.tsx +11 -8
- package/themes/original/src/components/Sessions/styles.tsx +5 -0
- package/themes/original/src/components/SignupForm/index.tsx +43 -20
- package/themes/original/src/components/SingleOrderCard/index.tsx +130 -52
- package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
- package/themes/original/src/components/SingleProductCard/index.tsx +71 -34
- package/themes/original/src/components/SingleProductCard/styles.tsx +21 -4
- package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
- package/themes/original/src/components/StripeCardsList/index.tsx +13 -3
- package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
- package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
- package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
- package/themes/original/src/components/UserDetails/index.tsx +8 -4
- package/themes/original/src/components/UserFormDetails/index.tsx +76 -7
- package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
- package/themes/original/src/components/UserProfile/index.tsx +88 -79
- package/themes/original/src/components/UserProfileForm/index.tsx +27 -29
- package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
- package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
- package/themes/original/src/components/Wallets/index.tsx +67 -24
- package/themes/original/src/components/Wallets/styles.tsx +3 -4
- package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
- package/themes/original/src/components/shared/OButton.tsx +6 -2
- package/themes/original/src/components/shared/OInput.tsx +6 -1
- package/themes/original/src/components/shared/OModal.tsx +3 -3
- package/themes/original/src/layouts/Container.tsx +1 -1
- package/themes/original/src/types/index.tsx +40 -11
- package/themes/original/src/utils/index.tsx +375 -58
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -18,8 +18,11 @@ import {
|
|
|
18
18
|
useOrder,
|
|
19
19
|
useUtils,
|
|
20
20
|
ToastType,
|
|
21
|
-
useToast
|
|
21
|
+
useToast,
|
|
22
|
+
useConfig,
|
|
23
|
+
useEvent
|
|
22
24
|
} from 'ordering-components/native';
|
|
25
|
+
import uuid from 'react-native-uuid';
|
|
23
26
|
import { useTheme } from 'styled-components/native';
|
|
24
27
|
import { ProductIngredient } from '../ProductIngredient';
|
|
25
28
|
import { ProductOption } from '../ProductOption';
|
|
@@ -27,6 +30,7 @@ import Swiper from 'react-native-swiper'
|
|
|
27
30
|
import FastImage from 'react-native-fast-image';
|
|
28
31
|
import IconAntDesign from 'react-native-vector-icons/AntDesign';
|
|
29
32
|
import YoutubePlayer from "react-native-youtube-iframe"
|
|
33
|
+
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
|
30
34
|
|
|
31
35
|
import {
|
|
32
36
|
WrapHeader,
|
|
@@ -50,6 +54,8 @@ import { ScrollView } from 'react-native-gesture-handler';
|
|
|
50
54
|
import { ProductOptionSubOption } from '../ProductOptionSubOption';
|
|
51
55
|
import { NotFoundSource } from '../NotFoundSource';
|
|
52
56
|
import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
|
|
57
|
+
import NavBar from '../NavBar';
|
|
58
|
+
import { orderTypeList, vibrateApp } from '../../utils';
|
|
53
59
|
const windowWidth = Dimensions.get('window').width;
|
|
54
60
|
|
|
55
61
|
export const ProductOptionsUI = (props: any) => {
|
|
@@ -69,11 +75,16 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
69
75
|
handleChangeSuboptionState,
|
|
70
76
|
handleChangeCommentState,
|
|
71
77
|
productObject,
|
|
72
|
-
productAddedToCartLength
|
|
78
|
+
productAddedToCartLength,
|
|
79
|
+
actionStatus,
|
|
80
|
+
handleCreateGuestUser
|
|
73
81
|
} = props;
|
|
74
82
|
|
|
75
83
|
const theme = useTheme();
|
|
76
84
|
const [, { showToast }] = useToast()
|
|
85
|
+
const [events] = useEvent()
|
|
86
|
+
|
|
87
|
+
const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
|
|
77
88
|
|
|
78
89
|
const styles = StyleSheet.create({
|
|
79
90
|
mainContainer: {
|
|
@@ -163,6 +174,10 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
163
174
|
justifyContent: 'space-between',
|
|
164
175
|
width: '100%',
|
|
165
176
|
marginTop: 10
|
|
177
|
+
},
|
|
178
|
+
wrapperNavbar: {
|
|
179
|
+
paddingHorizontal: 40,
|
|
180
|
+
paddingTop: 0,
|
|
166
181
|
}
|
|
167
182
|
});
|
|
168
183
|
|
|
@@ -170,6 +185,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
170
185
|
const [, t] = useLanguage();
|
|
171
186
|
const [orderState] = useOrder();
|
|
172
187
|
const [{ auth }] = useSession();
|
|
188
|
+
const [{ configs }] = useConfig()
|
|
173
189
|
const { product, loading, error } = productObject;
|
|
174
190
|
const [gallery, setGallery] = useState([])
|
|
175
191
|
const [thumbsSwiper, setThumbsSwiper] = useState(0)
|
|
@@ -189,6 +205,19 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
189
205
|
const [summaryRefHeight, setSummaryRefHeight] = useState(0)
|
|
190
206
|
const [isScrollAvailable, setIsScrollAvailable] = useState(null)
|
|
191
207
|
const [editionsLayoutY, setEditionsLayoutY] = useState(null)
|
|
208
|
+
const [viewedProduct, setViewedProduct] = useState<any>(null)
|
|
209
|
+
const [showTitle, setShowTitle] = useState(false)
|
|
210
|
+
|
|
211
|
+
const guestCheckoutEnabled = configs?.guest_checkout_enabled?.value === '1'
|
|
212
|
+
const orderTypeEnabled = !orderTypeList[orderState?.options?.type - 1] || configs?.allowed_order_types_guest_checkout?.value?.includes(orderTypeList[orderState?.options?.type - 1])
|
|
213
|
+
|
|
214
|
+
const vibrateApp = (impact?: string) => {
|
|
215
|
+
const options = {
|
|
216
|
+
enableVibrateFallback: true,
|
|
217
|
+
ignoreAndroidSystemSettings: false
|
|
218
|
+
};
|
|
219
|
+
ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
|
|
220
|
+
}
|
|
192
221
|
|
|
193
222
|
const isError = (id: number) => {
|
|
194
223
|
let bgColor = theme.colors.white;
|
|
@@ -205,11 +234,12 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
205
234
|
};
|
|
206
235
|
|
|
207
236
|
const handleSaveProduct = () => {
|
|
237
|
+
vibrateApp()
|
|
208
238
|
if (!productCart.quantity) {
|
|
209
239
|
showToast(ToastType.Error, t('VALIDATION_ERROR_REQUIRED', 'The quantity field is required').replace('_attribute_', t('PRODUCT_POTIONS_QUANTITY', 'Quantity')))
|
|
210
240
|
return
|
|
211
241
|
}
|
|
212
|
-
const isErrors = Object.values(errors)
|
|
242
|
+
const isErrors = Object.values(errors)?.length > 0;
|
|
213
243
|
if (!isErrors) {
|
|
214
244
|
handleSave && handleSave();
|
|
215
245
|
return;
|
|
@@ -228,7 +258,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
228
258
|
};
|
|
229
259
|
|
|
230
260
|
const handleChangeMainIndex = (index: number) => {
|
|
231
|
-
if (index < 0 || index > gallery
|
|
261
|
+
if (index < 0 || index > gallery?.length - 1) {
|
|
232
262
|
setThumbsSwiper(0)
|
|
233
263
|
return
|
|
234
264
|
}
|
|
@@ -271,7 +301,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
271
301
|
}
|
|
272
302
|
|
|
273
303
|
const scrollDown = (id: any) => {
|
|
274
|
-
const isErrors = Object.values(errors)
|
|
304
|
+
const isErrors = Object.values(errors)?.length > 0
|
|
275
305
|
if (!isErrors) {
|
|
276
306
|
return
|
|
277
307
|
}
|
|
@@ -285,6 +315,11 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
285
315
|
}
|
|
286
316
|
}
|
|
287
317
|
|
|
318
|
+
const handleUpdateGuest = () => {
|
|
319
|
+
const guestToken = uuid.v4()
|
|
320
|
+
if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
|
|
321
|
+
}
|
|
322
|
+
|
|
288
323
|
const handleOnLayout = (event: any, optionId: any) => {
|
|
289
324
|
const _optionLayout = { ...optionLayout }
|
|
290
325
|
const optionKey = 'id:' + optionId
|
|
@@ -295,9 +330,9 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
295
330
|
const saveErrors =
|
|
296
331
|
orderState.loading ||
|
|
297
332
|
maxProductQuantity === 0 ||
|
|
298
|
-
Object.keys(errors)
|
|
333
|
+
Object.keys(errors)?.length > 0;
|
|
334
|
+
|
|
299
335
|
|
|
300
|
-
|
|
301
336
|
const ExtraOptions = ({ eID, options }: any) => (
|
|
302
337
|
<>
|
|
303
338
|
{options.map(({ id, name, respect_to, suboptions }: any) => (
|
|
@@ -337,7 +372,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
337
372
|
);
|
|
338
373
|
|
|
339
374
|
const handleScroll = ({ nativeEvent: { contentOffset, layoutMeasurement } }: any) => {
|
|
340
|
-
|
|
375
|
+
setShowTitle(contentOffset.y > 30)
|
|
341
376
|
const _topOption = Object.keys(optionLayout).find(((option: any) => Math.abs(contentOffset?.y - layoutMeasurement?.height - optionLayout[option]?.y) < 20))
|
|
342
377
|
if (_topOption) {
|
|
343
378
|
const _topOptionId = Number(_topOption.replace('id:', ''))
|
|
@@ -358,15 +393,18 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
358
393
|
useEffect(() => {
|
|
359
394
|
const imageList: any = []
|
|
360
395
|
const videoList: any = []
|
|
361
|
-
product?.images?.length > 0
|
|
362
|
-
|
|
396
|
+
imageList.push(product?.images?.length > 0
|
|
397
|
+
? product.images
|
|
398
|
+
: theme?.images?.dummies?.product)
|
|
399
|
+
|
|
400
|
+
if (product?.gallery && product?.gallery?.length > 0) {
|
|
363
401
|
for (const img of product?.gallery) {
|
|
364
402
|
if (img?.file) {
|
|
365
403
|
imageList.push(img?.file)
|
|
366
404
|
}
|
|
367
405
|
if (img?.video) {
|
|
368
406
|
const keys = img?.video.split('/')
|
|
369
|
-
let _videoId = keys[keys
|
|
407
|
+
let _videoId = keys[keys?.length - 1]
|
|
370
408
|
|
|
371
409
|
if (_videoId.includes('watch')) {
|
|
372
410
|
const __url = _videoId.split('=')[1]
|
|
@@ -381,7 +419,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
381
419
|
} else if (_videoId.search(/\?/i) >= 0) {
|
|
382
420
|
_videoId = _videoId.split('?')[0]
|
|
383
421
|
}
|
|
384
|
-
if ((_videoId
|
|
422
|
+
if ((_videoId?.length === 11)) {
|
|
385
423
|
videoList.push(_videoId)
|
|
386
424
|
}
|
|
387
425
|
}
|
|
@@ -460,9 +498,22 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
460
498
|
height: 44,
|
|
461
499
|
borderColor: theme.colors.primary,
|
|
462
500
|
backgroundColor: theme.colors.white,
|
|
501
|
+
paddingLeft: 0,
|
|
502
|
+
paddingRight: 0
|
|
463
503
|
}}
|
|
464
504
|
/>
|
|
465
505
|
)}
|
|
506
|
+
{!auth && guestCheckoutEnabled && orderTypeEnabled && (
|
|
507
|
+
<TouchableOpacity style={{ marginTop: 10 }} onPress={handleUpdateGuest}>
|
|
508
|
+
{actionStatus?.loading ? (
|
|
509
|
+
<Placeholder Animation={Fade}>
|
|
510
|
+
<PlaceholderLine width={60} height={20} />
|
|
511
|
+
</Placeholder>
|
|
512
|
+
) : (
|
|
513
|
+
<OText color={theme.colors.primary} size={13}>{t('WITH_GUEST_USER', 'With Guest user')}</OText>
|
|
514
|
+
)}
|
|
515
|
+
</TouchableOpacity>
|
|
516
|
+
)}
|
|
466
517
|
</View>
|
|
467
518
|
)
|
|
468
519
|
}
|
|
@@ -476,14 +527,34 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
476
527
|
}
|
|
477
528
|
}, [])
|
|
478
529
|
|
|
530
|
+
useEffect(() => {
|
|
531
|
+
if (!product?.id || product?.id === viewedProduct?.id) return
|
|
532
|
+
setViewedProduct(product)
|
|
533
|
+
events.emit('product_viewed', product)
|
|
534
|
+
}, [product?.id, viewedProduct])
|
|
479
535
|
|
|
480
536
|
return (
|
|
481
537
|
<SafeAreaView style={{ flex: 1 }}>
|
|
482
|
-
<
|
|
483
|
-
<
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
538
|
+
<View style={styles.wrapperNavbar}>
|
|
539
|
+
<TopHeader>
|
|
540
|
+
<>
|
|
541
|
+
<TopActions onPress={() => handleGoBack()}>
|
|
542
|
+
<OIcon src={theme.images.general.arrow_left} color={theme.colors.textNormal} />
|
|
543
|
+
</TopActions>
|
|
544
|
+
{showTitle && (
|
|
545
|
+
<OText
|
|
546
|
+
size={16}
|
|
547
|
+
style={{ flex: 1, textAlign: 'center' }}
|
|
548
|
+
weight={Platform.OS === 'ios' ? '600' : 'bold'}
|
|
549
|
+
numberOfLines={2}
|
|
550
|
+
ellipsizeMode='tail'
|
|
551
|
+
>
|
|
552
|
+
{product?.name}
|
|
553
|
+
</OText>
|
|
554
|
+
)}
|
|
555
|
+
</>
|
|
556
|
+
</TopHeader>
|
|
557
|
+
</View>
|
|
487
558
|
{!error && (
|
|
488
559
|
<ScrollView
|
|
489
560
|
ref={scrollViewRef}
|
|
@@ -532,14 +603,14 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
532
603
|
</View>
|
|
533
604
|
}
|
|
534
605
|
>
|
|
535
|
-
{gallery && gallery
|
|
606
|
+
{gallery && gallery?.length > 0 && gallery.map((img, i) => (
|
|
536
607
|
<View
|
|
537
608
|
style={styles.slide1}
|
|
538
609
|
key={i}
|
|
539
610
|
>
|
|
540
|
-
{String(img).includes('
|
|
611
|
+
{(String(img).includes('http') || typeof img === 'number') ? (
|
|
541
612
|
<FastImage
|
|
542
|
-
style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio:
|
|
613
|
+
style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio: 16 / 9 }}
|
|
543
614
|
source={typeof img !== 'number' ? {
|
|
544
615
|
uri: optimizeImage(img, 'h_1024,c_limit'),
|
|
545
616
|
priority: FastImage.priority.normal,
|
|
@@ -548,7 +619,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
548
619
|
) : (
|
|
549
620
|
<>
|
|
550
621
|
<YoutubePlayer
|
|
551
|
-
height={
|
|
622
|
+
height={'100%'}
|
|
623
|
+
width={'100%'}
|
|
552
624
|
play={playing}
|
|
553
625
|
videoId={img}
|
|
554
626
|
onChangeState={onStateChange}
|
|
@@ -566,7 +638,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
566
638
|
paddingVertical: 15
|
|
567
639
|
}}
|
|
568
640
|
>
|
|
569
|
-
{gallery
|
|
641
|
+
{gallery?.length > 1 && gallery.map((img, index) => (
|
|
570
642
|
<TouchableOpacity
|
|
571
643
|
key={index}
|
|
572
644
|
onPress={() => handleClickThumb(index)}
|
|
@@ -579,7 +651,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
579
651
|
opacity: index === thumbsSwiper ? 1 : 0.8
|
|
580
652
|
}}
|
|
581
653
|
>
|
|
582
|
-
{String(img).includes('
|
|
654
|
+
{String(img).includes('http') ? (
|
|
583
655
|
<OIcon
|
|
584
656
|
url={img}
|
|
585
657
|
style={{
|
|
@@ -594,7 +666,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
594
666
|
/>
|
|
595
667
|
) : (
|
|
596
668
|
<OIcon
|
|
597
|
-
url={'
|
|
669
|
+
url={'https://img.youtube.com/vi/' + img + '/0.jpg'}
|
|
598
670
|
style={{
|
|
599
671
|
borderColor: theme.colors.lightGray,
|
|
600
672
|
borderRadius: 8,
|
|
@@ -614,7 +686,10 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
614
686
|
</>
|
|
615
687
|
)}
|
|
616
688
|
</WrapHeader>
|
|
617
|
-
<ProductSummary
|
|
689
|
+
<ProductSummary
|
|
690
|
+
ph={isChewLayout ? 20 : 40}
|
|
691
|
+
onLayout={(event: any) => setSummaryRefHeight(event.nativeEvent.layout?.height)}
|
|
692
|
+
>
|
|
618
693
|
<ProductTitle>
|
|
619
694
|
{loading && !product ? (
|
|
620
695
|
<Placeholder Animation={Fade}>
|
|
@@ -714,11 +789,11 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
714
789
|
marginBottom: 20,
|
|
715
790
|
borderBottomWidth: 1,
|
|
716
791
|
borderBottomColor: theme.colors.border,
|
|
717
|
-
marginHorizontal: 30,
|
|
792
|
+
marginHorizontal: isChewLayout ? 20 : 30,
|
|
718
793
|
backgroundColor: theme.colors.backgroundPage,
|
|
719
794
|
}}
|
|
720
795
|
>
|
|
721
|
-
{product?.ingredients
|
|
796
|
+
{product?.ingredients?.length > 0 && (
|
|
722
797
|
<TouchableOpacity
|
|
723
798
|
key={`eopt_key_01`}
|
|
724
799
|
onPress={() => {
|
|
@@ -743,7 +818,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
743
818
|
</OText>
|
|
744
819
|
</TouchableOpacity>
|
|
745
820
|
)}
|
|
746
|
-
{product?.extras
|
|
821
|
+
{product?.extras?.map((extra: any) =>
|
|
747
822
|
<ExtraOptions key={extra.id} options={extra.options} />
|
|
748
823
|
)}
|
|
749
824
|
</ExtraOptionWrap>
|
|
@@ -788,12 +863,13 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
788
863
|
</>
|
|
789
864
|
) : (
|
|
790
865
|
<ProductEditions
|
|
866
|
+
style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}
|
|
791
867
|
onLayout={(event: any) => {
|
|
792
868
|
setEditionsLayoutY(event.nativeEvent.layout?.y)
|
|
793
869
|
}}
|
|
794
870
|
>
|
|
795
871
|
<>
|
|
796
|
-
{product?.ingredients
|
|
872
|
+
{product?.ingredients?.length > 0 && (
|
|
797
873
|
<View style={styles.optionContainer} onLayout={(event: any) => handleOnLayout(event, 0)}>
|
|
798
874
|
<SectionTitle>
|
|
799
875
|
<OText size={16}>
|
|
@@ -815,8 +891,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
815
891
|
</WrapperIngredients>
|
|
816
892
|
</View>
|
|
817
893
|
)}
|
|
818
|
-
{product?.extras
|
|
819
|
-
extra.options
|
|
894
|
+
{product?.extras?.sort((a: any, b: any) => a.rank - b.rank).map((extra: any) =>
|
|
895
|
+
extra.options?.sort((a: any, b: any) => a.rank - b.rank).map((option: any) => {
|
|
820
896
|
const currentState =
|
|
821
897
|
productCart.options[`id:${option.id}`] || {};
|
|
822
898
|
return (
|
|
@@ -832,7 +908,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
832
908
|
backgroundColor: isError(option.id),
|
|
833
909
|
borderRadius: 7.6
|
|
834
910
|
}}>
|
|
835
|
-
{option
|
|
911
|
+
{option?.suboptions?.sort((a: any, b: any) => a.rank - b.rank).map(
|
|
836
912
|
(suboption: any) => {
|
|
837
913
|
const currentState =
|
|
838
914
|
productCart.options[
|
|
@@ -897,7 +973,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
897
973
|
)}
|
|
898
974
|
</ProductEditions>
|
|
899
975
|
)}
|
|
900
|
-
{!!error && error
|
|
976
|
+
{!!error && error?.length > 0 && (
|
|
901
977
|
<NotFoundSource content={error[0]?.message || error[0]} />
|
|
902
978
|
)}
|
|
903
979
|
</ScrollView>
|
|
@@ -8,8 +8,8 @@ export const WrapHeader = styled.View`
|
|
|
8
8
|
export const TopActions = styled.TouchableOpacity`
|
|
9
9
|
height: 60px;
|
|
10
10
|
justify-content: center;
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
min-width: 30px;
|
|
12
|
+
padding-right: 15px;
|
|
13
13
|
`;
|
|
14
14
|
|
|
15
15
|
export const TopHeader = styled.View`
|
|
@@ -44,12 +44,10 @@ export const ProductTitle = styled.View`
|
|
|
44
44
|
padding-bottom: 7px;
|
|
45
45
|
`
|
|
46
46
|
|
|
47
|
-
export const ProductDescription = styled.View
|
|
48
|
-
margin-bottom: 20px;
|
|
49
|
-
`
|
|
47
|
+
export const ProductDescription = styled.View``
|
|
50
48
|
|
|
51
49
|
export const ProductEditions = styled.View`
|
|
52
|
-
padding: 0
|
|
50
|
+
padding-vertical: 0;
|
|
53
51
|
`
|
|
54
52
|
|
|
55
53
|
export const SectionTitle = styled.View`
|
|
@@ -96,7 +94,7 @@ export const WeightUnitItem = styled.View`
|
|
|
96
94
|
`}
|
|
97
95
|
`
|
|
98
96
|
export const ProductSummary = styled.View`
|
|
99
|
-
padding: 26px
|
|
97
|
+
padding: 26px ${(props: any) => props.ph}px 0;
|
|
100
98
|
position: relative;
|
|
101
99
|
background-color: white;
|
|
102
100
|
z-index: 100;
|
|
@@ -27,6 +27,7 @@ import { ProductItemAccordionParams } from '../../types'
|
|
|
27
27
|
export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
28
28
|
|
|
29
29
|
const {
|
|
30
|
+
isDisabledEdit,
|
|
30
31
|
isCartPending,
|
|
31
32
|
isCartProduct,
|
|
32
33
|
product,
|
|
@@ -76,6 +77,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
76
77
|
const [isServiceOpen, setIsServiceOpen] = useState(false)
|
|
77
78
|
// const [setHeight, setHeightState] = useState({ height: new Animated.Value(0) })
|
|
78
79
|
// const [setRotate, setRotateState] = useState({ angle: new Animated.Value(0) })
|
|
80
|
+
const [productQuantity, setProductQuantity] = useState(product.quantity.toString())
|
|
79
81
|
|
|
80
82
|
const productInfo = () => {
|
|
81
83
|
if (isCartProduct) {
|
|
@@ -106,19 +108,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
106
108
|
/* const toggleAccordion = () => {
|
|
107
109
|
if ((!product?.valid_menu && isCartProduct)) return
|
|
108
110
|
if (isActive) {
|
|
109
|
-
|
|
111
|
+
Animated.timing(setHeight.height, {
|
|
110
112
|
toValue: 100,
|
|
111
113
|
duration: 500,
|
|
112
114
|
easing: Easing.linear,
|
|
113
115
|
useNativeDriver: false,
|
|
114
|
-
|
|
116
|
+
}).start()
|
|
115
117
|
} else {
|
|
116
|
-
|
|
118
|
+
setHeightState({height: new Animated.Value(0)})
|
|
117
119
|
}
|
|
118
120
|
}*/
|
|
119
121
|
|
|
120
122
|
const handleChangeQuantity = (value: string) => {
|
|
121
123
|
if (!orderState.loading) {
|
|
124
|
+
setProductQuantity(value)
|
|
122
125
|
if (parseInt(value) === 0) {
|
|
123
126
|
onDeleteProduct && onDeleteProduct(product)
|
|
124
127
|
} else {
|
|
@@ -133,7 +136,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
/*useEffect(() => {
|
|
136
|
-
|
|
139
|
+
toggleAccordion()
|
|
137
140
|
}, [isActive])*/
|
|
138
141
|
|
|
139
142
|
const productOptions = getProductMax && [...Array(getProductMax(product) + 1),].map((_: any, opt: number) => {
|
|
@@ -203,12 +206,12 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
203
206
|
</View>
|
|
204
207
|
) : (
|
|
205
208
|
<>
|
|
206
|
-
{isCartProduct && !isCartPending && getProductMax && (
|
|
209
|
+
{!isDisabledEdit && isCartProduct && !isCartPending && getProductMax && (
|
|
207
210
|
<ProductInfo>
|
|
208
211
|
<RNPickerSelect
|
|
209
212
|
items={productOptions}
|
|
210
213
|
onValueChange={handleChangeQuantity}
|
|
211
|
-
value={
|
|
214
|
+
value={productQuantity}
|
|
212
215
|
style={pickerStyle}
|
|
213
216
|
useNativeAndroidPickerStyle={false}
|
|
214
217
|
placeholder={{}}
|
|
@@ -225,23 +228,23 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
225
228
|
</ProductQuantity>
|
|
226
229
|
)}
|
|
227
230
|
<View style={{ flex: 1 }}>
|
|
228
|
-
<OText size={12} lineHeight={18} weight={'400'}>{product.name}</OText>
|
|
231
|
+
<OText size={12} lineHeight={18} weight={'400'} mLeft={8}>{product.name}</OText>
|
|
229
232
|
</View>
|
|
230
233
|
</>
|
|
231
234
|
)}
|
|
232
235
|
<View style={{ display: 'flex', flexDirection: 'column', flex: 1, alignItems: 'flex-end', maxWidth: 100 }}>
|
|
233
236
|
<View style={{ flexDirection: 'row' }}>
|
|
234
237
|
<OText size={12} lineHeight={18} weight={'400'}>{parsePrice(product.total || product.price)}</OText>
|
|
235
|
-
{(productInfo().ingredients.length > 0 || productInfo().options.length > 0 || product.comment) && (
|
|
238
|
+
{(productInfo().ingredients.length > 0 || productInfo().options.length > 0 || !!product.comment) && (
|
|
236
239
|
<MaterialCommunityIcon name='chevron-down' size={18} />
|
|
237
240
|
)}
|
|
238
241
|
</View>
|
|
239
|
-
<View style={{ display: 'flex', flexDirection: 'row', justifyContent: 'flex-start' }}>
|
|
240
|
-
{onEditProduct && isCartProduct && !isCartPending && product?.valid_menu && (
|
|
241
|
-
<TouchableOpacity onPress={() => handleEditProduct(product)} style={{
|
|
242
|
-
<
|
|
243
|
-
|
|
244
|
-
|
|
242
|
+
<View style={{ display: 'flex', flexDirection: 'row', justifyContent: 'flex-start', height: 20 }}>
|
|
243
|
+
{!isDisabledEdit && onEditProduct && isCartProduct && !isCartPending && product?.valid_menu && (
|
|
244
|
+
<TouchableOpacity onPress={() => handleEditProduct(product)} style={{ marginRight: 5 }}>
|
|
245
|
+
<MaterialCommunityIcon
|
|
246
|
+
name='pencil-outline'
|
|
247
|
+
size={20}
|
|
245
248
|
color={theme.colors.textSecondary}
|
|
246
249
|
/>
|
|
247
250
|
</TouchableOpacity>
|
|
@@ -252,9 +255,9 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
252
255
|
message={t('QUESTION_DELETE_PRODUCT', 'Are you sure that you want to delete the product?')}
|
|
253
256
|
onAccept={() => onDeleteProduct(product)}
|
|
254
257
|
>
|
|
255
|
-
<
|
|
256
|
-
|
|
257
|
-
|
|
258
|
+
<MaterialCommunityIcon
|
|
259
|
+
name='trash-can-outline'
|
|
260
|
+
size={20}
|
|
258
261
|
color={theme.colors.textSecondary}
|
|
259
262
|
/>
|
|
260
263
|
</OAlert>
|
|
@@ -286,7 +289,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
286
289
|
)}
|
|
287
290
|
{productInfo().options.length > 0 && (
|
|
288
291
|
<ProductOptionsList>
|
|
289
|
-
{productInfo().options.map((option: any, i: number) => (
|
|
292
|
+
{productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any, i: number) => (
|
|
290
293
|
<ProductOption key={option.id + i}>
|
|
291
294
|
<OText size={10} color={theme.colors.textSecondary}>{option.name}</OText>
|
|
292
295
|
{option.suboptions.map((suboption: any) => (
|
|
@@ -305,7 +308,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
305
308
|
))}
|
|
306
309
|
</ProductOptionsList>
|
|
307
310
|
)}
|
|
308
|
-
{product.comment && (
|
|
311
|
+
{!!product.comment && (
|
|
309
312
|
<ProductComment>
|
|
310
313
|
<OText size={10} color={theme.colors.textSecondary}>{t('SPECIAL_COMMENT', 'Special Comment')}</OText>
|
|
311
314
|
<OText size={10} color={theme.colors.textThird}>{product.comment}</OText>
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from 'ordering-components/native'
|
|
7
7
|
import { useTheme } from 'styled-components/native';
|
|
8
8
|
import { StyleSheet, View } from 'react-native'
|
|
9
|
+
import IconAntDesign from 'react-native-vector-icons/AntDesign';
|
|
9
10
|
|
|
10
11
|
import {
|
|
11
12
|
Container,
|
|
@@ -31,15 +32,17 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
31
32
|
setIsScrollAvailable
|
|
32
33
|
} = props
|
|
33
34
|
|
|
34
|
-
const disableIncrement = option?.limit_suboptions_by_max ? balance === option?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
|
|
35
|
+
const disableIncrement = option?.limit_suboptions_by_max ? balance === option?.max || state.quantity === suboption?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
|
|
35
36
|
const price = option?.with_half_option && suboption?.half_price && state.position !== 'whole' ? suboption?.half_price : suboption?.price
|
|
36
|
-
|
|
37
|
+
|
|
37
38
|
const theme = useTheme();
|
|
38
39
|
const [, t] = useLanguage()
|
|
39
40
|
const [{ parsePrice }] = useUtils()
|
|
40
41
|
const [showMessage, setShowMessage] = useState(false)
|
|
41
42
|
const [isDirty, setIsDirty] = useState(false)
|
|
42
43
|
|
|
44
|
+
const iconsSize = 20
|
|
45
|
+
|
|
43
46
|
const handleSuboptionClick = () => {
|
|
44
47
|
toggleSelect()
|
|
45
48
|
setIsDirty(true)
|
|
@@ -64,7 +67,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
64
67
|
|
|
65
68
|
return (
|
|
66
69
|
<View>
|
|
67
|
-
<Container onPress={() => handleSuboptionClick()}>
|
|
70
|
+
<Container onPress={!(option?.with_half_option || option?.allow_suboption_quantity) ? () => handleSuboptionClick() : null}>
|
|
68
71
|
<IconControl disabled={disabled} onPress={() => handleSuboptionClick()}>
|
|
69
72
|
{((option?.min === 0 && option?.max === 1) || option?.max > 1) ? (
|
|
70
73
|
state?.selected ? (
|
|
@@ -87,9 +90,9 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
87
90
|
{option?.allow_suboption_quantity && state?.selected && (
|
|
88
91
|
<>
|
|
89
92
|
<Checkbox disabled={disabled || state.quantity === 0} onPress={decrement}>
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
<IconAntDesign
|
|
94
|
+
name='minuscircleo'
|
|
95
|
+
size={iconsSize}
|
|
93
96
|
color={state.quantity === 0 || disabled ? theme.colors.disabled : theme.colors.primary}
|
|
94
97
|
/>
|
|
95
98
|
</Checkbox>
|
|
@@ -97,9 +100,9 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
97
100
|
{state.quantity}
|
|
98
101
|
</OText>
|
|
99
102
|
<Checkbox disabled={disabled || disableIncrement} onPress={increment}>
|
|
100
|
-
<
|
|
101
|
-
|
|
102
|
-
|
|
103
|
+
<IconAntDesign
|
|
104
|
+
name='pluscircleo'
|
|
105
|
+
size={iconsSize}
|
|
103
106
|
color={disableIncrement || disabled ? theme.colors.disabled : theme.colors.primary}
|
|
104
107
|
/>
|
|
105
108
|
</Checkbox>
|
|
@@ -113,7 +116,8 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
113
116
|
<OIcon
|
|
114
117
|
src={theme.images.general.half_l}
|
|
115
118
|
color={state.selected && state.position === 'left' ? theme.colors.primary : '#cbcbcb'}
|
|
116
|
-
width={
|
|
119
|
+
width={20}
|
|
120
|
+
height={20}
|
|
117
121
|
style={styles.inverse}
|
|
118
122
|
/>
|
|
119
123
|
</Circle>
|
|
@@ -121,26 +125,32 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
121
125
|
<OIcon
|
|
122
126
|
src={theme.images.general.half_f}
|
|
123
127
|
color={state.selected && state.position === 'whole' ? theme.colors.primary : '#cbcbcb'}
|
|
124
|
-
width={
|
|
128
|
+
width={20}
|
|
129
|
+
height={20}
|
|
125
130
|
/>
|
|
126
131
|
</Circle>
|
|
127
132
|
<Circle disabled={disabled} onPress={() => changePosition('right')}>
|
|
128
133
|
<OIcon
|
|
129
134
|
src={theme.images.general.half_r}
|
|
130
135
|
color={state.selected && state.position === 'right' ? theme.colors.primary : '#cbcbcb'}
|
|
131
|
-
width={
|
|
136
|
+
width={20}
|
|
137
|
+
height={20}
|
|
132
138
|
/>
|
|
133
139
|
</Circle>
|
|
134
140
|
</>
|
|
135
141
|
)}
|
|
136
142
|
</PositionControl>
|
|
137
143
|
{price > 0 && (
|
|
138
|
-
<OText size={12} lineHeight={18} color={theme.colors.textSecondary}>
|
|
144
|
+
<OText size={12} lineHeight={18} color={theme.colors.textSecondary} style={{ paddingRight: 10 }}>
|
|
139
145
|
+ {parsePrice(price)}
|
|
140
146
|
</OText>
|
|
141
147
|
)}
|
|
142
148
|
</Container>
|
|
143
|
-
{showMessage &&
|
|
149
|
+
{showMessage && (
|
|
150
|
+
<OText size={10} mLeft={4} mRight={4} style={{ flex: 1, textAlign: 'center' }} color={theme.colors.primary}>
|
|
151
|
+
{`${t('OPTIONS_MAX_LIMIT', 'Maximum options to choose')}: ${option?.max}`}
|
|
152
|
+
</OText>
|
|
153
|
+
)}
|
|
144
154
|
</View>
|
|
145
155
|
)
|
|
146
156
|
}
|
|
@@ -4,13 +4,13 @@ export const Container = styled.TouchableOpacity`
|
|
|
4
4
|
flex-direction: row;
|
|
5
5
|
align-items: center;
|
|
6
6
|
justify-content: space-between;
|
|
7
|
-
padding: 10px;
|
|
8
7
|
width: 100%;
|
|
9
8
|
`
|
|
10
9
|
|
|
11
10
|
export const IconControl = styled.TouchableOpacity`
|
|
12
11
|
flex-direction: row;
|
|
13
|
-
|
|
12
|
+
padding: 10px;
|
|
13
|
+
width: 38%;
|
|
14
14
|
align-items: center;
|
|
15
15
|
`
|
|
16
16
|
|
|
@@ -18,10 +18,9 @@ export const QuantityControl = styled.View`
|
|
|
18
18
|
flex-direction: row;
|
|
19
19
|
align-items: center;
|
|
20
20
|
justify-content: flex-start;
|
|
21
|
-
margin-
|
|
21
|
+
margin-right: 5px;
|
|
22
22
|
flex: 1;
|
|
23
23
|
width: 60px;
|
|
24
|
-
|
|
25
24
|
`
|
|
26
25
|
|
|
27
26
|
export const PositionControl = styled.View`
|