import React, { ReactNode, useState } from 'react';
import Sidebar from './Sidebar';
import SearchBar from './SearchBar';
import Link from 'next/link';
import FeedItemDetail from './FeedItemDetail';
interface LayoutProps {
children: ReactNode;
selectedCategory?: string;
selectedFeed?: string;
}
export default function Layout({ children, selectedCategory, selectedFeed }: LayoutProps) {
const [selectedItem, setSelectedItem] = useState<string | null>(null);
// Create a context object to pass to children
const childContext = {
setSelectedItem
};
return (
<div className="flex min-h-screen bg-gray-50">
{/* Left Pane: Sidebar */}
<Sidebar selectedCategory={selectedCategory} selectedFeed={selectedFeed} />
{/* Middle and Right Panes */}
<div className="flex-1 flex flex-col">
{/* Header */}
<header className="bg-white shadow-sm">
<div className="max-w-7xl mx-auto px-4 py-4 sm:px-6 lg:px-8 flex justify-between items-center">
<div>
<Link href="/" className="text-xl font-bold text-gray-900">
RSS Feed Viewer
</Link>
</div>
<SearchBar />
</div>
</header>
{/* Main content - 2 panes side by side */}
<main className="flex-1 overflow-hidden flex">
{/* Middle Pane: Feed Item List */}
<div className="w-1/2 overflow-y-auto border-r border-gray-200">
<div className="px-4 sm:px-6 lg:px-8 py-4">
{/* Create a context provider for the children */}
<LayoutContext.Provider value={childContext}>
{children}
</LayoutContext.Provider>
</div>
</div>
{/* Right Pane: Content Display */}
<div className="w-1/2 overflow-y-auto">
{selectedItem ? (
<FeedItemDetail itemId={selectedItem} />
) : (
<div className="flex items-center justify-center h-full text-gray-500">
<p>Select an item to view its content</p>
</div>
)}
</div>
</main>
{/* Footer */}
<footer className="bg-white shadow-sm-top py-4">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center text-gray-500 text-sm">
RSS Feed Viewer - View and manage your RSS feeds
</div>
</footer>
</div>
</div>
);
}
// Create a context for the layout
export const LayoutContext = React.createContext<{
setSelectedItem: (itemId: string | null) => void;
}>({
setSelectedItem: () => {}
});