|
|
|
@ -1,35 +1,12 @@ |
|
|
|
|
import { |
|
|
|
|
View, |
|
|
|
|
Text, |
|
|
|
|
Pressable, |
|
|
|
|
TouchableOpacity, |
|
|
|
|
Appearance, |
|
|
|
|
ActivityIndicator, |
|
|
|
|
SafeAreaView, |
|
|
|
|
ScrollView, |
|
|
|
|
StyleSheet, |
|
|
|
|
Platform, |
|
|
|
|
Dimensions, |
|
|
|
|
StatusBar, |
|
|
|
|
} from "react-native"; |
|
|
|
|
import React from "react"; |
|
|
|
|
import { connect } from "react-redux"; |
|
|
|
|
import { useNavigation } from "@react-navigation/native"; |
|
|
|
|
import { userAddress, userFactor } from "../../../../redux/actions"; |
|
|
|
|
import Svg, { G, Path } from "react-native-svg"; |
|
|
|
|
import { userAddress, userFactor } from "../../../../../redux/actions"; |
|
|
|
|
import { Link, useNavigate } from "react-router-dom"; |
|
|
|
|
|
|
|
|
|
//components
|
|
|
|
|
import Navbar from "../../../../components/Navbar"; |
|
|
|
|
import CustomPressable from "../../../../components/Pressable"; |
|
|
|
|
import Empty from "../../../../components/Empty"; |
|
|
|
|
|
|
|
|
|
//style
|
|
|
|
|
import tw from "tailwind-rn"; |
|
|
|
|
import Colors from "../../../../constants/Colors"; |
|
|
|
|
import fontSize from "../../../../constants/fontSize"; |
|
|
|
|
|
|
|
|
|
const { height, width } = Dimensions.get("window"); |
|
|
|
|
const ios = Platform.OS === "ios"; |
|
|
|
|
import Empty from "../../../../../components/Empty"; |
|
|
|
|
import Button from "../../../../../components/Button"; |
|
|
|
|
import FloatingButton from "../../../../../components/FloatingButton"; |
|
|
|
|
|
|
|
|
|
const ProfileAddress = ({ |
|
|
|
|
addresses, |
|
|
|
@ -41,156 +18,81 @@ const ProfileAddress = ({ |
|
|
|
|
loading, |
|
|
|
|
closeBottomSheet, |
|
|
|
|
mobile, |
|
|
|
|
isDark, |
|
|
|
|
}) => { |
|
|
|
|
const colorScheme = Appearance.getColorScheme(); |
|
|
|
|
const navigation = useNavigation(); |
|
|
|
|
const [height, setHeight] = React.useState(Dimensions.get("window").height); |
|
|
|
|
const navigation = useNavigate(); |
|
|
|
|
const Location = ({ address, active }) => { |
|
|
|
|
return ( |
|
|
|
|
<Pressable |
|
|
|
|
style={[ |
|
|
|
|
{ |
|
|
|
|
backgroundColor: |
|
|
|
|
userAddressId === address?.id |
|
|
|
|
? Colors.theme1[colorScheme].greenCF + "0a" |
|
|
|
|
: Colors.theme1[colorScheme].grayE3 + "44", |
|
|
|
|
borderWidth: 2, |
|
|
|
|
borderColor: |
|
|
|
|
userAddressId === address?.id |
|
|
|
|
? Colors.theme1[colorScheme].greenCF + "aa" |
|
|
|
|
: Colors.theme1[colorScheme].grayE3, |
|
|
|
|
}, |
|
|
|
|
tw( |
|
|
|
|
`flex flex-row-reverse items-center w-full px-3 py-2 rounded-md mt-2` |
|
|
|
|
), |
|
|
|
|
]} |
|
|
|
|
onPress={() => |
|
|
|
|
<div |
|
|
|
|
className={`bg-opacity-5 border border-solid flex flex-row items-center w-full px-3 py-2 rounded-md mt-2 ${ |
|
|
|
|
active ? "bg-blueC0 border-blueC0" : "bg-gray-300 border-gray-300" |
|
|
|
|
}`}
|
|
|
|
|
onClick={() => |
|
|
|
|
userAddressId === address?.id |
|
|
|
|
? {} |
|
|
|
|
: update({ userAddressId: address.id, userId }) |
|
|
|
|
} |
|
|
|
|
> |
|
|
|
|
<View style={tw("flex flex-1 mr-2")}> |
|
|
|
|
<div className={"flex flex-col flex-1 mr-2"}> |
|
|
|
|
{active && ( |
|
|
|
|
<View |
|
|
|
|
style={tw("w-full flex flex-row-reverse justify-between mb-3")} |
|
|
|
|
> |
|
|
|
|
<View style={tw("flex flex-row-reverse items-center")}> |
|
|
|
|
<Text |
|
|
|
|
style={{ |
|
|
|
|
fontSize: fontSize.base, |
|
|
|
|
fontFamily: "bold", |
|
|
|
|
color: Colors.theme1[colorScheme].gray20, |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
<div className={"w-full flex flex-row justify-between mb-3"}> |
|
|
|
|
<div className={"flex flex-row items-center"}> |
|
|
|
|
<strong className={"text-base font-bold text-gray1"}> |
|
|
|
|
آدرس انتخابی شما |
|
|
|
|
</Text> |
|
|
|
|
<Text |
|
|
|
|
style={{ |
|
|
|
|
fontSize: fontSize.xs, |
|
|
|
|
fontFamily: "regular", |
|
|
|
|
color: Colors.theme1[colorScheme].gray20, |
|
|
|
|
marginRight: 10, |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
فعال |
|
|
|
|
</Text> |
|
|
|
|
</View> |
|
|
|
|
<Svg xmlns="http://www.w3.org/2000/svg" width={24} height={24}> |
|
|
|
|
<G fill="#07612c" data-name="vuesax/linear/more"> |
|
|
|
|
<Path d="M10 19a2 2 0 1 0 2-2 2.006 2.006 0 0 0-2 2Z" /> |
|
|
|
|
<Path |
|
|
|
|
</strong> |
|
|
|
|
<span className={"text-xs text-gray1 mr-2.5"}>فعال</span> |
|
|
|
|
</div> |
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" width={24} height={24}> |
|
|
|
|
<g fill="#07612c" data-name="vuesax/linear/more"> |
|
|
|
|
<path d="M10 19a2 2 0 1 0 2-2 2.006 2.006 0 0 0-2 2Z" /> |
|
|
|
|
<path |
|
|
|
|
data-name="Vector" |
|
|
|
|
d="M10 5a2 2 0 1 0 2-2 2.006 2.006 0 0 0-2 2ZM10 12a2 2 0 1 0 2-2 2.006 2.006 0 0 0-2 2Z" |
|
|
|
|
/> |
|
|
|
|
</G> |
|
|
|
|
</Svg> |
|
|
|
|
</View> |
|
|
|
|
</g> |
|
|
|
|
</svg> |
|
|
|
|
</div> |
|
|
|
|
)} |
|
|
|
|
<View style={tw(`flex w-full ${active ? "" : "flex-row-reverse"}`)}> |
|
|
|
|
<View style={tw("flex flex-1 mb-4")}> |
|
|
|
|
<Text |
|
|
|
|
style={[ |
|
|
|
|
{ |
|
|
|
|
fontFamily: "regular", |
|
|
|
|
fontSize: mobile ? fontSize.sm : fontSize.lg, |
|
|
|
|
lineHeight: 22, |
|
|
|
|
textAlign: ios ? "right" : "auto", |
|
|
|
|
}, |
|
|
|
|
]} |
|
|
|
|
> |
|
|
|
|
<div className={`flex w-full ${active ? "" : "flex-row"}`}> |
|
|
|
|
<div className={"flex flex-col flex-1 mb-4"}> |
|
|
|
|
<span className={"text-sm leading-6"}> |
|
|
|
|
{"آدرس:" + " " + address.address} |
|
|
|
|
</Text> |
|
|
|
|
<Text |
|
|
|
|
style={[ |
|
|
|
|
{ |
|
|
|
|
marginTop: mobile ? 4 : 8, |
|
|
|
|
fontFamily: "regular", |
|
|
|
|
fontSize: mobile ? fontSize.sm : fontSize.lg, |
|
|
|
|
lineHeight: 22, |
|
|
|
|
textAlign: ios ? "right" : "auto", |
|
|
|
|
}, |
|
|
|
|
]} |
|
|
|
|
> |
|
|
|
|
</span> |
|
|
|
|
<span className={"text-sm leading-6 mt-1.5"}> |
|
|
|
|
{"نام:" + " " + address.firstName + " " + address.lastName} |
|
|
|
|
</Text> |
|
|
|
|
<Text |
|
|
|
|
style={[ |
|
|
|
|
{ |
|
|
|
|
marginTop: mobile ? 4 : 8, |
|
|
|
|
fontFamily: "regular", |
|
|
|
|
fontSize: mobile ? fontSize.sm : fontSize.lg, |
|
|
|
|
lineHeight: 22, |
|
|
|
|
textAlign: ios ? "right" : "auto", |
|
|
|
|
}, |
|
|
|
|
]} |
|
|
|
|
> |
|
|
|
|
</span> |
|
|
|
|
<span className={"text-sm leading-6 mt-1.5"}> |
|
|
|
|
{"کد پستی:" + " " + address.postalCode} |
|
|
|
|
</Text> |
|
|
|
|
<Text |
|
|
|
|
style={[ |
|
|
|
|
{ |
|
|
|
|
marginTop: mobile ? 4 : 8, |
|
|
|
|
fontFamily: "regular", |
|
|
|
|
fontSize: mobile ? fontSize.sm : fontSize.lg, |
|
|
|
|
lineHeight: 22, |
|
|
|
|
textAlign: ios ? "right" : "auto", |
|
|
|
|
}, |
|
|
|
|
]} |
|
|
|
|
> |
|
|
|
|
</span> |
|
|
|
|
<span className={"text-sm leading-6 mt-1.5"}> |
|
|
|
|
{"شماره تماس:" + " " + address.cellphone} |
|
|
|
|
</Text> |
|
|
|
|
</View> |
|
|
|
|
</span> |
|
|
|
|
</div> |
|
|
|
|
{!active && ( |
|
|
|
|
<Svg xmlns="http://www.w3.org/2000/svg" width={24} height={24}> |
|
|
|
|
<G |
|
|
|
|
fill={Colors.theme1[colorScheme].gray20} |
|
|
|
|
data-name="vuesax/linear/more" |
|
|
|
|
> |
|
|
|
|
<Path d="M10 19a2 2 0 1 0 2-2 2.006 2.006 0 0 0-2 2Z" /> |
|
|
|
|
<Path |
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" width={24} height={24}> |
|
|
|
|
<g fill={"#aaa"} data-name="vuesax/linear/more"> |
|
|
|
|
<path d="M10 19a2 2 0 1 0 2-2 2.006 2.006 0 0 0-2 2Z" /> |
|
|
|
|
<path |
|
|
|
|
data-name="Vector" |
|
|
|
|
d="M10 5a2 2 0 1 0 2-2 2.006 2.006 0 0 0-2 2ZM10 12a2 2 0 1 0 2-2 2.006 2.006 0 0 0-2 2Z" |
|
|
|
|
/> |
|
|
|
|
</G> |
|
|
|
|
</Svg> |
|
|
|
|
</g> |
|
|
|
|
</svg> |
|
|
|
|
)} |
|
|
|
|
</View> |
|
|
|
|
|
|
|
|
|
<CustomPressable |
|
|
|
|
title={"مشاهده روی نقشه"} |
|
|
|
|
backgroundColor={ |
|
|
|
|
active |
|
|
|
|
? Colors.theme1[colorScheme].greenCF |
|
|
|
|
: Colors.theme1[colorScheme].gray20 + "66" |
|
|
|
|
} |
|
|
|
|
color={"white"} |
|
|
|
|
border={{ color: "#196EC0", width: 0 }} |
|
|
|
|
width={"100%"} |
|
|
|
|
onPress={() => {}} |
|
|
|
|
</div> |
|
|
|
|
<Button |
|
|
|
|
title="نمایش روی نقشه" |
|
|
|
|
backgroundColor={isDark ? "bg-transparent" : "bg-blueC0"} |
|
|
|
|
border={{ |
|
|
|
|
color: isDark ? "#ffffff55" : "#196EC055", |
|
|
|
|
width: "0px", |
|
|
|
|
}} |
|
|
|
|
width="100%" |
|
|
|
|
color={isDark ? "text-blueC0" : "text-white"} |
|
|
|
|
onClick={() => {}} |
|
|
|
|
/> |
|
|
|
|
</View> |
|
|
|
|
</Pressable> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -200,84 +102,28 @@ const ProfileAddress = ({ |
|
|
|
|
}, []); |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<SafeAreaView |
|
|
|
|
style={{ |
|
|
|
|
paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0, |
|
|
|
|
position: "relative", |
|
|
|
|
backgroundColor: "white", |
|
|
|
|
flex: 1, |
|
|
|
|
paddingBottom: 20, |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
<Navbar |
|
|
|
|
headerOptions={{ |
|
|
|
|
logo: false, |
|
|
|
|
menu: false, |
|
|
|
|
hamburgerMenu: false, |
|
|
|
|
title: "آدرسها", |
|
|
|
|
bookmark: false, |
|
|
|
|
qr: false, |
|
|
|
|
back: true, |
|
|
|
|
}} |
|
|
|
|
/> |
|
|
|
|
<div className="flex-1 flex flex-col relative"> |
|
|
|
|
{addresses.length > 0 ? ( |
|
|
|
|
<ScrollView |
|
|
|
|
contentContainerStyle={styles.contentContainerStyle} |
|
|
|
|
style={[styles.container]} |
|
|
|
|
onLayout={() => setHeight(Dimensions.get("window").height)} |
|
|
|
|
> |
|
|
|
|
<View style={tw("w-full mt-2 px-4")}> |
|
|
|
|
<View style={tw("p-0 m-0 flex ")}> |
|
|
|
|
{addresses.map((address, index) => ( |
|
|
|
|
<Location |
|
|
|
|
address={address} |
|
|
|
|
key={index} |
|
|
|
|
active={userAddressId === address?.id} |
|
|
|
|
/> |
|
|
|
|
))} |
|
|
|
|
</View> |
|
|
|
|
</View> |
|
|
|
|
</ScrollView> |
|
|
|
|
<div className="w-full mt-2 px-4"> |
|
|
|
|
<div className="p-0 m-0 flex "> |
|
|
|
|
{addresses.map((address, index) => ( |
|
|
|
|
<Location |
|
|
|
|
address={address} |
|
|
|
|
key={index} |
|
|
|
|
active={userAddressId === address?.id} |
|
|
|
|
/> |
|
|
|
|
))} |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
) : ( |
|
|
|
|
<Empty text="هیچ آدرسی ثبت نشده :(" /> |
|
|
|
|
)} |
|
|
|
|
<View style={tw("w-full px-4")}> |
|
|
|
|
<TouchableOpacity |
|
|
|
|
style={[ |
|
|
|
|
{ |
|
|
|
|
backgroundColor: Colors.theme1[colorScheme].greenCF + "05", |
|
|
|
|
borderColor: Colors.theme1[colorScheme].greenCF, |
|
|
|
|
borderWidth: 1.5, |
|
|
|
|
}, |
|
|
|
|
tw( |
|
|
|
|
`flex flex-row-reverse self-end justify-center py-2 rounded-md items-center mt-4 w-full` |
|
|
|
|
), |
|
|
|
|
]} |
|
|
|
|
onPress={() => navigation.push("CreateAddress")} |
|
|
|
|
> |
|
|
|
|
<Text |
|
|
|
|
style={{ |
|
|
|
|
fontFamily: "bold", |
|
|
|
|
fontSize: fontSize.tiny, |
|
|
|
|
color: Colors.theme1[colorScheme].greenCF, |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
یک آدرس جدید اضافه کنید |
|
|
|
|
</Text> |
|
|
|
|
<Text |
|
|
|
|
style={{ |
|
|
|
|
marginTop: 3, |
|
|
|
|
marginRight: 5, |
|
|
|
|
fontSize: fontSize.xl3, |
|
|
|
|
color: Colors.theme1[colorScheme].greenCF, |
|
|
|
|
fontFamily: "bold", |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
+ |
|
|
|
|
</Text> |
|
|
|
|
</TouchableOpacity> |
|
|
|
|
</View> |
|
|
|
|
</SafeAreaView> |
|
|
|
|
<FloatingButton |
|
|
|
|
action={() => navigation("/createAddress")} |
|
|
|
|
position={{ bottom: 100, right: 16 }} |
|
|
|
|
size={16} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -287,6 +133,7 @@ const mapStateToProps = (state) => ({ |
|
|
|
|
loading: state.userFactor.loading, |
|
|
|
|
addresses: state.userAddress.list, |
|
|
|
|
mobile: state.publicApi.mobile, |
|
|
|
|
isDark: state.publicApi.isDark, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
const mapDispatchToProps = { |
|
|
|
@ -296,16 +143,3 @@ const mapDispatchToProps = { |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
export default connect(mapStateToProps, mapDispatchToProps)(ProfileAddress); |
|
|
|
|
|
|
|
|
|
const styles = StyleSheet.create({ |
|
|
|
|
contentContainerStyle: { |
|
|
|
|
paddingBottom: 100, |
|
|
|
|
position: "relative", |
|
|
|
|
}, |
|
|
|
|
container: { |
|
|
|
|
backgroundColor: "white", |
|
|
|
|
flexDirection: "column", |
|
|
|
|
paddingVertical: 0, |
|
|
|
|
paddingHorizontal: 0, |
|
|
|
|
}, |
|
|
|
|
}); |
|
|
|
|