UNPKG

boxpay-checkout-reactnative-sdk

Version:
249 lines (248 loc) 9.04 kB
"use strict"; import { View, SafeAreaView, StatusBar, Text, BackHandler, ScrollView, Image, Pressable } from 'react-native'; import styles from "../styles/screens/savedAddressScreenStyles.js"; import { useEffect, useState } from 'react'; import ShimmerView from "../components/shimmerView.js"; import LottieView from 'lottie-react-native'; import Header from "../components/header.js"; import { APIStatus } from "../interface.js"; import fetchSavedAddress from "../postRequest/fetchSavedAddress.js"; import Toast from 'react-native-toast-message'; import deleteSavedAddress from "../postRequest/deleteSavedAddress.js"; import SavedAddressComponent from "../components/savedAddressCard.js"; import { checkoutDetailsHandler } from "../sharedContext/checkoutDetailsHandler.js"; import SavedAddressBottomSheet from "../components/savedAddressBottomSheet.js"; import { setUserDataHandler, userDataHandler } from "../sharedContext/userdataHandler.js"; import { extractNames, formatAddress } from "../utility.js"; import DeleteAddressModal from "../components/deleteAddressModal.js"; import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; const SavedAddressScreen = ({ navigation }) => { const [isFirstLoad, setIsFirstLoad] = useState(true); const [loading, setLoading] = useState(false); const [isEditClicked, setIsEditClicked] = useState(false); const [savedAddressList, setSavedAddresList] = useState([]); const { checkoutDetails } = checkoutDetailsHandler; const [isOptionsClicked, setIsOptionsClicked] = useState(false); const [isDeleteConfirmationVisible, setIsDeleteConfirmationVisible] = useState(false); const [selectedAddress, setSelectedAddress] = useState(); const [updateAddress, setUpdateAddress] = useState(false); const icons = { home: require('../../assets/images/ic_home.png'), work: require('../../assets/images/ic_work.png'), other: require('../../assets/images/ic_other.png') }; const onProceedBack = () => { if (!loading) { navigation.goBack(); return true; } return false; }; useEffect(() => { const fetchAddress = async () => { const apiResponse = await fetchSavedAddress(); switch (apiResponse.apiStatus) { case APIStatus.Success: { setSavedAddresList(apiResponse.data); setIsFirstLoad(false); break; } case APIStatus.Failed: { Toast.show({ type: 'error', text1: 'Oops!', text2: 'Something went wrong. Please try again.' }); setIsFirstLoad(false); break; } default: { break; } } }; fetchAddress(); }, []); const onClickDeleteAddress = async selectedAddressRef => { const response = await deleteSavedAddress(selectedAddressRef); switch (response.apiStatus) { case APIStatus.Success: { setSavedAddresList(prevList => prevList.filter(address => address.addressRef !== selectedAddressRef)); setLoading(false); break; } case APIStatus.Failed: { Toast.show({ type: 'error', text1: 'Oops!', text2: 'Something went wrong. Please try again.' }); setLoading(false); break; } default: { break; } } }; useEffect(() => { BackHandler.addEventListener('hardwareBackPress', () => { if (loading) { return true; } return onProceedBack(); // Allow back navigation if not loading }); }); useEffect(() => { if (updateAddress || isEditClicked) { const { firstName, lastName } = extractNames(selectedAddress?.name ?? ""); setUserDataHandler({ userData: { email: selectedAddress?.email ?? "", firstName: firstName, lastName: lastName, phone: selectedAddress?.phoneNumber ?? "", uniqueId: userDataHandler.userData.uniqueId, dob: userDataHandler.userData.dob, pan: userDataHandler.userData.pan, address1: selectedAddress?.address1 ?? "", address2: selectedAddress?.address2 ?? "", city: selectedAddress?.city ?? "", state: selectedAddress?.state ?? "", pincode: selectedAddress?.postalCode ?? "", country: selectedAddress?.countryCode ?? "", labelType: selectedAddress?.labelType ?? "", labelName: selectedAddress?.labelName ?? "" } }); if (isEditClicked) { navigation.navigate("AddressScreen", {}); } else { navigation.goBack(); } } }, [updateAddress, isEditClicked]); return /*#__PURE__*/_jsxs(SafeAreaView, { style: styles.screenView, children: [/*#__PURE__*/_jsx(StatusBar, { barStyle: "dark-content" }), isFirstLoad ? /*#__PURE__*/_jsx(ShimmerView, {}) : loading ? /*#__PURE__*/_jsxs(View, { style: styles.loaderView, children: [/*#__PURE__*/_jsx(LottieView, { source: require('../../assets/animations/boxpayLogo.json'), autoPlay: true, loop: true, style: styles.lottieStyle }), /*#__PURE__*/_jsx(Text, { children: "Loading..." })] }) : /*#__PURE__*/_jsxs(View, { style: { flex: 1, backgroundColor: '#F5F6FB' }, children: [/*#__PURE__*/_jsx(Header, { onBackPress: onProceedBack, showDesc: false, showSecure: false, text: "Your Addresses" }), /*#__PURE__*/_jsx(View, { style: styles.divider }), /*#__PURE__*/_jsxs(Pressable, { style: styles.pressableContainer, onPress: () => { if (checkoutDetails.isShippingAddressEditable) { navigation.navigate("AddressScreen", {}); } }, children: [/*#__PURE__*/_jsx(Image, { source: require('../../assets/images/add_icon.png'), style: [styles.imageStyle, { tintColor: checkoutDetails.brandColor }] }), /*#__PURE__*/_jsx(Text, { numberOfLines: 1, ellipsizeMode: "tail", style: [styles.insideContainerClickableText, { color: checkoutDetails.brandColor }], children: "Add new address" })] }), savedAddressList.length !== 0 && /*#__PURE__*/_jsxs(_Fragment, { children: [/*#__PURE__*/_jsx(Text, { style: styles.mainHeadingText, children: "Saved Addresses" }), /*#__PURE__*/_jsx(ScrollView, { contentContainerStyle: { flexGrow: 1 }, keyboardShouldPersistTaps: "handled", children: /*#__PURE__*/_jsx(SavedAddressComponent, { savedAddressList: savedAddressList, onClickAddress: address => { setSelectedAddress(address); setUpdateAddress(true); }, onClickOtherOptions: address => { setSelectedAddress(address); setIsOptionsClicked(true); } }) })] })] }), /*#__PURE__*/_jsx(SavedAddressBottomSheet, { visible: isOptionsClicked, onClose: () => setIsOptionsClicked(false), onEdit: () => setIsEditClicked(true), onSetDefault: () => setUpdateAddress(true), onDelete: () => { setIsOptionsClicked(false); setIsDeleteConfirmationVisible(true); }, label: selectedAddress?.labelName ? selectedAddress?.labelName ?? "" : selectedAddress?.labelType ?? "", address: formatAddress({ address1: selectedAddress?.address1 ?? "", address2: selectedAddress?.address2 ?? "", city: selectedAddress?.city ?? "", state: selectedAddress?.state ?? "", postalCode: selectedAddress?.postalCode ?? "", countryCode: selectedAddress?.countryCode ?? "", labelName: selectedAddress?.labelName ?? "", labelType: selectedAddress?.labelType ?? "" }), icon: icons[selectedAddress?.labelType.toLowerCase()] || icons.other }), /*#__PURE__*/_jsx(DeleteAddressModal, { visible: isDeleteConfirmationVisible, onCancel: () => setIsDeleteConfirmationVisible(false), onDelete: () => { setIsDeleteConfirmationVisible(false); onClickDeleteAddress(selectedAddress?.addressRef ?? ""); }, address: formatAddress({ address1: selectedAddress?.address1 ?? "", address2: selectedAddress?.address2 ?? "", city: selectedAddress?.city ?? "", state: selectedAddress?.state ?? "", postalCode: selectedAddress?.postalCode ?? "", countryCode: selectedAddress?.countryCode ?? "", labelName: selectedAddress?.labelName ?? "", labelType: selectedAddress?.labelType ?? "" }) })] }); }; export default SavedAddressScreen; //# sourceMappingURL=savedAddressScreen.js.map