chore: files view dynamic component

This commit is contained in:
Ramires Viana 2021-03-01 16:12:17 +00:00
parent 057307181e
commit 7b6579ac8a
7 changed files with 107 additions and 106 deletions

View File

@ -2,8 +2,6 @@ const getters = {
isLogged: state => state.user !== null, isLogged: state => state.user !== null,
isFiles: state => !state.loading && state.route.name === 'Files', isFiles: state => !state.loading && state.route.name === 'Files',
isListing: (state, getters) => getters.isFiles && state.req.isDir, isListing: (state, getters) => getters.isFiles && state.req.isDir,
isEditor: (state, getters) => getters.isFiles && (state.req.type === 'text' || state.req.type === 'textImmutable'),
isPreview: state => state.previewMode,
isSharing: state => !state.loading && state.route.name === 'Share', isSharing: state => !state.loading && state.route.name === 'Share',
selectedCount: state => state.selected.length, selectedCount: state => state.selected.length,
progress : state => { progress : state => {

View File

@ -24,9 +24,8 @@ const state = {
showShell: false, showShell: false,
showMessage: null, showMessage: null,
showConfirm: null, showConfirm: null,
previewMode: false,
hash: '', hash: '',
token: '', token: ''
} }
export default new Vuex.Store({ export default new Vuex.Store({

View File

@ -85,9 +85,6 @@ const mutations = {
state.clipboard.key = '' state.clipboard.key = ''
state.clipboard.items = [] state.clipboard.items = []
}, },
setPreviewMode(state, value) {
state.previewMode = value
},
setHash: (state, value) => (state.hash = value), setHash: (state, value) => (state.hash = value),
} }

View File

@ -1,8 +1,8 @@
<template> <template>
<div> <div>
<header-bar showMenu showLogo /> <header-bar v-if="error || !req.type" showMenu showLogo />
<div id="breadcrumbs" v-if="isListing || error"> <div id="breadcrumbs">
<router-link to="/files/" :aria-label="$t('files.home')" :title="$t('files.home')"> <router-link to="/files/" :aria-label="$t('files.home')" :title="$t('files.home')">
<i class="material-icons">home</i> <i class="material-icons">home</i>
</router-link> </router-link>
@ -14,9 +14,7 @@
</div> </div>
<errors v-if="error" :errorCode="errorCode" /> <errors v-if="error" :errorCode="errorCode" />
<preview v-else-if="isPreview"></preview> <component v-else-if="currentView" :is="currentView"></component>
<editor v-else-if="isEditor"></editor>
<listing v-else-if="isListing"></listing>
<div v-else> <div v-else>
<h2 class="message"> <h2 class="message">
<span>{{ $t('files.loading') }}</span> <span>{{ $t('files.loading') }}</span>
@ -27,7 +25,7 @@
<script> <script>
import { files as api } from '@/api' import { files as api } from '@/api'
import { mapGetters, mapState, mapMutations } from 'vuex' import { mapState, mapMutations } from 'vuex'
import HeaderBar from '@/components/header/HeaderBar' import HeaderBar from '@/components/header/HeaderBar'
import Errors from '@/views/Errors' import Errors from '@/views/Errors'
@ -54,19 +52,24 @@ export default {
} }
}, },
computed: { computed: {
...mapGetters([
'isListing',
'isEditor',
'isFiles'
]),
...mapState([ ...mapState([
'req', 'req',
'reload', 'reload',
'loading', 'loading',
'show' 'show'
]), ]),
isPreview () { currentView () {
return !this.loading && !this.isListing && !this.isEditor || this.loading && this.$store.state.previewMode if (this.req.type == undefined) {
return null
}
if (this.req.isDir) {
return 'listing'
} else if(this.req.type === 'text' || this.req.type === 'textImmutable') {
return 'editor'
} else {
return 'preview'
}
}, },
breadcrumbs () { breadcrumbs () {
let parts = this.$route.path.split('/') let parts = this.$route.path.split('/')

View File

@ -130,6 +130,8 @@ export default {
} }
}, },
close () { close () {
this.$store.commit('updateRequest', {})
let uri = url.removeLastDir(this.$route.path) + '/' let uri = url.removeLastDir(this.$route.path) + '/'
this.$router.push({ path: uri }) this.$router.push({ path: uri })
} }

View File

@ -31,6 +31,12 @@
<action v-if="headerButtons.delete" icon="delete" :label="$t('buttons.delete')" show="delete" /> <action v-if="headerButtons.delete" icon="delete" :label="$t('buttons.delete')" show="delete" />
</div> </div>
<div v-if="$store.state.loading">
<h2 class="message">
<span>{{ $t('files.loading') }}</span>
</h2>
</div>
<template v-else>
<div v-if="(req.numDirs + req.numFiles) == 0"> <div v-if="(req.numDirs + req.numFiles) == 0">
<h2 class="message"> <h2 class="message">
<i class="material-icons">sentiment_dissatisfied</i> <i class="material-icons">sentiment_dissatisfied</i>
@ -115,6 +121,7 @@
</div> </div>
</div> </div>
</div> </div>
</template>
</div> </div>
</template> </template>

View File

@ -125,14 +125,12 @@ export default {
}, },
async mounted () { async mounted () {
window.addEventListener('keydown', this.key) window.addEventListener('keydown', this.key)
this.$store.commit('setPreviewMode', true)
this.listing = this.oldReq.items this.listing = this.oldReq.items
this.$root.$on('preview-deleted', this.deleted) this.$root.$on('preview-deleted', this.deleted)
this.updatePreview() this.updatePreview()
}, },
beforeDestroy () { beforeDestroy () {
window.removeEventListener('keydown', this.key) window.removeEventListener('keydown', this.key)
this.$store.commit('setPreviewMode', false)
this.$root.$off('preview-deleted', this.deleted) this.$root.$off('preview-deleted', this.deleted)
}, },
methods: { methods: {
@ -142,16 +140,11 @@ export default {
if (this.hasNext) { if (this.hasNext) {
this.next() this.next()
} else if (!this.hasPrevious && !this.hasNext) { } else if (!this.hasPrevious && !this.hasNext) {
this.back() this.close()
} else { } else {
this.prev() this.prev()
} }
}, },
back () {
this.$store.commit('setPreviewMode', false)
let uri = url.removeLastDir(this.$route.path) + '/'
this.$router.push({ path: uri })
},
prev () { prev () {
this.hoverNav = false this.hoverNav = false
this.$router.push({ path: this.previousLink }) this.$router.push({ path: this.previousLink })
@ -171,7 +164,7 @@ export default {
} else if (event.which === 37) { // left arrow } else if (event.which === 37) { // left arrow
if (this.hasPrevious) this.prev() if (this.hasPrevious) this.prev()
} else if (event.which === 27) { // esc } else if (event.which === 27) { // esc
this.back() this.close()
} }
}, },
async updatePreview () { async updatePreview () {
@ -239,6 +232,8 @@ export default {
}, 1500); }, 1500);
}, 500), }, 500),
close () { close () {
this.$store.commit('updateRequest', {})
let uri = url.removeLastDir(this.$route.path) + '/' let uri = url.removeLastDir(this.$route.path) + '/'
this.$router.push({ path: uri }) this.$router.push({ path: uri })
}, },