Fix deeply nested folder event and overflow (#445)

* Fix deeply nested folder event and overflow

* Fix code smell
This commit is contained in:
Rijk van Zanten
2020-04-21 09:52:47 -04:00
committed by GitHub
parent 9cd2a9a273
commit 01d8ded4b2
4 changed files with 44 additions and 24 deletions

View File

@@ -1,7 +1,7 @@
<template>
<div class="v-list-group">
<v-list-item :active="active" class="activator" :to="to" @click="onClick">
<slot name="activator" />
<slot name="activator" :active="groupActive" />
<v-list-item-icon class="activator-icon" :class="{ active: groupActive }">
<v-icon name="chevron_left" @click.stop.prevent="toggle" />

View File

@@ -1,13 +1,13 @@
<template>
<v-list-item
v-if="folder.children === undefined"
@click="$emit('click', folder.id)"
@click="clickHandler(folder.id)"
:active="currentFolder === folder.id"
>
<v-list-item-icon><v-icon name="folder" /></v-list-item-icon>
<v-list-item-content>{{ folder.name }}</v-list-item-content>
</v-list-item>
<v-list-group v-else @click="$emit('click', folder.id)" :active="currentFolder === folder.id">
<v-list-group v-else @click="clickHandler(folder.id)" :active="currentFolder === folder.id">
<template #activator="{ active }">
<v-list-item-icon>
<v-icon :name="active ? 'folder_open' : 'folder'" />
@@ -19,7 +19,7 @@
:key="childFolder.id"
:folder="childFolder"
:current-folder="currentFolder"
@click="$emit('click', childFolder.id)"
:click-handler="clickHandler"
/>
</v-list-group>
</template>
@@ -39,6 +39,10 @@ export default defineComponent({
type: Number,
default: null,
},
clickHandler: {
type: Function,
default: () => undefined,
},
},
});
</script>

View File

@@ -13,13 +13,16 @@
</v-list-item>
</template>
<navigation-folder
@click="$emit('filter', $event)"
v-for="folder in folders"
:key="folder.id"
:folder="folder"
:current-folder="currentFolder"
/>
<div class="folders">
<navigation-folder
@click="$emit('filter', $event)"
v-for="folder in folders"
:key="folder.id"
:folder="folder"
:current-folder="currentFolder"
:click-handler="(id) => $emit('filter', id)"
/>
</div>
</v-list>
</template>
@@ -52,4 +55,15 @@ export default defineComponent({
::v-deep .v-skeleton-loader {
--v-skeleton-loader-background-color: var(--background-normal-alt);
}
.folders {
width: 100%;
overflow-x: hidden;
::v-deep .v-list-item-content {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
</style>

View File

@@ -58,18 +58,20 @@ export default function useFolders() {
export function nestFolders(rawFolders: FolderRaw[]) {
return rawFolders
.map((folderRaw) => {
const folder: FolderRaw & Folder = { ...folderRaw };
const children = rawFolders.filter(
(childFolder) => childFolder.parent_folder === folderRaw.id
);
if (children.length > 0) {
folder.children = children;
}
return folder;
})
.map((rawFolder) => nestChildren(rawFolder, rawFolders))
.filter((folder) => folder.parent_folder === null);
}
export function nestChildren(rawFolder: FolderRaw, rawFolders: FolderRaw[]) {
const folder: FolderRaw & Folder = { ...rawFolder };
const children = rawFolders
.filter((childFolder) => childFolder.parent_folder === rawFolder.id)
.map((childRawFolder) => nestChildren(childRawFolder, rawFolders));
if (children.length > 0) {
folder.children = children;
}
return folder;
}