import { FC, ReactNode, useEffect, useState } from 'react' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' import { useStore, withAuth } from 'hooks' import BaseLayout from '../' import Error from 'components/ui/Error' import ProductMenu from 'components/ui/ProductMenu' import { generateDatabaseMenu } from './DatabaseMenu.utils' interface Props { title?: string children: ReactNode } const DatabaseLayout: FC = ({ title, children }) => { const { meta, ui, backups } = useStore() const { isInitialized, isLoading, error } = meta.tables const project = ui.selectedProject const router = useRouter() const page = router.pathname.split('/')[4] const [loaded, setLoaded] = useState(isInitialized) useEffect(() => { if (ui.selectedProject) { // Eventually should only load the required stores based on the pages meta.schemas.load() meta.tables.load() meta.roles.load() meta.triggers.load() meta.extensions.load() meta.publications.load() backups.load() } }, [ui.selectedProject]) // Optimization required: load logic should be at the page level // e.g backups page is waiting for meta.tables to load finish when it doesnt even need that data useEffect(() => { if (!isLoading && !loaded) { setLoaded(true) } }, [isLoading]) if (error) { return ( ) } return ( } >
{children}
) } export default withAuth(observer(DatabaseLayout))