import { Navigate, Route, RouterProvider, createBrowserRouter, createRoutesFromElements, useLocation, useRouteLoaderData } from 'react-router-dom'
import PropTypes from 'prop-types'
import { UserProvider } from './store/user'
import { ajax } from './utils/fetch'
import Layout from './components/Layout'
import Index from './pages/Index'
import Login from './pages/Login'
import Register from './pages/Register'
import NoMatch from './pages/NoMatch'
import Engine from './pages/Engine'
import Quests from './pages/Quests'
import User from './pages/User'
import { useRole } from './utils/roles'
import EditQuest from './pages/admin/Quest'
import AdminQuest from './pages/admin/Quests'
const router = createBrowserRouter(
createRoutesFromElements(
}
loader={async () => ajax('/api/user').catch(x => { console.log(x); return null })}
>
}
/>
}
loader={() => ajax('/api/games').catch(x => { console.log(x); return null })}
/>
} />
} />
} />
}
loader={({ params }) => ajax(`/api/engine/${params.gameId}`).catch(x => { console.log(x); return null })}
/>
}
// loader={() => ajax(`/api/admin/games`)}
/>
}
loader={async ({ params }) => {
const quest = await ajax(`/api/admin/games/${params.gameId}`)
const files = await ajax(`/api/admin/file/${params.gameId}`)
return { quest, files }
}
}
/>
}
loader={() => ajax('/api/admin/games')}
/>
} />
)
)
function App () {
return (
)
}
function Auth (props) {
const baseUser = useRouteLoaderData('root')
const { user } = UserProvider.useContainer()
const { hasRole } = useRole()
const location = useLocation()
if (!user && !baseUser) {
return
}
if (props.role && !hasRole(props.role)) {
return null
}
return props.children
}
Auth.propTypes = {
children: PropTypes.any,
role: PropTypes.string
}
export default App