2022-09-25 08:31:52 +00:00
|
|
|
<template>
|
2022-10-29 05:24:19 +00:00
|
|
|
<div class="top-matter">
|
|
|
|
<NcBreadcrumbs v-if="topMatter">
|
|
|
|
<NcBreadcrumb title="Home" :to="{ name: 'folders' }">
|
|
|
|
<template #icon>
|
|
|
|
<HomeIcon :size="20" />
|
|
|
|
</template>
|
|
|
|
</NcBreadcrumb>
|
|
|
|
<NcBreadcrumb
|
|
|
|
v-for="folder in topMatter.list"
|
|
|
|
:key="folder.path"
|
|
|
|
:title="folder.text"
|
|
|
|
:to="{ name: 'folders', params: { path: folder.path } }"
|
|
|
|
/>
|
|
|
|
</NcBreadcrumbs>
|
|
|
|
|
|
|
|
<div class="right-actions">
|
|
|
|
<NcActions :inline="1">
|
|
|
|
<NcActionButton
|
|
|
|
:aria-label="t('memories', 'Share folder')"
|
|
|
|
@click="$refs.shareModal.open(false)"
|
|
|
|
close-after-click
|
|
|
|
>
|
|
|
|
{{ t("memories", "Share folder") }}
|
|
|
|
<template #icon> <ShareIcon :size="20" /> </template>
|
|
|
|
</NcActionButton>
|
|
|
|
</NcActions>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<FolderShareModal ref="shareModal" />
|
|
|
|
</div>
|
2022-09-25 08:31:52 +00:00
|
|
|
</template>
|
|
|
|
|
|
|
|
<script lang="ts">
|
2022-10-28 19:08:34 +00:00
|
|
|
import { Component, Mixins, Watch } from "vue-property-decorator";
|
2022-10-14 21:45:23 +00:00
|
|
|
import { TopMatterFolder, TopMatterType } from "../../types";
|
2022-11-24 19:54:29 +00:00
|
|
|
|
2022-11-24 21:07:09 +00:00
|
|
|
const NcBreadcrumbs = () =>
|
|
|
|
import("@nextcloud/vue/dist/Components/NcBreadcrumbs");
|
|
|
|
const NcBreadcrumb = () =>
|
|
|
|
import("@nextcloud/vue/dist/Components/NcBreadcrumb");
|
2022-11-24 19:54:29 +00:00
|
|
|
import NcActions from "@nextcloud/vue/dist/Components/NcActions";
|
|
|
|
import NcActionButton from "@nextcloud/vue/dist/Components/NcActionButton";
|
|
|
|
|
2022-10-28 19:08:34 +00:00
|
|
|
import GlobalMixin from "../../mixins/GlobalMixin";
|
2022-10-29 05:24:19 +00:00
|
|
|
|
|
|
|
import FolderShareModal from "../modal/FolderShareModal.vue";
|
|
|
|
|
2022-10-28 19:08:34 +00:00
|
|
|
import HomeIcon from "vue-material-design-icons/Home.vue";
|
2022-10-29 05:24:19 +00:00
|
|
|
import ShareIcon from "vue-material-design-icons/ShareVariant.vue";
|
2022-09-25 08:31:52 +00:00
|
|
|
|
|
|
|
@Component({
|
2022-10-28 19:08:34 +00:00
|
|
|
components: {
|
|
|
|
NcBreadcrumbs,
|
|
|
|
NcBreadcrumb,
|
2022-10-29 05:24:19 +00:00
|
|
|
NcActions,
|
|
|
|
NcActionButton,
|
|
|
|
FolderShareModal,
|
2022-10-28 19:08:34 +00:00
|
|
|
HomeIcon,
|
2022-10-29 05:24:19 +00:00
|
|
|
ShareIcon,
|
2022-10-28 19:08:34 +00:00
|
|
|
},
|
2022-09-25 08:31:52 +00:00
|
|
|
})
|
|
|
|
export default class FolderTopMatter extends Mixins(GlobalMixin) {
|
2022-10-28 19:08:34 +00:00
|
|
|
private topMatter?: TopMatterFolder = null;
|
2022-09-25 08:31:52 +00:00
|
|
|
|
2022-10-28 19:08:34 +00:00
|
|
|
@Watch("$route")
|
|
|
|
async routeChange(from: any, to: any) {
|
|
|
|
this.createMatter();
|
|
|
|
}
|
2022-09-25 08:31:52 +00:00
|
|
|
|
2022-10-28 19:08:34 +00:00
|
|
|
mounted() {
|
|
|
|
this.createMatter();
|
|
|
|
}
|
2022-09-25 08:31:52 +00:00
|
|
|
|
2022-10-28 19:08:34 +00:00
|
|
|
createMatter() {
|
|
|
|
if (this.$route.name === "folders") {
|
|
|
|
let path: any = this.$route.params.path || "";
|
|
|
|
if (typeof path === "string") {
|
|
|
|
path = path.split("/");
|
|
|
|
}
|
2022-10-08 06:35:09 +00:00
|
|
|
|
2022-10-28 19:08:34 +00:00
|
|
|
this.topMatter = {
|
|
|
|
type: TopMatterType.FOLDER,
|
|
|
|
list: path
|
|
|
|
.filter((x) => x)
|
|
|
|
.map((x, idx, arr) => {
|
|
|
|
return {
|
|
|
|
text: x,
|
|
|
|
path: arr.slice(0, idx + 1).join("/"),
|
2022-09-25 08:31:52 +00:00
|
|
|
};
|
2022-10-28 19:08:34 +00:00
|
|
|
}),
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
this.topMatter = null;
|
2022-09-25 08:31:52 +00:00
|
|
|
}
|
2022-10-28 19:08:34 +00:00
|
|
|
}
|
2022-09-25 08:31:52 +00:00
|
|
|
}
|
2022-10-29 05:24:19 +00:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
.top-matter {
|
|
|
|
display: flex;
|
|
|
|
vertical-align: middle;
|
|
|
|
|
|
|
|
.right-actions {
|
|
|
|
margin-right: 40px;
|
|
|
|
z-index: 50;
|
|
|
|
@media (max-width: 768px) {
|
|
|
|
margin-right: 10px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|