mirror of
https://github.com/KevinMidboe/infra-map.git
synced 2025-10-29 17:40:28 +00:00
dynamic sidebar elements based on routes on disk
This commit is contained in:
@@ -1,38 +1,16 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { page } from '$app/stores';
|
import { page } from '$app/stores';
|
||||||
import { derived } from 'svelte/store';
|
import { derived } from 'svelte/store';
|
||||||
|
import { allRoutes } from '$lib/remote/filesystem.remote.ts';
|
||||||
|
|
||||||
let mobileNavOpen = $state(false);
|
let mobileNavOpen = $state(false);
|
||||||
const pages = [
|
let pages = $state([])
|
||||||
{
|
|
||||||
name: 'Home',
|
async function resolvePages() {
|
||||||
path: '/'
|
pages = await allRoutes()
|
||||||
},
|
}
|
||||||
{
|
|
||||||
name: 'Sites',
|
resolvePages()
|
||||||
path: '/sites'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Servers',
|
|
||||||
path: '/servers'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Printer',
|
|
||||||
path: '/printer'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Network',
|
|
||||||
path: '/network'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Cluster',
|
|
||||||
path: '/cluster'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Health',
|
|
||||||
path: '/health'
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const activePage = derived(page, ($page) => $page.url.pathname);
|
const activePage = derived(page, ($page) => $page.url.pathname);
|
||||||
const toggle = () => {
|
const toggle = () => {
|
||||||
|
|||||||
@@ -59,6 +59,5 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-bottom: 1.5rem;
|
margin-bottom: 1.5rem;
|
||||||
z-index: 100;
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
23
src/lib/remote/filesystem.remote.ts
Normal file
23
src/lib/remote/filesystem.remote.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { prerender } from '$app/server';
|
||||||
|
|
||||||
|
export const allRoutes = prerender(() => {
|
||||||
|
const modules = import.meta.glob('/src/routes/**/+page.svelte');
|
||||||
|
const routes = Object.keys(modules).map((path) => {
|
||||||
|
console.log(path);
|
||||||
|
// Remove '/src/routes' prefix and '+page.svelte' suffix
|
||||||
|
let route = path.replace('/src/routes', '').replace('/+page.svelte', '');
|
||||||
|
// Handle the root route
|
||||||
|
|
||||||
|
route = route.toString().split('/')[1];
|
||||||
|
return route;
|
||||||
|
});
|
||||||
|
|
||||||
|
const allRoute = [...new Set(routes)].map((r: string) => {
|
||||||
|
return {
|
||||||
|
name: r?.length > 1 ? r[0].toUpperCase() + r.slice(1, r.length) : r,
|
||||||
|
path: '/' + r
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return [{name: 'Home', path: '/'}, ...allRoute].filter(r => r.name);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user