mirror of
https://github.com/henrygd/beszel.git
synced 2025-12-17 02:36:17 +01:00
- Add /smart route to view SMART data across all systems - Store SMART devices in new smart_devices collection - Auto-fetch SMART data when system first comes online - Add refresh/delete actions per device with realtime updates - Add navbar and command palette entries
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
import { createRouter } from "@nanostores/router"
|
|
|
|
const routes = {
|
|
home: "/",
|
|
containers: "/containers",
|
|
smart: "/smart",
|
|
system: `/system/:id`,
|
|
settings: `/settings/:name?`,
|
|
forgot_password: `/forgot-password`,
|
|
request_otp: `/request-otp`,
|
|
} as const
|
|
|
|
/**
|
|
* The base path of the application.
|
|
* This is used to prepend the base path to all routes.
|
|
*/
|
|
export const basePath = BESZEL?.BASE_PATH || ""
|
|
|
|
/**
|
|
* Prepends the base path to the given path.
|
|
* @param path The path to prepend the base path to.
|
|
* @returns The path with the base path prepended.
|
|
*/
|
|
export const prependBasePath = (path: string) => (basePath + path).replaceAll("//", "/")
|
|
|
|
// prepend base path to routes
|
|
for (const route in routes) {
|
|
// @ts-expect-error need as const above to get nanostores to parse types properly
|
|
routes[route] = prependBasePath(routes[route])
|
|
}
|
|
|
|
export const $router = createRouter(routes, { links: false })
|
|
|
|
/** Navigate to url using router
|
|
* Base path is automatically prepended if serving from subpath
|
|
*/
|
|
export const navigate = (urlString: string) => {
|
|
$router.open(urlString)
|
|
}
|
|
|
|
export function Link(props: React.AnchorHTMLAttributes<HTMLAnchorElement>) {
|
|
return (
|
|
<a
|
|
{...props}
|
|
onClick={(e) => {
|
|
e.preventDefault()
|
|
const href = props.href || ""
|
|
if (e.ctrlKey || e.metaKey) {
|
|
window.open(href, "_blank")
|
|
} else {
|
|
navigate(href)
|
|
props.onClick?.(e)
|
|
}
|
|
}}
|
|
></a>
|
|
)
|
|
}
|