metacubexd/src/App.tsx

71 lines
2.1 KiB
TypeScript
Raw Normal View History

import { Navigate, Route, Routes, useNavigate } from '@solidjs/router'
import { Show, createEffect, lazy, onMount } from 'solid-js'
import { Header } from '~/components'
2023-09-03 03:36:12 +08:00
import { ROUTES } from '~/constants'
import {
curTheme,
endpoint,
2023-09-04 20:00:43 +08:00
renderProxiesInSamePage,
selectedEndpoint,
useAutoSwitchTheme,
useProxies,
} from '~/signals'
2023-08-24 04:20:53 +08:00
const Setup = lazy(() => import('~/pages/Setup'))
const Overview = lazy(() => import('~/pages/Overview'))
const Connections = lazy(() => import('~/pages/Connections'))
const Logs = lazy(() => import('~/pages/Logs'))
const Proxies = lazy(() => import('~/pages/Proxies'))
2023-09-02 16:58:22 +08:00
const ProxyProvider = lazy(() => import('~/pages/ProxyProvider'))
const Rules = lazy(() => import('~/pages/Rules'))
const Config = lazy(() => import('~/pages/Config'))
2023-08-24 04:20:53 +08:00
export const App = () => {
const navigate = useNavigate()
2023-09-02 19:06:02 +08:00
useAutoSwitchTheme()
createEffect(() => {
if (selectedEndpoint() && endpoint()) {
2023-09-03 20:23:02 +08:00
void useProxies().updateProxies()
}
})
onMount(() => {
2023-08-24 04:20:53 +08:00
if (!selectedEndpoint()) {
2023-09-04 13:08:05 +08:00
navigate(ROUTES.Setup)
2023-08-24 04:20:53 +08:00
}
})
return (
<div
2023-09-05 02:12:10 +08:00
class="relative flex h-screen flex-col subpixel-antialiased p-safe"
data-theme={curTheme()}
>
2023-08-27 22:25:41 +08:00
<Header />
2023-08-24 04:20:53 +08:00
<div class="flex-1 overflow-y-auto overflow-x-hidden p-2 sm:p-4">
2023-08-24 04:20:53 +08:00
<Routes>
<Show when={selectedEndpoint()}>
2023-09-03 03:36:12 +08:00
<Route path={ROUTES.Overview} component={Overview} />
<Route path={ROUTES.Proxies} component={Proxies} />
2023-09-04 20:00:43 +08:00
<Show when={!renderProxiesInSamePage()}>
<Route path={ROUTES.ProxyProvider} component={ProxyProvider} />
</Show>
2023-09-03 03:36:12 +08:00
<Route path={ROUTES.Rules} component={Rules} />
<Route path={ROUTES.Conns} component={Connections} />
<Route path={ROUTES.Log} component={Logs} />
<Route path={ROUTES.Config} component={Config} />
<Route path="*" element={<Navigate href={ROUTES.Overview} />} />
2023-08-24 04:20:53 +08:00
</Show>
2023-09-04 13:08:05 +08:00
<Route
path={selectedEndpoint() ? ROUTES.Setup : '*'}
component={Setup}
/>
2023-08-24 04:20:53 +08:00
</Routes>
</div>
</div>
)
}