boxpay-checkout-reactnative-sdk 1.0.0-beta09 → 1.0.0-beta23

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 (48) hide show
  1. package/assets/images/ic_trash.png +0 -0
  2. package/lib/assets/assets/images/ic_trash.png +0 -0
  3. package/lib/assets/images/ic_trash.png +0 -0
  4. package/lib/module/components/deleteAddressModal.js +116 -0
  5. package/lib/module/components/deleteAddressModal.js.map +1 -0
  6. package/lib/module/components/savedAddressBottomSheet.js +131 -0
  7. package/lib/module/components/savedAddressBottomSheet.js.map +1 -0
  8. package/lib/module/components/savedAddressCard.js +7 -11
  9. package/lib/module/components/savedAddressCard.js.map +1 -1
  10. package/lib/module/screens/addressScreen.js +1 -15
  11. package/lib/module/screens/addressScreen.js.map +1 -1
  12. package/lib/module/screens/mainScreen.js +4 -4
  13. package/lib/module/screens/mainScreen.js.map +1 -1
  14. package/lib/module/screens/savedAddressScreen.js +116 -30
  15. package/lib/module/screens/savedAddressScreen.js.map +1 -1
  16. package/lib/module/styles/components/savedAddressCardStyles.js +11 -9
  17. package/lib/module/styles/components/savedAddressCardStyles.js.map +1 -1
  18. package/lib/module/styles/{savedAddressScreenStyles.js → screens/savedAddressScreenStyles.js} +5 -3
  19. package/lib/module/styles/screens/savedAddressScreenStyles.js.map +1 -0
  20. package/lib/module/utils/stringUtils.js +15 -0
  21. package/lib/module/utils/stringUtils.js.map +1 -1
  22. package/lib/typescript/src/components/deleteAddressModal.d.ts +9 -0
  23. package/lib/typescript/src/components/deleteAddressModal.d.ts.map +1 -0
  24. package/lib/typescript/src/components/savedAddressBottomSheet.d.ts +13 -0
  25. package/lib/typescript/src/components/savedAddressBottomSheet.d.ts.map +1 -0
  26. package/lib/typescript/src/components/savedAddressCard.d.ts +2 -1
  27. package/lib/typescript/src/components/savedAddressCard.d.ts.map +1 -1
  28. package/lib/typescript/src/screens/addressScreen.d.ts.map +1 -1
  29. package/lib/typescript/src/screens/mainScreen.d.ts.map +1 -1
  30. package/lib/typescript/src/screens/savedAddressScreen.d.ts.map +1 -1
  31. package/lib/typescript/src/styles/components/savedAddressCardStyles.d.ts +4 -2
  32. package/lib/typescript/src/styles/components/savedAddressCardStyles.d.ts.map +1 -1
  33. package/lib/typescript/src/styles/{savedAddressScreenStyles.d.ts → screens/savedAddressScreenStyles.d.ts} +2 -0
  34. package/lib/typescript/src/styles/screens/savedAddressScreenStyles.d.ts.map +1 -0
  35. package/lib/typescript/src/utils/stringUtils.d.ts +4 -0
  36. package/lib/typescript/src/utils/stringUtils.d.ts.map +1 -1
  37. package/package.json +1 -1
  38. package/src/components/deleteAddressModal.tsx +114 -0
  39. package/src/components/savedAddressBottomSheet.tsx +135 -0
  40. package/src/components/savedAddressCard.tsx +6 -12
  41. package/src/screens/addressScreen.tsx +1 -19
  42. package/src/screens/mainScreen.tsx +4 -6
  43. package/src/screens/savedAddressScreen.tsx +117 -28
  44. package/src/styles/components/savedAddressCardStyles.ts +10 -8
  45. package/src/styles/{savedAddressScreenStyles.ts → screens/savedAddressScreenStyles.ts} +3 -1
  46. package/src/utils/stringUtils.ts +19 -0
  47. package/lib/module/styles/savedAddressScreenStyles.js.map +0 -1
  48. package/lib/typescript/src/styles/savedAddressScreenStyles.d.ts.map +0 -1
