Files
lucent-laravel/front/js/svelte/layout/Navbar.svelte
T
2024-10-05 15:19:53 +03:00

43 lines
1.5 KiB
Svelte

<script>
import {getContext} from "svelte";
import Folder from "./Folder.svelte";
export let schema;
const channel = getContext("channel");
const readableSchemas = getContext("readableSchemas");
function addToFolder(tree, folderPath, aSchema) {
let shoudlExpand = aSchema.name === schema?.name;
if (folderPath === "") {
tree.files.push(aSchema)
return tree
}
const folderNames = folderPath.split(".");
folderNames.forEach(folderName => {
let queriedFolder = tree.folders.find(folder => folder.name === folderName)
if (!queriedFolder) {
queriedFolder = {name: folderName, files: [], folders: [], shoudlExpand: shoudlExpand};
}
folderNames.shift()
let remainingFolderPath = folderNames.join(".");
queriedFolder = addToFolder(queriedFolder, remainingFolderPath, aSchema)
tree.folders.push(queriedFolder);
})
return tree;
}
const schemaTree = readableSchemas.reduce((carry, schema) => {
carry = addToFolder(carry, schema.folder,schema)
return carry;
}, {name: "", files: [], folders: [], shoudlExpand:true});
</script>
<div class="sidebar-top">
<a class="logo" href="{channel.lucentUrl}">{channel.name}</a>
<a class="nav-item" href="{channel.lucentUrl}/profile">
</a>
</div>
<div class="sidebar">
<Folder folder={schemaTree} {schema} ></Folder>
</div>