200 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import React, { useRef, useState } from "react";
 | |
| import {
 | |
|   Animated,
 | |
|   Dimensions,
 | |
|   LayoutAnimation,
 | |
|   Platform,
 | |
|   ScrollView,
 | |
|   StyleSheet,
 | |
|   Text,
 | |
|   TouchableOpacity,
 | |
|   View,
 | |
| } from "react-native";
 | |
| import BottomNav from "../../components/main/BottomNav";
 | |
| import Header from "../../components/main/Header";
 | |
| import Cart from "./Cart";
 | |
| import Chat from "./Chat";
 | |
| import Home from "./Home";
 | |
| import Notification from "./Notification";
 | |
| import Profile from "./Profile";
 | |
| const height = Dimensions.get("window").height;
 | |
| 
 | |
| const Main = ({ cartList }) => {
 | |
|   const [tabActive, settabActive] = useState("home");
 | |
|   // const [switchTab, setswitch] = useState("prod");
 | |
|   const [switchTab, setSwitchTab] = useState("prod");
 | |
|   const animatedValue = useRef(new Animated.Value(0)).current;
 | |
| 
 | |
|   const handleTabPress = (tab) => {
 | |
|     // Determine the target value based on the selected tab
 | |
|     const targetValue = tab === 'prod' ? 0 : 1;
 | |
| 
 | |
|     // Create a spring animation
 | |
|     Animated.spring(animatedValue, {
 | |
|       toValue: targetValue,
 | |
|       friction: 5, // Adjust the friction to control the bounce effect
 | |
|       tension: 10, // Adjust the tension to control the bounce effect
 | |
|       useNativeDriver: true,
 | |
|     }).start();
 | |
| 
 | |
|     // Update the selected tab
 | |
|     setSwitchTab(tab);
 | |
|   };
 | |
| 
 | |
|   // Interpolate the animated value to determine background color
 | |
|   const backgroundColor = animatedValue.interpolate({
 | |
|     inputRange: [0, 1],
 | |
|     outputRange: ['#ffaa00', '#ffaa00'], // Adjust colors as needed
 | |
|   });
 | |
|   return (
 | |
|     <View style={styles.container}>
 | |
|       <ScrollView style={styles.wrapper}>
 | |
|         {tabActive === "home" ? (
 | |
|           <Home tab={switchTab} />
 | |
|         ) : tabActive === "notif" ? (
 | |
|           <Notification />
 | |
|         ) : tabActive === "message" ? (
 | |
|           <Chat />
 | |
|         ) : tabActive === "cart" ? (
 | |
|           <Cart cartList={cartList} />
 | |
|         ) : tabActive === "profile" ? (
 | |
|           <Profile />
 | |
|         ) : (
 | |
|           <Home />
 | |
|         )}
 | |
|       </ScrollView>
 | |
|       <View style={styles.footer}>
 | |
|         {tabActive === "home" ? (
 | |
|          <View style={styles.tabsCon}>
 | |
|          <View style={styles.tabs}>
 | |
|            <TouchableOpacity
 | |
|              style={[
 | |
|               switchTab === 'ven'? styles.tab:styles.tabActive ,
 | |
| 
 | |
|                {
 | |
|                  backgroundColor: switchTab === 'prod' ? backgroundColor : 'transparent',
 | |
|                  transform: [
 | |
|                    {
 | |
|                      translateX: animatedValue.interpolate({
 | |
|                        inputRange: [0, 1],
 | |
|                        outputRange: [-5, 5], // Adjust the bounce distance
 | |
|                      }),
 | |
|                    },
 | |
|                  ],
 | |
|                },
 | |
|              ]}
 | |
|              onPress={() => handleTabPress('prod')}
 | |
|              activeOpacity={0.8}
 | |
|            >
 | |
|              <Text
 | |
|                style={[
 | |
|                  styles.tabText,
 | |
|                  {
 | |
|                    color: switchTab === 'prod' ? '#fff' : '#000',
 | |
|                  },
 | |
|                ]}
 | |
|              >
 | |
|                Products
 | |
|              </Text>
 | |
|            </TouchableOpacity>
 | |
|            <TouchableOpacity
 | |
|              style={[
 | |
|               switchTab === 'prod'? styles.tab:styles.tabActive ,
 | |
|                {
 | |
|                  backgroundColor: switchTab === 'ven' ? backgroundColor : 'transparent',
 | |
|                  transform: [
 | |
|                    {
 | |
|                      translateX: animatedValue.interpolate({
 | |
|                        inputRange: [0, 1],
 | |
|                        outputRange: [-5, 5], // Adjust the bounce distance
 | |
|                      }),
 | |
|                    },
 | |
|                  ],
 | |
|                },
 | |
|              ]}
 | |
|              onPress={() => handleTabPress('ven')}
 | |
|              activeOpacity={0.8}
 | |
|            >
 | |
|              <Text
 | |
|                style={[
 | |
|                  styles.tabText,
 | |
|                  {
 | |
|                    color: switchTab === 'ven' ? '#fff' : '#000',
 | |
|                  },
 | |
|                ]}
 | |
|              >
 | |
|                Vendor
 | |
|              </Text>
 | |
|            </TouchableOpacity>
 | |
|          </View>
 | |
|        </View>
 | |
|         ) : null}
 | |
|         <BottomNav settabActive={settabActive} activeTab={tabActive} />
 | |
|       </View>
 | |
|     </View>
 | |
|   );
 | |
| };
 | |
| const styles = StyleSheet.create({
 | |
|   container: {
 | |
|     backgroundColor: "#fff",
 | |
|     height: "100%",
 | |
|     width: "100%",
 | |
|     justifyContent: "center",
 | |
|     alignItems: "center",
 | |
|   },
 | |
|   header: {
 | |
|     position: "fixed",
 | |
|     width: "100%",
 | |
|     top: 0,
 | |
|   },
 | |
|   footer: {
 | |
|     // position: "absolute",
 | |
|     bottom: 0,
 | |
|     width: "100%",
 | |
|   },
 | |
|   wrapper: {
 | |
|     height: "100%",
 | |
|   },
 | |
|   tabsCon: {
 | |
|     height: 80,
 | |
|     width: "100%",
 | |
|     position: "absolute",
 | |
|     justifyContent: "center",
 | |
|     alignItems: "center",
 | |
|     bottom: 50,
 | |
|   },
 | |
|   tabs: {
 | |
|     // height: 30,
 | |
|     margin: "auto",
 | |
|     flexDirection: "row",
 | |
|     backgroundColor: "#fff",
 | |
|     borderRadius: 15,
 | |
|     overflow: "hidden",
 | |
|     borderWidth: 1,
 | |
|     borderColor: "#ddd",
 | |
|     // padding:10
 | |
|   },
 | |
|   tab: {
 | |
|     paddingVertical: 15,
 | |
|     paddingHorizontal: 25,
 | |
|   },
 | |
|   tabActive: {
 | |
|     backgroundColor: "#ffaa00",
 | |
|     paddingVertical: 15,
 | |
|     paddingHorizontal: 25,
 | |
|     borderRadius: 15,
 | |
|   },
 | |
|   tabText: {
 | |
|     textTransform: "uppercase",
 | |
|     color: "#383838",
 | |
|     fontWeight: "600",
 | |
|   },
 | |
|   tabTextActive: {
 | |
|     textTransform: "uppercase",
 | |
|     color: "#fff",
 | |
|     fontWeight: "600",
 | |
|   },
 | |
| });
 | |
| 
 | |
| export default Main;
 |