@@ -34,12 +34,14 @@ declare const styles: {
34
34
  backgroundColor: string;
35
35
  flexDirection: "row";
36
36
  borderRadius: number;
37
+ alignItems: "center";
37
38
  };
38
39
  imageStyle: {
39
40
  height: number;
40
41
  width: number;
41
42
  marginStart: number;
42
43
  marginTop: number;
44
+ tintColor: string;
43
45
  };
44
46
  insideContainerClickableText: {
45
47
  fontSize: number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"savedAddressScreenStyles.d.ts","sourceRoot":"","sources":["../../../../../src/styles/screens/savedAddressScreenStyles.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDV,CAAA;AAEF,eAAe,MAAM,CAAA"}
@@ -3,4 +3,8 @@ export declare function getEndpoint(env: string): string;
3
3
  export declare function generateRandomAlphanumericString(length: number): string;
4
4
  export declare function getBaseURL(env: string): string;
5
5
  export declare function formatAddress(deliveryAddress: DeliveryAddress): string;
6
+ export declare function extractNames(fullName: string): {
7
+ firstName: string;
8
+ lastName: string;
9
+ };
6
10
  //# sourceMappingURL=stringUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/stringUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAMpD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAavE;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,aAAa,CAAC,eAAe,EAAG,eAAe,GAAI,MAAM,CAMxE"}
1
+ {"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/stringUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAMpD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAavE;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,aAAa,CAAC,eAAe,EAAG,eAAe,GAAI,MAAM,CAMxE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAcA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boxpay-checkout-reactnative-sdk",
3
- "version": "1.0.0-beta09",
3
+ "version": "1.0.0-beta23",
4
4
  "description": "Boxpay Payment Gateway",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -0,0 +1,114 @@
1
+ import { View, Text, TouchableOpacity, StyleSheet, Image } from "react-native";
2
+ import Modal from "react-native-modal";
3
+
4
+ interface DeletePros {
5
+ visible : boolean,
6
+ onCancel : () => void,
7
+ onDelete : () => void,
8
+ address : string
9
+ }
10
+
11
+ const DeleteAddressModal = ({ visible, onCancel, onDelete, address } : DeletePros) => {
12
+ return (
13
+ <Modal
14
+ isVisible={visible}
15
+ animationIn="zoomIn"
16
+ animationOut="zoomOut"
17
+ backdropOpacity={0.5}
18
+ onBackdropPress={onCancel}
19
+ useNativeDriver
20
+ >
21
+ <View style={styles.modalContainer}>
22
+ {/* Delete Icon */}
23
+ <Image
24
+ source={require("./assets/ic_delete.png")}
25
+ style={styles.deleteIcon}
26
+ />
27
+
28
+ {/* Title */}
29
+ <Text style={styles.title}>Proceed to delete this address?</Text>
30
+
31
+ {/* Address Info */}
32
+ <Text style={styles.address}>{address}</Text>
33
+
34
+ {/* Buttons */}
35
+ <View style={styles.buttonRow}>
36
+ <TouchableOpacity style={styles.cancelButton} onPress={onCancel}>
37
+ <Text style={styles.cancelText}>Cancel</Text>
38
+ </TouchableOpacity>
39
+
40
+ <TouchableOpacity style={styles.deleteButton} onPress={onDelete}>
41
+ <Text style={styles.deleteText}>Yes, delete</Text>
42
+ </TouchableOpacity>
43
+ </View>
44
+ </View>
45
+ </Modal>
46
+ );
47
+ };
48
+
49
+ const styles = StyleSheet.create({
50
+ modalContainer: {
51
+ backgroundColor: "#fff",
52
+ borderRadius: 16,
53
+ padding: 20,
54
+ alignItems: "center",
55
+ justifyContent: "center",
56
+ width: "90%",
57
+ alignSelf: "center",
58
+ },
59
+ deleteIcon: {
60
+ width: 40,
61
+ height: 40,
62
+ marginBottom: 10,
63
+ tintColor: "#FF3B30",
64
+ },
65
+ title: {
66
+ fontSize: 18,
67
+ fontWeight: "700",
68
+ color: "#000",
69
+ textAlign: "center",
70
+ marginBottom: 10,
71
+ },
72
+ address: {
73
+ fontSize: 14,
74
+ color: "#666",
75
+ textAlign: "center",
76
+ marginBottom: 20,
77
+ lineHeight: 20,
78
+ },
79
+ buttonRow: {
80
+ flexDirection: "row",
81
+ justifyContent: "space-between",
82
+ width: "100%",
83
+ marginTop: 10,
84
+ },
85
+ cancelButton: {
86
+ flex: 1,
87
+ marginRight: 8,
88
+ paddingVertical: 12,
89
+ backgroundColor: "#F9F9F9",
90
+ borderRadius: 8,
91
+ borderWidth: 1,
92
+ borderColor: "#E5E5E5",
93
+ alignItems: "center",
94
+ },
95
+ deleteButton: {
96
+ flex: 1,
97
+ paddingVertical: 12,
98
+ backgroundColor: "#0A8754",
99
+ borderRadius: 8,
100
+ alignItems: "center",
101
+ },
102
+ cancelText: {
103
+ fontSize: 16,
104
+ color: "#0A8754",
105
+ fontWeight: "600",
106
+ },
107
+ deleteText: {
108
+ fontSize: 16,
109
+ color: "#fff",
110
+ fontWeight: "600",
111
+ },
112
+ });
113
+
114
+ export default DeleteAddressModal;
@@ -0,0 +1,135 @@
1
+ import {
2
+ View,
3
+ Text,
4
+ TouchableOpacity,
5
+ StyleSheet,
6
+ Image,
7
+ } from "react-native";
8
+ import Modal from "react-native-modal";
9
+
10
+ interface Props {
11
+ visible: boolean;
12
+ onClose: () => void;
13
+ onEdit: () => void;
14
+ onSetDefault: () => void;
15
+ onDelete: () => void;
16
+ label: string;
17
+ address: string;
18
+ icon: any;
19
+ }
20
+
21
+ const SavedAddressBottomSheet = ({
22
+ visible,
23
+ onClose,
24
+ onEdit,
25
+ onSetDefault,
26
+ onDelete,
27
+ label,
28
+ address,
29
+ icon,
30
+ }: Props) => {
31
+ return (
32
+ <Modal
33
+ isVisible={visible}
34
+ onBackdropPress={onClose}
35
+ style={styles.modal}
36
+ backdropOpacity={0.4}
37
+ >
38
+ <View style={styles.container}>
39
+ {/* Address Info */}
40
+ <View style={styles.headerContainer}>
41
+ <Image source={icon} style={styles.icon} />
42
+ <View style={styles.textContainer}>
43
+ <Text style={styles.label}>{label}</Text>
44
+ <Text style={styles.address} numberOfLines={1} ellipsizeMode="tail">
45
+ {address}
46
+ </Text>
47
+ </View>
48
+ </View>
49
+
50
+ {/* Divider */}
51
+ <View style={styles.divider} />
52
+
53
+ {/* Options */}
54
+ <TouchableOpacity style={styles.option} onPress={onEdit}>
55
+ <Text style={styles.optionText}>Edit</Text>
56
+ </TouchableOpacity>
57
+
58
+ <TouchableOpacity style={styles.option} onPress={onSetDefault}>
59
+ <Text style={styles.optionText}>Set as Default</Text>
60
+ </TouchableOpacity>
61
+
62
+ {/* Delete Option */}
63
+ <TouchableOpacity style={styles.deleteOption} onPress={onDelete}>
64
+ <Text style={styles.deleteText}>Delete address</Text>
65
+ </TouchableOpacity>
66
+ </View>
67
+ </Modal>
68
+ );
69
+ };
70
+
71
+ const styles = StyleSheet.create({
72
+ modal: {
73
+ justifyContent: "flex-end",
74
+ margin: 0,
75
+ },
76
+ container: {
77
+ backgroundColor: "#fff",
78
+ borderTopLeftRadius: 16,
79
+ borderTopRightRadius: 16,
80
+ padding: 16,
81
+ },
82
+ headerContainer: {
83
+ flexDirection: "row",
84
+ alignItems: "center",
85
+ marginBottom: 12,
86
+ },
87
+ icon: {
88
+ width: 24,
89
+ height: 24,
90
+ marginRight: 12,
91
+ tintColor: "#000",
92
+ },
93
+ textContainer: {
94
+ flex: 1,
95
+ },
96
+ label: {
97
+ fontSize: 16,
98
+ fontWeight: "700",
99
+ color: "#000",
100
+ },
101
+ address: {
102
+ fontSize: 14,
103
+ color: "#555",
104
+ marginTop: 4,
105
+ },
106
+ divider: {
107
+ height: 1,
108
+ backgroundColor: "#ECECED",
109
+ marginVertical: 12,
110
+ },
111
+ option: {
112
+ paddingVertical: 14,
113
+ alignItems: "center",
114
+ backgroundColor: "#fff",
115
+ borderRadius: 10,
116
+ marginBottom: 8,
117
+ borderWidth: 1,
118
+ borderColor: "#ECECED",
119
+ },
120
+ optionText: {
121
+ fontSize: 16,
122
+ color: "#000",
123
+ },
124
+ deleteOption: {
125
+ paddingVertical: 14,
126
+ alignItems: "center",
127
+ },
128
+ deleteText: {
129
+ fontSize: 16,
130
+ color: "red",
131
+ fontWeight: "600",
132
+ },
133
+ });
134
+
135
+ export default SavedAddressBottomSheet;
@@ -1,4 +1,3 @@
1
- import { useState } from "react"
2
1
  import type { FetchSavedAddress } from "../interface"
3
2
  import { View, Text, Pressable, Image, TouchableOpacity } from 'react-native';
4
3
  import { checkoutDetailsHandler } from "../sharedContext/checkoutDetailsHandler";
@@ -9,20 +8,17 @@ import { userDataHandler } from "../sharedContext/userdataHandler";
9
8
 
10
9
  interface SavedAddressComponentArgs {
11
10
  savedAddressList : FetchSavedAddress[],
12
- onClickAddress : (savedAddress : FetchSavedAddress) => void
11
+ onClickAddress : (savedAddress : FetchSavedAddress) => void,
12
+ onClickOtherOptions : (savedAddress : FetchSavedAddress) => void
13
13
  }
14
14
 
15
15
 
16
- const SavedAddressComponent = ({savedAddressList, onClickAddress} : SavedAddressComponentArgs) => {
17
- const [/*isOptionsClicked*/, setIsOptionsClicked] = useState<boolean>(false)
18
- const [/*selectedAddress*/ , setSelectedAddress] = useState<FetchSavedAddress>()
16
+ const SavedAddressComponent = ({savedAddressList, onClickAddress, onClickOtherOptions} : SavedAddressComponentArgs) => {
19
17
  const {userData} = userDataHandler
20
- // const [isDeleteClicked , setIsDeleteClicked] = useState<boolean>(false)
21
- // const [isEditClicked, setIsEditClicked] = useState<boolean>(false)
22
18
  const {checkoutDetails} = checkoutDetailsHandler
23
19
 
24
20
  return(
25
- <View style={{ paddingBottom: 12 }}>
21
+ <View style={{ paddingBottom: 12, paddingHorizontal:16 }}>
26
22
  {savedAddressList.map((address) => (
27
23
  <View key={address.addressRef}>
28
24
  <SavedAddressCard
@@ -44,8 +40,7 @@ const SavedAddressComponent = ({savedAddressList, onClickAddress} : SavedAddress
44
40
  labelType : address.labelType
45
41
  })}
46
42
  onClickOtherOptions = {()=> {
47
- setSelectedAddress(address)
48
- setIsOptionsClicked(true)
43
+ onClickOtherOptions(address)
49
44
  }}
50
45
  onClickAddress = {()=> onClickAddress(address)}
51
46
  brandColor={checkoutDetails.brandColor}
@@ -83,7 +78,6 @@ const SavedAddressCard = ({isSelected, labelType, address, onClickAddress, onCli
83
78
  work: require('../../assets/images/ic_work.png'),
84
79
  other: require('../../assets/images/ic_other.png'),
85
80
  };
86
-
87
81
  const addressIcon =
88
82
  icons[labelType.toLowerCase() as keyof typeof icons] || icons.other;
89
83
  return (
@@ -115,7 +109,7 @@ const SavedAddressCard = ({isSelected, labelType, address, onClickAddress, onCli
115
109
 
116
110
  {/* Address */}
117
111
  <Text style={styles.addressText}>{address}</Text>
118
- <Text style = {styles.addressText}>{phone}</Text>
112
+ <Text style = {styles.addressText}>Mobile: {phone}</Text>
119
113
  </Pressable>
120
114
  )
121
115
  }
@@ -19,6 +19,7 @@ import {
19
19
  import styles from '../styles/screens/addressScreenStyles.';
20
20
  import type { CheckoutStackParamList } from '../navigation';
21
21
  import type { NavigationProp } from '@react-navigation/native';
22
+ import { extractNames } from '../utils/stringUtils';
22
23
 
23
24
  type AddressScreenNavigationProp = NavigationProp<CheckoutStackParamList, 'AddressScreen'>;
24
25
 
@@ -108,25 +109,6 @@ const AddressScreen = ({ navigation }: Props) => {
108
109
  }
109
110
  };
110
111
 
111
- function extractNames(fullName: string): {
112
- firstName: string;
113
- lastName: string;
114
- } {
115
- const components = fullName
116
- .trim()
117
- .split(' ')
118
- .filter((part) => part !== '');
119
-
120
- if (components.length === 0) {
121
- return { firstName: '', lastName: '' };
122
- }
123
-
124
- const firstName = components[0] || '';
125
- const lastName = components.slice(1).join(' ') || '';
126
-
127
- return { firstName, lastName };
128
- }
129
-
130
112
  const onChangeEmailId = (updatedText: string) => {
131
113
  setEmailTextField(updatedText);
132
114
  const trimmedText = updatedText.trim();
@@ -486,6 +486,10 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
486
486
  setPaymentHandler({
487
487
  onPaymentResult: onPaymentResult,
488
488
  });
489
+ if(shopperToken != null && shopperToken != "") {
490
+ checkoutDetailsHandler.checkoutDetails.shopperToken = shopperToken
491
+ getRecommendedInstruments()
492
+ }
489
493
  callUIAnalytics(AnalyticsEvents.CHECKOUT_LOADED,"Index Screen Session Loaded","")
490
494
  break;
491
495
  }
@@ -505,12 +509,6 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
505
509
  }
506
510
  }
507
511
  loadSession()
508
-
509
- if(shopperToken != null && shopperToken != "") {
510
- checkoutDetailsHandler.checkoutDetails.shopperToken = shopperToken
511
- getRecommendedInstruments()
512
- }
513
-
514
512
  }, []);
515
513
 
516
514
  const handleRecommendedSectionClick = (instrumentValue: string) => {
@@ -8,7 +8,7 @@ import {
8
8
  Image,
9
9
  Pressable
10
10
  } from 'react-native';
11
- import styles from '../styles/savedAddressScreenStyles';
11
+ import styles from '../styles/screens/savedAddressScreenStyles';
12
12
  import { useEffect, useState } from 'react';
13
13
  import ShimmerView from '../components/shimmerView';
14
14
  import LottieView from 'lottie-react-native';
@@ -16,11 +16,15 @@ import Header from '../components/header';
16
16
  import { APIStatus, type FetchSavedAddress} from '../interface';
17
17
  import fetchSavedAddress from '../postRequest/fetchSavedAddress';
18
18
  import Toast from 'react-native-toast-message'
19
- // import deleteSavedAddress from '../postRequest/deleteSavedAddress';
19
+ import deleteSavedAddress from '../postRequest/deleteSavedAddress';
20
20
  import type { CheckoutStackParamList } from '../navigation';
21
21
  import type { NavigationProp } from '@react-navigation/native';
22
22
  import SavedAddressComponent from '../components/savedAddressCard';
23
23
  import { checkoutDetailsHandler } from '../sharedContext/checkoutDetailsHandler';
24
+ import SavedAddressBottomSheet from '../components/savedAddressBottomSheet';
25
+ import { setUserDataHandler, userDataHandler } from '../sharedContext/userdataHandler';
26
+ import { extractNames, formatAddress } from '../utils/stringUtils';
27
+ import DeleteAddressModal from '../components/deleteAddressModal';
24
28
 
25
29
  type AddressScreenNavigationProp = NavigationProp<CheckoutStackParamList, 'AddressScreen'>;
26
30
 
@@ -30,9 +34,20 @@ interface Props {
30
34
 
31
35
  const SavedAddressScreen = ({ navigation }: Props) => {
32
36
  const [isFirstLoad, setIsFirstLoad] = useState(true)
33
- const [loading, /*setLoading*/] = useState(false)
37
+ const [loading, setLoading] = useState(false)
38
+ const [isEditClicked, setIsEditClicked] = useState(false)
34
39
  const [savedAddressList, setSavedAddresList] = useState<FetchSavedAddress[]>([]);
35
40
  const {checkoutDetails} = checkoutDetailsHandler
41
+ const [isOptionsClicked, setIsOptionsClicked] = useState<boolean>(false)
42
+ const [isDeleteConfirmationVisible, setIsDeleteConfirmationVisible] = useState<boolean>(false)
43
+ const [selectedAddress,setSelectedAddress] = useState<FetchSavedAddress>()
44
+ const [updateAddress, setUpdateAddress] = useState<boolean>(false)
45
+
46
+ const icons = {
47
+ home: require('../../assets/images/ic_home.png'),
48
+ work: require('../../assets/images/ic_work.png'),
49
+ other: require('../../assets/images/ic_other.png'),
50
+ };
36
51
 
37
52
  const onProceedBack = () => {
38
53
  if (!loading) {
@@ -69,30 +84,30 @@ const SavedAddressScreen = ({ navigation }: Props) => {
69
84
  fetchAddress()
70
85
  }, []);
71
86
 
72
- // const onClickDeleteAddress = async (selectedAddressRef : string) => {
73
- // const response = await deleteSavedAddress(selectedAddressRef)
74
- // switch(response.apiStatus) {
75
- // case APIStatus.Success : {
76
- // setSavedAddresList(prevList =>
77
- // prevList.filter(address => address.addressRef !== selectedAddressRef)
78
- // );
79
- // setLoading(false)
80
- // break
81
- // }
82
- // case APIStatus.Failed : {
83
- // Toast.show({
84
- // type: 'error',
85
- // text1: 'Oops!',
86
- // text2: 'Something went wrong. Please try again.',
87
- // });
88
- // setLoading(false)
89
- // break
90
- // }
91
- // default : {
92
- // break
93
- // }
94
- // }
95
- // }
87
+ const onClickDeleteAddress = async (selectedAddressRef : string) => {
88
+ const response = await deleteSavedAddress(selectedAddressRef)
89
+ switch(response.apiStatus) {
90
+ case APIStatus.Success : {
91
+ setSavedAddresList(prevList =>
92
+ prevList.filter(address => address.addressRef !== selectedAddressRef)
93
+ );
94
+ setLoading(false)
95
+ break
96
+ }
97
+ case APIStatus.Failed : {
98
+ Toast.show({
99
+ type: 'error',
100
+ text1: 'Oops!',
101
+ text2: 'Something went wrong. Please try again.',
102
+ });
103
+ setLoading(false)
104
+ break
105
+ }
106
+ default : {
107
+ break
108
+ }
109
+ }
110
+ }
96
111
 
97
112
 
98
113
  useEffect(() => {
@@ -104,6 +119,35 @@ const SavedAddressScreen = ({ navigation }: Props) => {
104
119
  backHandler.remove();
105
120
  };
106
121
  }, []);
122
+ useEffect(() => {
123
+ if(updateAddress || isEditClicked) {
124
+ const { firstName, lastName } = extractNames(selectedAddress?.name ?? "");
125
+ setUserDataHandler({
126
+ userData: {
127
+ email: selectedAddress?.email ?? "",
128
+ firstName: firstName,
129
+ lastName: lastName,
130
+ phone: selectedAddress?.phoneNumber ?? "",
131
+ uniqueId: userDataHandler.userData.uniqueId,
132
+ dob: userDataHandler.userData.dob,
133
+ pan: userDataHandler.userData.pan,
134
+ address1: selectedAddress?.address1 ?? "",
135
+ address2: selectedAddress?.address2 ?? "",
136
+ city: selectedAddress?.city ?? "",
137
+ state: selectedAddress?.state ?? "",
138
+ pincode: selectedAddress?.postalCode ?? "",
139
+ country: selectedAddress?.countryCode ?? "",
140
+ labelType: selectedAddress?.labelType ?? "",
141
+ labelName: selectedAddress?.labelName ?? "",
142
+ },
143
+ });
144
+ if(isEditClicked) {
145
+ navigation.navigate("AddressScreen",{})
146
+ } else {
147
+ navigation.goBack()
148
+ }
149
+ }
150
+ }, [updateAddress, isEditClicked]);
107
151
 
108
152
  return (
109
153
  <SafeAreaView style = {styles.screenView}>
@@ -165,15 +209,60 @@ const SavedAddressScreen = ({ navigation }: Props) => {
165
209
  >
166
210
  <SavedAddressComponent
167
211
  savedAddressList={savedAddressList}
168
- onClickAddress={(address) => {
212
+ onClickAddress={(address : FetchSavedAddress) => {
213
+ setSelectedAddress(address)
214
+ setUpdateAddress(true)
169
215
  console.log(address);
170
216
  }}
217
+ onClickOtherOptions={(address : FetchSavedAddress) => {
218
+ setSelectedAddress(address)
219
+ setIsOptionsClicked(true)
220
+ }}
171
221
  />
172
222
  </ScrollView>
173
223
  </>
174
224
  )}
175
225
  </View>
176
226
  )}
227
+ <SavedAddressBottomSheet
228
+ visible={isOptionsClicked}
229
+ onClose={() => setIsOptionsClicked(false)}
230
+ onEdit={() => setIsEditClicked(true)}
231
+ onSetDefault={() => console.log("Set as Default clicked")}
232
+ onDelete={() => setIsDeleteConfirmationVisible(true)}
233
+ label= {selectedAddress?.labelName ? selectedAddress?.labelName ?? "" : selectedAddress?.labelType ?? ""}
234
+ address={formatAddress({
235
+ address1 : selectedAddress?.address1 ?? "",
236
+ address2: selectedAddress?.address2 ?? "",
237
+ city : selectedAddress?.city ?? "",
238
+ state : selectedAddress?.state ?? "",
239
+ postalCode : selectedAddress?.postalCode ?? "",
240
+ countryCode : selectedAddress?.countryCode ?? "",
241
+ labelName : selectedAddress?.labelName ?? "",
242
+ labelType : selectedAddress?.labelType ?? ""
243
+ })}
244
+ icon={icons[selectedAddress?.labelType.toLowerCase() as keyof typeof icons] || icons.other}
245
+ />
246
+
247
+ <DeleteAddressModal
248
+ visible={isDeleteConfirmationVisible}
249
+ onCancel={() => setIsDeleteConfirmationVisible(false)}
250
+ onDelete={() => {
251
+ setIsDeleteConfirmationVisible(false);
252
+ console.log("Address deleted");
253
+ onClickDeleteAddress(selectedAddress?.addressRef ?? "")
254
+ }}
255
+ address={formatAddress({
256
+ address1 : selectedAddress?.address1 ?? "",
257
+ address2: selectedAddress?.address2 ?? "",
258
+ city : selectedAddress?.city ?? "",
259
+ state : selectedAddress?.state ?? "",
260
+ postalCode : selectedAddress?.postalCode ?? "",
261
+ countryCode : selectedAddress?.countryCode ?? "",
262
+ labelName : selectedAddress?.labelName ?? "",
263
+ labelType : selectedAddress?.labelType ?? ""
264
+ })}
265
+ />
177
266
  </SafeAreaView>
178
267
  )
179
268
  }
@@ -30,26 +30,28 @@ const styles = StyleSheet.create({
30
30
  gap: 6,
31
31
  },
32
32
  labelName: {
33
- fontSize: 16,
34
- fontWeight: "600",
35
- color: "#1A1A1A",
33
+ fontSize: 14,
34
+ fontFamily: 'Poppins-SemiBold',
35
+ color: "#2D2B32",
36
36
  },
37
37
  selectedTag: {
38
- backgroundColor: "#FFE6F1",
38
+ backgroundColor: "#FFF0F6",
39
39
  paddingHorizontal: 8,
40
40
  paddingVertical: 2,
41
41
  borderRadius: 6,
42
42
  marginLeft: 8,
43
+ borderColor:"#FFADD2"
43
44
  },
44
45
  selectedTagText: {
45
46
  fontSize: 10,
46
- fontWeight: "700",
47
- color: "#FF2E92",
47
+ fontFamily: 'Poppins-Medium',
48
+ color: "#EB2F96",
48
49
  },
49
50
  addressText: {
50
51
  marginTop: 10,
51
- fontSize: 14,
52
- color: "#666",
52
+ fontSize: 12,
53
+ fontFamily: 'Poppins-Regular',
54
+ color: "#7F7D83",
53
55
  lineHeight: 20,
54
56
  },
55
57
  imageStyle : {
@@ -1,5 +1,5 @@
1
1
  import { StyleSheet } from "react-native";
2
- import { checkoutDetailsHandler } from "../sharedContext/checkoutDetailsHandler";
2
+ import { checkoutDetailsHandler } from "../../sharedContext/checkoutDetailsHandler";
3
3
 
4
4
  const {brandColor} = checkoutDetailsHandler.checkoutDetails
5
5
 
@@ -37,12 +37,14 @@ const styles = StyleSheet.create({
37
37
  backgroundColor: 'white',
38
38
  flexDirection: 'row',
39
39
  borderRadius: 12,
40
+ alignItems:'center'
40
41
  },
41
42
  imageStyle : {
42
43
  height: 20,
43
44
  width: 20,
44
45
  marginStart: 12,
45
46
  marginTop: 20,
47
+ tintColor: brandColor
46
48
  },
47
49
  insideContainerClickableText : {
48
50
  fontSize: 14,