import React, { createContext, useContext } from 'react'; import * as styles from './Layout.styles'; import { DEFAULT_THEME } from './Layout.constants'; import { AsideProps, LayoutProps, PageTheme, MainProps } from './Layout.types'; import { Divider } from '@/components/Divider/Divider'; // Context to share page theme with child components const PageThemeContext = createContext(DEFAULT_THEME); export const usePageTheme = () => useContext(PageThemeContext); export const Layout: React.FC = ({ children, theme = DEFAULT_THEME }) => { // Split children into Main and Aside const childArray = React.Children.toArray(children); const mainComponent = childArray.find( (child) => React.isValidElement(child) && child.type === Main ); const asideComponent = childArray.find( (child) => React.isValidElement(child) && child.type === Aside ); return (
{mainComponent} {asideComponent && } {asideComponent}
); }; export const Main: React.FC = ({ children }) => { return
{children}
; }; export const Aside: React.FC = ({ children }) => { const theme = usePageTheme(); return ; };