Add initial support for tracking current FM directory for creating a folder (and other stuff eventually)

This commit is contained in:
Dane Everitt 2019-02-16 17:54:15 -08:00
parent 767e466fd8
commit be7f7d8da8
No known key found for this signature in database
GPG Key ID: EEA66103B3D71F53
6 changed files with 80 additions and 6 deletions

View File

@ -33,7 +33,7 @@
</div>
<div class="action">New File</div>
</div>
<div class="context-row">
<div class="context-row" v-on:click="openFolderModal">
<div class="icon">
<Icon name="folder-plus" class="h-4"/>
</div>
@ -58,5 +58,12 @@
export default Vue.extend({
name: 'FileContextMenu',
components: {Icon},
methods: {
openFolderModal: function () {
window.events.$emit('server:files:open-directory-modal');
this.$emit('close');
}
}
});
</script>

View File

@ -10,7 +10,12 @@
<div class="flex-1 text-right text-neutral-600">{{formatDate(file.modified)}}</div>
<div class="flex-none w-1/6"></div>
</div>
<FileContextMenu class="context-menu" v-show="contextMenuVisible" ref="contextMenu"/>
<FileContextMenu
class="context-menu"
v-show="contextMenuVisible"
v-on:close="contextMenuVisible = false"
ref="contextMenu"
/>
</div>
</template>

View File

@ -0,0 +1,34 @@
<template>
<Modal :show="visible" v-on:close="visible = false">
<div>
<h2 class="font-medium text-neutral-900 mb-6">{{ fm.currentDirectory }}</h2>
</div>
</Modal>
</template>
<script lang="ts">
import Vue from 'vue';
import Modal from '@/components/core/Modal.vue';
import {mapState} from "vuex";
export default Vue.extend({
name: 'CreateFolderModal',
components: {Modal},
computed: {
...mapState('server', ['fm']),
},
data: function () {
return {
visible: false,
};
},
mounted: function () {
window.events.$on('server:files:open-directory-modal', () => {
this.visible = true;
});
},
});
</script>

View File

@ -42,12 +42,13 @@
<div class="flex mt-6" v-if="!loading && !errorMessage">
<div class="flex-1"></div>
<div class="mr-4">
<a href="#" class="block btn btn-secondary btn-sm">New Folder</a>
<a href="#" class="block btn btn-secondary btn-sm" v-on:click.prevent="openNewFolderModal">New Folder</a>
</div>
<div>
<a href="#" class="block btn btn-primary btn-sm">New File</a>
</div>
</div>
<CreateFolderModal/>
</div>
</template>
@ -58,6 +59,7 @@
import getDirectoryContents from "@/api/server/getDirectoryContents";
import FileRow from "@/components/server/components/filemanager/FileRow.vue";
import FolderRow from "@/components/server/components/filemanager/FolderRow.vue";
import CreateFolderModal from '../components/filemanager/modals/CreateFolderModal.vue';
type DataStructure = {
loading: boolean,
@ -70,7 +72,7 @@
export default Vue.extend({
name: 'FileManager',
components: {FileRow, FolderRow},
components: {CreateFolderModal, FileRow, FolderRow},
computed: {
...mapState('server', ['server', 'credentials']),
...mapState('socket', ['connected']),
@ -110,6 +112,8 @@
* Watch the current directory setting and when it changes update the file listing.
*/
currentDirectory: function () {
this.$store.dispatch('server/updateCurrentDirectory', this.currentDirectory);
this.listDirectory();
},
@ -167,6 +171,10 @@
this.loading = false;
});
},
openNewFolderModal: function () {
window.events.$emit('server:files:open-directory-modal');
}
},
});
</script>

View File

@ -1,8 +1,8 @@
// @ts-ignore
import route from '../../../../../vendor/tightenco/ziggy/src/js/route';
import {ActionContext} from "vuex";
import {ServerData} from "../../models/server";
import {ServerApplicationCredentials, ServerState} from "../types";
import {ServerData} from "@/models/server";
import {FileManagerState, ServerApplicationCredentials, ServerState} from "../types";
export default {
namespaced: true,
@ -10,6 +10,9 @@ export default {
server: {},
credentials: {node: '', key: ''},
console: [],
fm: {
currentDirectory: '/',
},
},
getters: {},
actions: {
@ -63,8 +66,20 @@ export default {
.catch(reject);
});
},
/**
* Update the last viewed directory for the server the user is currently viewing. This allows
* us to quickly navigate back to that directory, as well as ensure that actions taken are
* performed aganist the correct directory without having to pass that mess everywhere.
*/
updateCurrentDirectory: ({commit}: ActionContext<ServerState, any>, directory: string) => {
commit('SET_CURRENT_DIRECTORY', directory);
},
},
mutations: {
SET_CURRENT_DIRECTORY: function (state: ServerState, directory: string) {
state.fm.currentDirectory = directory;
},
SERVER_DATA: function (state: ServerState, data: ServerData) {
state.server = data;
},

View File

@ -19,10 +19,15 @@ export type ServerApplicationCredentials = {
key: string,
};
export type FileManagerState = {
currentDirectory: string,
}
export type ServerState = {
server: ServerData,
credentials: ServerApplicationCredentials,
console: Array<string>,
fm: FileManagerState,
};
export type DashboardState = {