import React, { useState } from 'react'; import { Box, Title, Tabs, Stack, ActionIcon, Group, Select, MantineProvider } from '@mantine/core'; import { Notifications } from '@mantine/notifications'; import { ModalsProvider } from '@mantine/modals'; import { IconUsers, IconUserPlus, IconStar, IconStarFilled } from '@tabler/icons-react'; import UserManagement from './components/UserManagement'; const App: React.FC = () => { // Determine current route based on pathname const getCurrentRoute = () => { const path = window.location.pathname; if (path.includes('/create')) return 'create'; return 'users'; }; const [currentRoute, setCurrentRoute] = useState(getCurrentRoute()); const [isFavorited, setIsFavorited] = useState(false); const [selectedColor, setSelectedColor] = useState(''); // Listen for URL changes (for when the shell navigates) React.useEffect(() => { const handlePopState = () => { setCurrentRoute(getCurrentRoute()); }; window.addEventListener('popstate', handlePopState); return () => window.removeEventListener('popstate', handlePopState); }, []); const handleTabChange = (value: string | null) => { if (value) { // Use history.pushState to update URL and notify shell router const basePath = '/app/user'; const newPath = value === 'users' ? basePath : `${basePath}/${value}`; // Update the URL and internal state window.history.pushState(null, '', newPath); setCurrentRoute(value); // Dispatch a custom event so shell can respond if needed window.dispatchEvent(new PopStateEvent('popstate', { state: null })); } }; const toggleFavorite = () => { setIsFavorited(prev => !prev); }; const colorOptions = [ { value: 'red', label: 'Red' }, { value: 'blue', label: 'Blue' }, { value: 'green', label: 'Green' }, { value: 'purple', label: 'Purple' }, { value: 'orange', label: 'Orange' }, { value: 'pink', label: 'Pink' }, { value: 'teal', label: 'Teal' }, ]; const renderContent = () => { switch (currentRoute) { case 'users': case 'create': default: return ; } }; return (
User Management {isFavorited ? ( ) : ( )}
{/* Right-side controls */}