diff options
author | HampusM <hampus@hampusmat.com> | 2021-06-05 19:37:52 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2021-06-05 19:37:52 +0200 |
commit | 4da3272bf7893760f6710c9a1ec7de02358136e6 (patch) | |
tree | 92eb961bf20a7ef9f7c0650ba288baf512986fca /packages/client/src/views/RepositoryTree.vue | |
parent | 4e3074dfd752dd52951d300090c642aee76cfaac (diff) |
Reorganized into a monorepo, refactored the frontend again, goodbye Parcel
Diffstat (limited to 'packages/client/src/views/RepositoryTree.vue')
-rw-r--r-- | packages/client/src/views/RepositoryTree.vue | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/packages/client/src/views/RepositoryTree.vue b/packages/client/src/views/RepositoryTree.vue new file mode 100644 index 0000000..1b61c42 --- /dev/null +++ b/packages/client/src/views/RepositoryTree.vue @@ -0,0 +1,106 @@ +<template> + <div class="row mx-0"> + <div class="col ms-4 ps-4 ps-sm-5 mt-3 fs-5 vld-parent"> + <BaseBreadcrumb + :items="(pathArr.length === 0) ? [] : [{ name: $router.currentRoute._rawValue.params.repo, path: '/' + $router.currentRoute._rawValue.params.repo + '/tree' }].concat(pathArr.slice(0, -1).map((path_part, index) => + { + return { + name: path_part, + path: '/' + $router.currentRoute._rawValue.params.repo + '/tree/' + pathArr.slice(0, index + 1).join('/') + } + }))" :active-item="(pathArr.length === 0) ? $router.currentRoute._rawValue.params.repo : pathArr[pathArr.length - 1]" /> + <RepositoryTreeTree + :repository="$router.currentRoute._rawValue.params.repo" :path="path" + :tree="tree" v-if="type === 'tree'" + :is-loading="is_loading" /> + <RepositoryTreeBlob + :repository="$router.currentRoute._rawValue.params.repo" :path="path" + :content="blob_content" v-else /> + <Loading + :active="is_loading" :height="24" + :width="24" color="#ffffff" + :opacity="0" :is-full-page="false" /> + </div> + </div> +</template> + +<script> +import BaseBreadcrumb from "@/components/BaseBreadcrumb"; +import RepositoryTreeBlob from "@/components/RepositoryTreeBlob"; +import RepositoryTreeTree from "@/components/RepositoryTreeTree"; +import Loading from "vue-loading-overlay"; +import { ref } from "vue"; + +export default { + name: "RepositoryTree", + components: { + BaseBreadcrumb, + RepositoryTreeBlob, + RepositoryTreeTree, + Loading + }, + props: { + pathArr: { + type: Array, + required: true + } + }, + watch: { + pathArr() { + this.is_loading = true; + this.tree = {}; + this.fetchTree(this.$router.currentRoute._rawValue.params.repo); + } + }, + setup(props) { + const type = ref(""); + const tree = ref({}); + const blob_content = ref(""); + const is_loading = ref(true); + const path = ref(""); + + const fetchTree = async(repository) => { + path.value = props.pathArr ? props.pathArr.join("/") : undefined; + const data = await (await fetch(`${window.location.protocol}//${window.location.host}/api/v1/repos/${repository}/tree${path.value ? "?path=" + path.value : ""}`)).json(); + console.log(path.value); + type.value = data.data.type; + + if(data.data.type === "tree") { + const tree_data = data.data.tree; + + let tree_trees = Object.entries(tree_data).filter((entry) => entry[1].type === "tree"); + tree_trees = tree_trees.sort((a, b) => a[0].localeCompare(b[0])); + + let tree_blobs = Object.entries(tree_data).filter((entry) => entry[1].type === "blob"); + tree_blobs = tree_blobs.sort((a, b) => a[0].localeCompare(b[0])); + + tree.value = Object.fromEntries(tree_trees.concat(tree_blobs)); + } else { + blob_content.value = data.data.content; + } + + is_loading.value = false; + }; + + return { + type, + tree, + blob_content, + is_loading, + path, + fetchTree + }; + }, + created() { + this.fetchTree(this.$router.currentRoute._rawValue.params.repo); + } +}; +</script> + +<style lang="scss" scoped> +@import "~vue-loading-overlay/dist/vue-loading.css"; + +.row { + height: 100%; +} +</style> |