metacubexd/src/components/Header.tsx

108 lines
2.7 KiB
TypeScript
Raw Normal View History

2023-08-27 22:25:41 +08:00
import { A, useLocation, useNavigate } from '@solidjs/router'
2023-08-24 04:20:53 +08:00
import {
IconFileStack,
IconGlobe,
IconHome,
IconNetwork,
IconNetworkOff,
2023-08-28 22:28:30 +08:00
IconPalette,
2023-08-24 04:20:53 +08:00
IconRuler,
IconSettings,
} from '@tabler/icons-solidjs'
2023-08-27 22:25:41 +08:00
import { For, Show } from 'solid-js'
import { themes } from '~/constants'
import { setCurTheme, setSelectedEndpoint } from '~/signals'
2023-08-24 04:20:53 +08:00
export const Header = () => {
2023-08-27 22:25:41 +08:00
const location = useLocation()
2023-08-24 04:20:53 +08:00
const navigate = useNavigate()
return (
2023-08-28 22:28:30 +08:00
<ul class="menu rounded-box menu-horizontal sticky left-0 top-0 z-10 flex items-center justify-center gap-2 bg-base-200 p-2">
2023-08-27 22:25:41 +08:00
<Show when={location.pathname !== '/setup'}>
2023-08-28 22:28:30 +08:00
<li>
<A class="tooltip tooltip-bottom" href="/" data-tip="Home">
<IconHome />
</A>
</li>
2023-08-24 04:20:53 +08:00
2023-08-28 22:28:30 +08:00
<li>
<A class="tooltip tooltip-bottom" href="/proxies" data-tip="Proxies">
<IconGlobe />
</A>
</li>
2023-08-24 04:20:53 +08:00
2023-08-28 22:28:30 +08:00
<li>
<A class="tooltip tooltip-bottom" href="/rules" data-tip="Rules">
<IconRuler />
</A>
</li>
2023-08-24 04:20:53 +08:00
2023-08-28 22:28:30 +08:00
<li>
<A
class="tooltip tooltip-bottom"
href="/conns"
data-tip="Connections"
>
<IconNetwork />
</A>
</li>
2023-08-24 04:20:53 +08:00
2023-08-28 22:28:30 +08:00
<li>
<A class="tooltip tooltip-bottom" href="/logs" data-tip="Logs">
<IconFileStack />
</A>
</li>
2023-08-24 04:20:53 +08:00
2023-08-28 22:28:30 +08:00
<li>
<A class="tooltip tooltip-bottom" href="/config" data-tip="Config">
<IconSettings />
</A>
</li>
2023-08-24 04:20:53 +08:00
2023-08-28 22:28:30 +08:00
<li>
<button
class="tooltip tooltip-bottom"
data-tip="Switch Endpoint"
onClick={() => {
setSelectedEndpoint('')
2023-08-24 04:20:53 +08:00
2023-08-28 22:28:30 +08:00
navigate('/setup')
}}
>
<IconNetworkOff />
</button>
</li>
2023-08-27 22:25:41 +08:00
</Show>
2023-08-28 22:28:30 +08:00
<div class="drawer drawer-end w-auto sm:ml-auto">
2023-08-27 22:25:41 +08:00
<input id="themes" type="checkbox" class="drawer-toggle" />
<div class="drawer-content">
2023-08-28 22:28:30 +08:00
<label for="themes" class="btn btn-primary drawer-button btn-sm">
<IconPalette />
2023-08-27 22:25:41 +08:00
</label>
</div>
<div class="drawer-side">
<label for="themes" class="drawer-overlay" />
<ul class="menu rounded-box z-50 gap-2 bg-base-300 p-2 shadow">
<For each={themes}>
{(theme) => (
<li
data-theme={theme}
class="btn btn-xs"
onClick={() => setCurTheme(theme)}
>
{theme}
</li>
)}
</For>
</ul>
</div>
</div>
2023-08-28 22:28:30 +08:00
</ul>
2023-08-24 04:20:53 +08:00
)
}