Layout (components/base/Layout.tsx)¶
Overview¶
Core layout component that provides the application's main structure and handles authentication, navigation, and component integration.
Features¶
- Authentication handling
- Responsive layout
- Sidebar integration
- Loading states
- Chatbot modal
- Navigation control
- Session management
Dependencies¶
import React, { useState, useEffect, ReactNode } from 'react'
import { useRouter } from 'next/router'
import { useSession } from 'next-auth/react'
import SideBar from '../base/SideBar'
import LoadingPage from '../Loading/Loading'
import ModernChatbot from '../ModernChatbot'
import Navbar from '../Navbar/Navbar'
import { LayoutProvider } from '../base/LayoutProvider'
import 'bootstrap/dist/css/bootstrap.min.css'
Props¶
Implementation¶
State Management¶
const { data: session, status } = useSession();
const [isLoading, setIsLoading] = useState(false);
const [canOpenChatBotModal, setCanOpenChatBotModal] = useState<boolean>(false);
const [isSidebarCollapsed, setIsSidebarCollapsed] = useState<boolean>(false);
const [isLoginRedirected, setIsLoginRedirected] = useState<boolean>(false);
Methods¶
const openChatBotModal = () => {
setCanOpenChatBotModal(true);
};
const closeOpenChatBotModal = () => {
setCanOpenChatBotModal(false);
};
Unique Functionality¶
- Authentication state management
- Protected route handling
- Dynamic sidebar control
- Modal system management
- Loading state control
HTML Structure¶
<LayoutProvider>
<div>
{isLoading && (
<div className="loading">
<LoadingPage />
</div>
)}
<div className={`h-full flex flex-row ${
session ? 'justify-start' : 'justify-center'
} bg-blue-225`}>
{session && <SideBar />}
{/* Additional layout content */}
</div>
</div>
</LayoutProvider>
API Integration¶
- Uses NextAuth session management
- Integrates with router for navigation
Components Used¶
Notes¶
- Implements responsive design
- Uses Bootstrap for styling
- Manages protected routes
- Controls component visibility
- Handles authentication flow