Skip to content

Commit a913f22

Browse files
authored
✨ feat: add size descriptors for file tree (#151)
1 parent 819d209 commit a913f22

File tree

2 files changed

+85
-28
lines changed

2 files changed

+85
-28
lines changed

components/files/FolderViewer.vue

Lines changed: 83 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
<script setup lang="ts">
22
import type { TreeOption } from "naive-ui";
3-
import { NButton } from "naive-ui";
3+
import { NButton, NDivider } from "naive-ui";
4+
import prettyBytes from "pretty-bytes";
45
import identifierType from "../../dev/related_identifier.json";
56
import { Icon } from "#components";
7+
68
const drawerActive = ref(false);
79
810
const props = defineProps({
@@ -12,10 +14,22 @@ const props = defineProps({
1214
},
1315
});
1416
15-
const drawerTitle = ref("");
16-
const drawerDescription = ref<string | undefined>("");
17-
const drawerIcon = ref("");
18-
const drawerText = ref("");
17+
const drawerDetails = ref<{
18+
title: string;
19+
description: string | undefined;
20+
icon: string;
21+
numberOfFiles: number;
22+
size: number | undefined;
23+
text: string;
24+
}>({
25+
title: "",
26+
description: "",
27+
icon: "",
28+
numberOfFiles: 0,
29+
size: 0,
30+
text: "",
31+
});
32+
1933
const relationType = ref<RelatedIdentifier[] | undefined>(undefined);
2034
2135
function convertMetadataFile(
@@ -67,15 +81,27 @@ function convertDirectory(
6781
}),
6882
suffix: () =>
6983
h(
70-
NButton,
84+
"div",
7185
{
72-
class: "",
73-
onClick: () => {
74-
openMetadataDrawer([...previousPath, directory.directoryName]);
75-
},
76-
size: "tiny",
86+
class: "flex",
7787
},
78-
{ default: () => "Learn More" },
88+
[
89+
directory.size
90+
? h("span", { class: "text-sm" }, prettyBytes(directory.size) || "")
91+
: null,
92+
directory.size ? h(NDivider, { vertical: true }) : null,
93+
h(
94+
NButton,
95+
{
96+
class: "",
97+
onClick: () => {
98+
openMetadataDrawer([...previousPath, directory.directoryName]);
99+
},
100+
size: "tiny",
101+
},
102+
{ default: () => "Learn More" },
103+
),
104+
],
79105
),
80106
};
81107
}
@@ -140,29 +166,44 @@ const openMetadataDrawer = (currentPath: Array<string>) => {
140166
}
141167
142168
if (filetype) {
143-
drawerTitle.value = filetype.metadataFileName;
144-
drawerIcon.value = "iconamoon:file-fill";
145-
drawerText.value = "This file";
146-
drawerDescription.value = filetype.metadataFileDescription;
169+
drawerDetails.value = {
170+
title: filetype.metadataFileName,
171+
description: filetype.metadataFileDescription,
172+
icon: "iconamoon:file-fill",
173+
numberOfFiles: 0,
174+
size: 0,
175+
text: "This file",
176+
};
147177
relationType.value = filetype.relatedIdentifier?.map((r) => {
148178
return {
149179
...r,
150180
relationType: getRelationName(r.relationType),
151181
};
152182
});
153183
} else if (foldertype) {
154-
drawerTitle.value = foldertype.directoryName;
155-
drawerIcon.value = "ic:baseline-folder";
156-
drawerText.value = "This directory";
157-
drawerDescription.value = foldertype.directoryDescription;
184+
drawerDetails.value = {
185+
title: foldertype.directoryName,
186+
description: foldertype.directoryDescription,
187+
icon: "ic:baseline-folder",
188+
numberOfFiles: foldertype.numberOfFiles || 0,
189+
size: foldertype.size || 0,
190+
text: "This directory",
191+
};
158192
relationType.value = foldertype.relatedIdentifier?.map((r) => {
159193
return {
160194
...r,
161195
relationType: getRelationName(r.relationType),
162196
};
163197
});
164198
} else {
165-
drawerDescription.value = "No metadata found for this file";
199+
drawerDetails.value = {
200+
title: "No metadata found for this file",
201+
description: "",
202+
icon: "iconamoon:file-fill",
203+
numberOfFiles: 0,
204+
size: 0,
205+
text: "This file",
206+
};
166207
}
167208
168209
drawerActive.value = true;
@@ -187,17 +228,31 @@ const openMetadataDrawer = (currentPath: Array<string>) => {
187228
>
188229
<n-drawer-content>
189230
<n-flex vertical>
190-
<div class="mb-1 text-lg font-bold">
191-
<Icon :name="drawerIcon" size="22" color="#0284c7" />
192-
{{ drawerTitle }}
193-
</div>
231+
<n-flex justify="space-between">
232+
<div class="mb-1 text-lg font-bold">
233+
<Icon :name="drawerDetails.icon" size="22" color="#0284c7" />
234+
{{ drawerDetails.title }}
235+
</div>
236+
237+
<div class="flex items-center">
238+
<p v-if="drawerDetails.numberOfFiles">
239+
{{ drawerDetails.numberOfFiles }} files
240+
</p>
241+
242+
<n-divider v-if="drawerDetails.numberOfFiles" vertical />
243+
244+
<p v-if="drawerDetails.size">
245+
{{ prettyBytes(drawerDetails.size) }}
246+
</p>
247+
</div>
248+
</n-flex>
194249

195250
<p class="text-md my-1 w-full border-b pb-2 font-semibold">
196251
Description
197252
</p>
198253

199-
<p v-if="drawerDescription">
200-
{{ drawerDescription }}
254+
<p v-if="drawerDetails.description">
255+
{{ drawerDetails.description }}
201256
</p>
202257

203258
<p v-else>
@@ -215,7 +270,7 @@ const openMetadataDrawer = (currentPath: Array<string>) => {
215270
class="mt-4 flex"
216271
>
217272
<li>
218-
{{ drawerText }}
273+
{{ drawerDetails.text }}
219274
<span class="mr-2 lowercase">{{ type.relationType }}</span>
220275

221276
<a

types/dataset.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,8 @@ interface Directory {
447447
identifierType: string;
448448
}[];
449449
}[];
450+
size?: number;
451+
numberOfFiles?: number;
450452
}
451453

452454
interface DatasetStructureDescription {

0 commit comments

Comments
 (0)