hrms-edm/Services/client/src/components/TreeExplorer.vue

78 lines
1.7 KiB
Vue
Raw Normal View History

2023-11-23 08:47:44 +07:00
<script setup lang="ts">
2023-11-28 09:22:44 +07:00
import { storeToRefs } from 'pinia'
2023-11-23 08:47:44 +07:00
import { useTreeDataStore, type TreeDataFolder } from '@/stores/tree-data'
2023-11-28 09:22:44 +07:00
import { useSearchDataStore } from '@/stores/searched-data'
import { useFileInfoStore } from '@/stores/file-info-data'
const { isSearch } = storeToRefs(useSearchDataStore())
const { isFilePreview } = storeToRefs(useFileInfoStore())
2023-11-23 08:47:44 +07:00
const { getFolder } = useTreeDataStore()
const props = withDefaults(
defineProps<{
data: TreeDataFolder[]
level: number
}>(),
{
level: 0,
}
)
const MAX_NAME_LENGTH = 20
2023-11-23 08:47:44 +07:00
</script>
<template>
<div>
<q-list v-for="folder in data" class="rounded-borders">
<q-expansion-item
2023-11-28 09:22:44 +07:00
@click="
() => {
getFolder(folder.pathname, false)
isSearch = false
isFilePreview = false
2023-11-28 09:22:44 +07:00
}
"
2023-11-23 08:47:44 +07:00
:header-inset-level="level * 0.25"
:group="level.toString()"
:hide-expand-icon="level === 4"
:icon="
level === 1
? 'mdi-file-cabinet'
: level === 2
? 'inbox'
: 'o_folder_open'
"
:label="
folder.name.length > MAX_NAME_LENGTH
? folder.name.slice(0, MAX_NAME_LENGTH) + '...'
: folder.name
"
class="text-overflow-handle"
2023-11-23 08:47:44 +07:00
v-model="folder.status"
>
<tree-explorer
v-if="folder.folder"
:data="folder.folder"
:level="props.level + 1"
/>
</q-expansion-item>
</q-list>
</div>
</template>
<style lang="scss">
.q-item[aria-expanded='true'] {
color: $primary;
}
.q-item[aria-expanded='true'] .q-icon {
color: $primary;
}
.text-overflow-handle {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
2023-11-23 08:47:44 +07:00
</style>