import React, { ReactNode, useState } from 'react'; import { Link, useLocation } from 'react-router-dom'; import { LayoutDashboard, ShoppingBag, Download, MapPin, Heart, User, LogOut } from 'lucide-react'; import { useModules } from '@/hooks/useModules'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@/components/ui/alert-dialog'; interface AccountLayoutProps { children: ReactNode; } export function AccountLayout({ children }: AccountLayoutProps) { const location = useLocation(); const user = (window as any).woonoowCustomer?.user; const { isEnabled } = useModules(); const wishlistEnabled = (window as any).woonoowCustomer?.settings?.wishlist_enabled !== false; const [isLoggingOut, setIsLoggingOut] = useState(false); const allMenuItems = [ { id: 'dashboard', label: 'Dashboard', path: '/my-account', icon: LayoutDashboard }, { id: 'orders', label: 'Orders', path: '/my-account/orders', icon: ShoppingBag }, { id: 'downloads', label: 'Downloads', path: '/my-account/downloads', icon: Download }, { id: 'addresses', label: 'Addresses', path: '/my-account/addresses', icon: MapPin }, { id: 'wishlist', label: 'Wishlist', path: '/my-account/wishlist', icon: Heart }, { id: 'account-details', label: 'Account Details', path: '/my-account/account-details', icon: User }, ]; // Filter out wishlist if module disabled or settings disabled const menuItems = allMenuItems.filter(item => item.id !== 'wishlist' || (isEnabled('wishlist') && wishlistEnabled) ); const handleLogout = async () => { setIsLoggingOut(true); try { const apiRoot = (window as any).woonoowCustomer?.apiRoot || '/wp-json/woonoow/v1'; const nonce = (window as any).woonoowCustomer?.nonce || ''; await fetch(`${apiRoot}/auth/logout`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': nonce, }, credentials: 'include', }); // Full page reload to clear cookies and refresh state window.location.href = window.location.origin + '/store/'; } catch (error) { // Even on error, try to redirect and let server handle session window.location.href = window.location.origin + '/store/'; } }; const isActive = (path: string) => { if (path === '/my-account') { return location.pathname === '/my-account'; } return location.pathname.startsWith(path); }; // Logout Button with AlertDialog const LogoutButton = () => ( Log out? Are you sure you want to log out of your account? You'll need to sign in again to access your orders and account details. Cancel Log Out ); // Sidebar Navigation const SidebarNav = () => ( ); // Tab Navigation (Mobile) const TabNav = () => (
); // Responsive layout: Tabs on mobile, Sidebar on desktop return (
{/* Mobile: Tab Navigation */} {/* Desktop: Sidebar + Content */}
{children}
); }