import { faArrowLeft } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-native-fontawesome";
import { useNavigation } from "@react-navigation/native";
import React, { memo, useRef, useState } from "react";
import {
Dimensions,
ScrollView,
StyleSheet,
Text,
TouchableOpacity,
View,
} from "react-native";
import { createMaterialTopTabNavigator } from "@react-navigation/material-top-tabs";
import CompletedCard from "../../components/profile/my_purchases/CompletedCard";
import MasonryList from "@react-native-seoul/masonry-list";
import { checkOut } from "../../constants/checkout";
import ToPayCard from "../../components/profile/my_purchases/ToPay";
import ToShipCard from "../../components/profile/my_purchases/ToShip";
import ToReceiveCard from "../../components/profile/my_purchases/ToReceive";
import { useEffect } from "react";
import { get_orders_by_customer } from "../../services/api/controllers/order";
// import { user } from "../../constants/user";
import AsyncStorage from "@react-native-async-storage/async-storage";
const Tab = createMaterialTopTabNavigator();
function ToPay({ route }) {
const { purchase } = route.params;
// const cartPurchases = purchase.cartItems.filter(purchase => purchase.status === "CART");
// console.log(purchase?.filter((item) => item.status === "CART"));
const purch = purchase?.filter(
(item) => item.status === "TO PAY" || item.status === "To Pay"
// (item) => item.status === "Cart" || item.status === "CART"
);
const [product, setProduct] = useState(purch ?? []);
const [isEndReached, setEndReached] = useState(false);
const scrollViewRef = useRef(null);
const [item1, setItem1] = useState(20);
const [prod, setProd] = useState([]);
console.log(item1);
const initialProd = () => {
const init = product?.slice(0, item1) ?? [];
setProd(init);
};
useEffect(() => {
initialProd();
}, [product, item1]);
const addProd = () => {
if (item1 <= purch?.length) {
const newArrayProd = [...prod, ...product?.slice(item1, item1 + 10)];
setProd(newArrayProd);
setItem1(item1 + 10); // Update item1 for the next batch
setEndReached(false);
}
};
const handleScroll = (event) => {
const { layoutMeasurement, contentOffset, contentSize } = event.nativeEvent;
const isAtEnd =
layoutMeasurement.height + contentOffset.y >= contentSize.height - 100;
if (isAtEnd && !isEndReached) {
setEndReached(true);
addProd();
}
};
return (
item?._id ?? i}
style={styles.list}
numColumns={1}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => }
containerStyle={styles.container1}
contentContainerStyle={styles.content}
onEndReachedThreshold={0.1}
/>
);
}
function ToShip({ route }) {
const { purchase } = route.params;
const purch = purchase?.filter(
(item) => item.status === "TO SHIP" || item.status === "To Ship"
);
const [product, setProduct] = useState(purch ?? []);
const [isEndReached, setEndReached] = useState(false);
const scrollViewRef = useRef(null);
const [item1, setItem1] = useState(20);
const [prod, setProd] = useState([]);
console.log(item1);
const initialProd = () => {
const init = product?.slice(0, item1) ?? [];
setProd(init);
};
useEffect(() => {
initialProd();
}, [product, item1]);
const addProd = () => {
if (item1 <= purch?.length) {
const newArrayProd = [...prod, ...product?.slice(item1, item1 + 10)];
setProd(newArrayProd);
setItem1(item1 + 10); // Update item1 for the next batch
setEndReached(false);
}
};
const handleScroll = (event) => {
const { layoutMeasurement, contentOffset, contentSize } = event.nativeEvent;
const isAtEnd =
layoutMeasurement.height + contentOffset.y >= contentSize.height - 100;
if (isAtEnd && !isEndReached) {
setEndReached(true);
addProd();
}
};
return (
item.id}
style={styles.list}
numColumns={1}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => }
containerStyle={styles.container1}
contentContainerStyle={styles.content}
onEndReachedThreshold={0.1}
/>
);
}
function ToReceive({ route }) {
const { purchase } = route.params;
const purch = purchase?.filter(
(item) => item.status === "To Receive" || item.status === "TO RECEIVE"
);
const [product, setProduct] = useState(purch ?? []);
const [isEndReached, setEndReached] = useState(false);
const scrollViewRef = useRef(null);
const [item1, setItem1] = useState(20);
const [prod, setProd] = useState([]);
console.log(item1);
const initialProd = () => {
const init = product?.slice(0, item1) ?? [];
setProd(init);
};
useEffect(() => {
initialProd();
}, [product, item1]);
const addProd = () => {
if (item1 <= purch?.length) {
const newArrayProd = [...prod, ...product?.slice(item1, item1 + 10)];
setProd(newArrayProd);
setItem1(item1 + 10); // Update item1 for the next batch
setEndReached(false);
}
};
const handleScroll = (event) => {
const { layoutMeasurement, contentOffset, contentSize } = event.nativeEvent;
const isAtEnd =
layoutMeasurement.height + contentOffset.y >= contentSize.height - 100;
if (isAtEnd && !isEndReached) {
setEndReached(true);
addProd();
}
};
return (
item.id}
style={styles.list}
numColumns={1}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => }
containerStyle={styles.container1}
contentContainerStyle={styles.content}
onEndReachedThreshold={0.1}
/>
);
}
function Completed({ route }) {
const { purchase } = route.params;
const purch = purchase?.filter(
(item) => item.status === "Completed" || item.status === "COMPLETED"
);
const [product, setProduct] = useState(purch ?? []);
const [isEndReached, setEndReached] = useState(false);
const scrollViewRef = useRef(null);
const [item1, setItem1] = useState(20);
const [prod, setProd] = useState([]);
console.log(item1);
const initialProd = () => {
const init = product?.slice(0, item1) ?? [];
setProd(init);
};
useEffect(() => {
initialProd();
}, [product, item1]);
const addProd = () => {
if (item1 <= purch?.length) {
const newArrayProd = [...prod, ...product?.slice(item1, item1 + 10)];
setProd(newArrayProd);
setItem1(item1 + 10); // Update item1 for the next batch
setEndReached(false);
}
};
const handleScroll = (event) => {
const { layoutMeasurement, contentOffset, contentSize } = event.nativeEvent;
const isAtEnd =
layoutMeasurement.height + contentOffset.y >= contentSize.height - 100;
if (isAtEnd && !isEndReached) {
setEndReached(true);
addProd();
}
};
return (
item.id}
style={styles.list}
numColumns={1}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => }
containerStyle={styles.container1}
contentContainerStyle={styles.content}
onEndReachedThreshold={0.1}
/>
);
}
const MyPurchases = ({ route }) => {
const navigation = useNavigation();
const [purchase, setpurchase] = useState(null);
const [purchaseSort, setpurchaseSort] = useState(null);
const [load, setload] = useState(true);
const [user, setuser] = useState([]);
const { tab } = route.params ?? "ToPay";
useEffect(() => {
/* ---------------Check for the user saved email--------------- */
AsyncStorage.getItem("userData")
.then((pass) => {
const userDataArray = JSON.parse(pass);
setuser(userDataArray);
console.log(pass);
get_orders_by_customer({
id: userDataArray[0]?._id,
})
.then((result) => {
console.log("result" + result.data);
if (result.error) {
setError(result.error);
} else {
setpurchase(result.data);
//---------- CREATE A CART LIST CATEGORIZED BY SHOP ANME -------------//
const purchaseSorted = result.data?.reduce((acc, item) => {
const shopId = item.items[0].vendor_id;
const shopName = item.items[0].vendor_name;
// const existingShop = acc.find((shop) => shop.shopId === shopId);
// console.log("shop: " + shopName);
// // if (item.status === "CART") {
// if (existingShop) {
// // Shop already exists, add the item to its cartItems array
// existingShop.cartItems.push({ ...item, selected: false }); // Initialize selected to false
// } else {
// Shop doesn't exist, create a new shop object with selected:false
acc.push({
shopname: shopName,
shopId: shopId,
cartItems: [{ ...item, selected: false }],
selected: false,
shippingFee: 0,
}); // Initialize selected to false
// }
// }
// setload(false);
return acc;
}, []);
setpurchaseSort(purchaseSorted);
console.log(purchaseSorted);
setload(false);
}
})
.catch((error) => {
setError(error.message);
})
.finally(() => {
// setprodIsLoading(false); // Set loading to false when done loading
});
})
.catch((error) => {
console.log(error + "weeewwww");
});
}, []);
useEffect(() => {
// Fetch vendors and update the state
// setload(true)
}, []);
useEffect(() => {
//---------- CREATE A CART LIST CATEGORIZED BY SHOP ANME -------------//
// const purchaseSorted = purchase?.reduce((acc, item) => {
// const shopId = item.items[0].vendor_id;
// const shopName = item.items[0].vendor_name;
// const existingShop = acc.find((shop) => shop.shopId === shopId);
// console.log("shop: " + shopName);
// // if (item.status === "CART") {
// if (existingShop) {
// // Shop already exists, add the item to its cartItems array
// existingShop.cartItems.push({ ...item, selected: false }); // Initialize selected to false
// } else {
// // Shop doesn't exist, create a new shop object with selected:false
// acc.push({
// shopname: shopName,
// shopId: shopId,
// cartItems: [{ ...item, selected: false }],
// selected: false,
// shippingFee: 0,
// }); // Initialize selected to false
// }
// // }
// return acc;
// }, []);
// setpurchaseSort(purchaseSorted);
}, [purchase]);
return (
navigation.navigate("Home")}
style={styles.backIcon}
>
My Purchases
{load === false ? (
{
const dateA = new Date(a.updatedAt);
const dateB = new Date(b.updatedAt);
return dateB - dateA;
}),
}}
/>
{
const dateA = new Date(a.updatedAt);
const dateB = new Date(b.updatedAt);
return dateB - dateA;
}),
}}
/>
{
const dateA = new Date(a.updatedAt);
const dateB = new Date(b.updatedAt);
return dateB - dateA;
}),
}}
/>
{
const dateA = new Date(a.updatedAt);
const dateB = new Date(b.updatedAt);
return dateB - dateA;
}),
}}
/>
) : null}
);
};
const styles = StyleSheet.create({
container: {
backgroundColor: "#ffff",
width: "100%",
height: "100%",
},
wrapper: {
height: "95%",
width: "100%",
justifyContent: "center",
// alignItems:'center'
marginBottom: 20,
},
header: {
alignItems: "center",
width: "100%",
top: 0,
paddingLeft: 15,
flexDirection: "row",
borderColor: "#ddd",
paddingBottom: 15,
borderBottomWidth: 1,
},
headerText: {
fontSize: 16,
fontWeight: "600",
marginLeft: 25,
},
tabCon: {
width: "100%",
height: "100%",
},
list: {
width: "100%",
justifyContent: "center",
alignItems: "center",
padding: 5,
},
});
// export default MyPurchases;
export default memo(MyPurchases);