import React, { useState, useEffect } from 'react'; import styles from './LinktreePage.module.css'; // Import the module.css file import { loginUser } from "../helpers/userHelpers"; import { ThreeDots } from "react-loader-spinner"; import { useNavigate } from "react-router-dom"; import { getLocalStorage, removeLocalStorage } from "../helpers/localStorageHelpers"; import { getAllCafeOwner, createCafeOwner } from "../helpers/userHelpers"; import { getOwnedCafes, createCafe, updateCafe } from "../helpers/cafeHelpers"; import { getMyTransactions } from "../helpers/transactionHelpers"; import { unsubscribeUser } from "../helpers/subscribeHelpers.js"; import Header from '../components/Header'; const LinktreePage = ({ user, setModal }) => { const navigate = useNavigate(); const [inputtingPassword, setInputtingPassword] = useState(false); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(false); const [items, setItems] = useState([]); const [isCreating, setIsCreating] = useState(false); const [newItem, setNewItem] = useState({ name: "", type: "" }); const [isModalOpen, setIsModalOpen] = useState(false); const [expanded, setIsExpand] = useState(false); const [expandedCafeId, setExpandedCafeId] = useState(null); // Track which cafe is expanded const handleToggleExpand = (cafeId) => { setExpandedCafeId(expandedCafeId === cafeId ? null : cafeId); // Toggle expand for a specific cafe }; const handleMyTransactions = async () => { try { setError(false); setLoading(true); const response = await getMyTransactions(); if (response) { console.log(response) return response; } else { setError(true); // Trigger error state in the button console.error('Login failed'); } } catch (error) { setError(true); console.error('Error occurred while logging in:', error.message); } finally { setLoading(false); // Ensure loading state is cleared } }; const handleLogin = async () => { try { setError(false); setLoading(true); const response = await loginUser(username, password); if (response.success) { localStorage.setItem('auth', response.token); if (response.cafeId !== null) { window.location.href = response.cafeId; } else { let destination = '/'; window.location.href = destination; } } else { setError(true); // Trigger error state in the button console.error('Login failed'); } } catch (error) { setError(true); console.error('Error occurred while logging in:', error.message); } finally { setLoading(false); // Ensure loading state is cleared } }; const handleModalClose = () => { setIsModalOpen(false); }; const handleLogout = () => { removeLocalStorage("auth"); unsubscribeUser(); navigate(0); }; useEffect(() => { if (user && user.roleId === 0) { setLoading(true); getAllCafeOwner() .then((data) => { setItems(data); setLoading(false); }) .catch((error) => { console.error("Error fetching cafe owners:", error); setLoading(false); }); } if (user && user.roleId === 1) { setLoading(true); getOwnedCafes(user.userId) .then((data) => { setItems(data); setLoading(false); }) .catch((error) => { console.error("Error fetching owned cafes:", error); setLoading(false); }); } if (user && user.roleId == 3) { handleMyTransactions() .then((data) => { setItems(data); setLoading(false); }) .catch((error) => { console.error("Error fetching owned cafes:", error); setLoading(false); }); } }, [user]); const handleCreateItem = () => { if (user.roleId < 1) { // Create admin functionality createCafeOwner(newItem.email, newItem.username, newItem.password) .then((newitem) => { setItems([...items, { userId: newitem.userId, name: newitem.username }]); setIsCreating(false); setNewItem({ name: "", type: "" }); }) .catch((error) => { console.error("Error creating admin:", error); }); } else { // Create cafe functionality createCafe(newItem.name) .then((newitem) => { setItems([...items, { cafeId: newitem.cafeId, name: newitem.name }]); setIsCreating(false); setNewItem({ name: "", type: "" }); }) .catch((error) => { console.error("Error creating cafe:", error); }); } }; return (
{/* SVG Icon */} {user && user.roleId < 2 && (
{loading && } {items.map((item, index) => (
navigate("/" + item.cafeId)} className={styles.rectangle} >

{item.name || item.username}

{item.report?.totalIncome}

))} {user && user.roleId < 1 ? (
setIsCreating(true)} > Create Client
) : (
setIsCreating(true)} > +
)}
)} {(user.length == 0 || user.roleId > 1) && <>
{/* Main Heading */}
COBA KEDAIMASTER
pemesanan langsung dari meja
pengelolaan pesanan dan keuangan
tentukan suasana musik
pengelolaan stok dan manajemen
jangan pernah ragukan pelanggan
diskon 0%
{/* Sub Heading */}
Solusi berbasis web untuk memudahkan pengelolaan kedai, dengan fitur yang mempermudah pemilik, kasir, dan tamu berinteraksi.
{getLocalStorage('auth') == null &&
setUsername(e.target.value)} />
setPassword(e.target.value)} />
} {/* Footer Links */}
Pelajari lebih lanjut Tentang kedaimaster.com setModal('join')} > Daftarkan kedaimu
Linktree visual e.target.src = '/fallback-image.png'} />
{user.length != 0 &&
setIsExpand(!expanded)} className={styles.userInfoExpandButton}> {!expanded ? : }
{items.map((item, index) => (
handleToggleExpand(item.cafeId)} key={index}> {/* Render cafes */}

{item.name || item.username}

{/* Render transactions if the cafe is expanded */} {expandedCafeId === item.cafeId && item.transactions && (
{item.transactions.map((transaction, transactionIndex) => (
{transaction.detailedTransactions && transaction.detailedTransactions.map((detailedTransaction, detailedTransactionIndex) => (

Quantity: {detailedTransaction.qty}

{detailedTransaction.Item && (

Item Name: {detailedTransaction.Item.name}

Price: {detailedTransaction.Item.price}

)}
))}
))}
)}
))}
}
}
); }; export default LinktreePage;