2023-10-26 00:43:44 +01:00
|
|
|
<script setup lang="ts">
|
|
|
|
import { useDocumentStore } from '@/stores/documents'
|
2023-10-28 10:13:01 +01:00
|
|
|
import LoginModal from '@/components/LoginModal.vue'
|
2023-10-26 00:43:44 +01:00
|
|
|
import UploadButton from '@/components/UploadButton.vue'
|
|
|
|
import { InfoCircleOutlined, SettingOutlined, PlusSquareOutlined, SearchOutlined, DeleteOutlined, DownloadOutlined, FileAddFilled, LinkOutlined, FolderAddFilled, FileFilled, FolderFilled } from '@ant-design/icons-vue'
|
2023-10-28 10:13:01 +01:00
|
|
|
import { h, ref } from 'vue';
|
2023-10-26 00:43:44 +01:00
|
|
|
|
|
|
|
const documentStore = useDocumentStore()
|
2023-10-27 16:32:21 +01:00
|
|
|
const searchQuery = ref<string>('')
|
|
|
|
const showSearchInput = ref<boolean>(false)
|
|
|
|
const isLoading = ref<boolean>(false)
|
|
|
|
|
|
|
|
const toggleSearchInput = () => {
|
|
|
|
showSearchInput.value = !showSearchInput.value;
|
|
|
|
if (!showSearchInput.value) {
|
2023-11-01 23:00:59 +00:00
|
|
|
searchQuery.value = ''
|
2023-10-27 16:32:21 +01:00
|
|
|
}
|
2023-11-01 23:00:59 +00:00
|
|
|
}
|
2023-10-27 16:32:21 +01:00
|
|
|
|
2023-11-01 23:00:59 +00:00
|
|
|
const executeSearch = (ev: InputEvent) => {
|
|
|
|
// FIXME: Make reactive instead of this update handler
|
|
|
|
const query = (ev.target as HTMLInputElement).value
|
|
|
|
console.log("Searching", query)
|
|
|
|
documentStore.setFilter(query)
|
|
|
|
console.log("Filtered")
|
|
|
|
}
|
2023-10-26 00:43:44 +01:00
|
|
|
|
|
|
|
function createFileHandler() {
|
|
|
|
console.log("Creating file")
|
|
|
|
}
|
|
|
|
|
|
|
|
function uploadFolderHandler() {
|
|
|
|
console.log("Uploading Folder")
|
|
|
|
}
|
|
|
|
function createFolderHandler() {
|
|
|
|
console.log("Uploading Folder")
|
|
|
|
}
|
|
|
|
function searchHandler() {
|
|
|
|
console.log("Searching ...")
|
|
|
|
}
|
|
|
|
function newViewHandler() {
|
|
|
|
console.log("Creating new view ...")
|
|
|
|
}
|
|
|
|
function preferencesHandler() {
|
|
|
|
console.log("Preferences ...")
|
|
|
|
}
|
|
|
|
function about() {
|
|
|
|
console.log("About ...")
|
|
|
|
}
|
|
|
|
function deleteHandler(){
|
|
|
|
if(documentStore.selectedDocuments){
|
|
|
|
documentStore.selectedDocuments.forEach(document => {
|
|
|
|
documentStore.deleteDocument(document)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function share(){
|
|
|
|
console.log("Share ...")
|
|
|
|
}
|
|
|
|
function download(){
|
|
|
|
console.log("Download ...")
|
|
|
|
}
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
|
|
|
<div class="actions-container">
|
|
|
|
<div class="actions-list">
|
|
|
|
<UploadButton />
|
|
|
|
|
|
|
|
<a-tooltip title="Upload folder from disk">
|
|
|
|
<a-button @click="uploadFolderHandler" type="text" class="action-button" :icon="h(FolderAddFilled)" />
|
|
|
|
</a-tooltip>
|
|
|
|
|
|
|
|
<a-tooltip title="Create file">
|
|
|
|
<a-button @click="createFileHandler" type="text" class="action-button" :icon="h(FileFilled)" />
|
|
|
|
</a-tooltip>
|
|
|
|
|
|
|
|
<a-tooltip title="Create folder">
|
|
|
|
<a-button @click="createFolderHandler" type="text" class="action-button" :icon="h(FolderFilled)" />
|
|
|
|
</a-tooltip>
|
|
|
|
<!-- TODO ADD CONDITIONAL RENDER -->
|
|
|
|
<template v-if="documentStore.selectedDocuments && documentStore.selectedDocuments.length > 0">
|
|
|
|
<a-tooltip title="Share">
|
|
|
|
<a-button type="text" @click="share" class="action-button" :icon="h(LinkOutlined)" />
|
|
|
|
</a-tooltip>
|
|
|
|
<a-tooltip title="Download Zip">
|
|
|
|
<a-button type="text" @click="download" class="action-button" :icon="h(DownloadOutlined)" />
|
|
|
|
</a-tooltip>
|
|
|
|
<a-tooltip title="Delete">
|
|
|
|
<a-button type="text" @click="deleteHandler" class="action-button" :icon="h(DeleteOutlined)" />
|
|
|
|
</a-tooltip>
|
|
|
|
</template>
|
|
|
|
</div>
|
|
|
|
<div class="actions-list">
|
2023-10-28 10:13:01 +01:00
|
|
|
<LoginModal></LoginModal>
|
2023-10-27 16:32:21 +01:00
|
|
|
<template v-if="showSearchInput">
|
|
|
|
<a-input-search
|
|
|
|
v-model="searchQuery"
|
|
|
|
class="margin-input"
|
2023-11-01 23:00:59 +00:00
|
|
|
@change="executeSearch"
|
2023-10-27 16:32:21 +01:00
|
|
|
@search="executeSearch"
|
|
|
|
:loading="isLoading"
|
|
|
|
/>
|
|
|
|
</template>
|
2023-10-26 00:43:44 +01:00
|
|
|
<a-tooltip title="Search">
|
2023-10-27 16:32:21 +01:00
|
|
|
<a-button @click="toggleSearchInput" type="text" class="action-button" :icon="h(SearchOutlined)" />
|
2023-10-26 00:43:44 +01:00
|
|
|
</a-tooltip>
|
|
|
|
|
|
|
|
<a-tooltip title="Create new view">
|
|
|
|
<a-button @click="newViewHandler" type="text" class="action-button" :icon="h(PlusSquareOutlined)" />
|
|
|
|
</a-tooltip>
|
|
|
|
|
|
|
|
<a-tooltip title="Preferences">
|
|
|
|
<a-button @click="preferencesHandler" type="text" class="action-button" :icon="h(SettingOutlined)" />
|
|
|
|
</a-tooltip>
|
|
|
|
|
|
|
|
<a-tooltip title="About">
|
|
|
|
<a-button @click="about" type="text" class="action-button" :icon="h(InfoCircleOutlined)" />
|
|
|
|
</a-tooltip>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<style>
|
|
|
|
.actions-container,
|
|
|
|
.actions-list {
|
|
|
|
display: flex;
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
gap: 15px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.actions-container {
|
|
|
|
justify-content: space-between;
|
|
|
|
}
|
|
|
|
|
|
|
|
.action-button {
|
|
|
|
padding: 0;
|
|
|
|
font-size: 1.5em;
|
|
|
|
color: var(--secondary-color);
|
|
|
|
|
|
|
|
&:hover {
|
|
|
|
color: var(--blue-color) !important;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@media only screen and (max-width: 600px) {
|
|
|
|
|
|
|
|
.actions-container,
|
|
|
|
.actions-list {
|
|
|
|
gap: 6px;
|
|
|
|
}
|
|
|
|
}
|
2023-10-27 16:32:21 +01:00
|
|
|
.margin-input{
|
|
|
|
margin-top: 5px;
|
|
|
|
}
|
2023-10-26 00:43:44 +01:00
|
|
|
</style>
|