gitea源码

ViewFileTree.vue 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <script lang="ts" setup>
  2. import ViewFileTreeItem from './ViewFileTreeItem.vue';
  3. import {onMounted, useTemplateRef} from 'vue';
  4. import {createViewFileTreeStore} from './ViewFileTreeStore.ts';
  5. const elRoot = useTemplateRef('elRoot');
  6. const props = defineProps({
  7. repoLink: {type: String, required: true},
  8. treePath: {type: String, required: true},
  9. currentRefNameSubURL: {type: String, required: true},
  10. });
  11. const store = createViewFileTreeStore(props);
  12. onMounted(async () => {
  13. store.rootFiles = await store.loadChildren('', props.treePath);
  14. elRoot.value.closest('.is-loading')?.classList?.remove('is-loading');
  15. window.addEventListener('popstate', (e) => {
  16. store.selectedItem = e.state?.treePath || '';
  17. if (e.state?.url) store.loadViewContent(e.state.url);
  18. });
  19. });
  20. </script>
  21. <template>
  22. <div class="view-file-tree-items" ref="elRoot">
  23. <ViewFileTreeItem v-for="item in store.rootFiles" :key="item.name" :item="item" :store="store"/>
  24. </div>
  25. </template>
  26. <style scoped>
  27. .view-file-tree-items {
  28. display: flex;
  29. flex-direction: column;
  30. gap: 1px;
  31. margin-right: .5rem;
  32. }
  33. </style>