import { useEffect, useState } from 'react' import { Routes, Route } from 'react-router-dom' import { v4 as uuid } from 'uuid' import localforage from 'localforage' import Box from '@mui/material/Box' import { Home } from 'pages/Home/' import { PublicRoom } from 'pages/PublicRoom/' import { UserSettings } from 'models/settings' import { PersistedStorageKeys } from 'models/storage' export interface BootstrapProps { persistedStorage?: typeof localforage getUuid?: typeof uuid } function Bootstrap({ persistedStorage = localforage.createInstance({ name: 'chitchatter', description: 'Persisted settings data for chitchatter', }), getUuid = uuid, }: BootstrapProps) { const [hasLoadedSettings, setHasLoadedSettings] = useState(false) const [settings, setSettings] = useState({ userId: getUuid() }) const { userId } = settings useEffect(() => { ;(async () => { if (hasLoadedSettings) return const persistedUserSettings = await persistedStorage.getItem( PersistedStorageKeys.USER_SETTINGS ) if (persistedUserSettings) { setSettings(persistedUserSettings) } else { await persistedStorage.setItem( PersistedStorageKeys.USER_SETTINGS, settings ) } setHasLoadedSettings(true) })() }, [hasLoadedSettings, persistedStorage, settings, userId]) return ( {hasLoadedSettings ? ( {['/', '/index.html'].map(path => ( } /> ))} } /> ) : null} ) } export default Bootstrap