Add support for actually creating that folder on the daemon
This commit is contained in:
		
							parent
							
								
									0b11532a48
								
							
						
					
					
						commit
						866b3a3aac
					
				
							
								
								
									
										27
									
								
								resources/assets/scripts/api/server/files/createFolder.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								resources/assets/scripts/api/server/files/createFolder.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					import {ServerApplicationCredentials} from "@/store/types";
 | 
				
			||||||
 | 
					import http from "@/api/http";
 | 
				
			||||||
 | 
					import {AxiosError, AxiosRequestConfig} from "axios";
 | 
				
			||||||
 | 
					import {ServerData} from "@/models/server";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Connects to the remote daemon and creates a new folder on the server.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function createFolder(server: ServerData, credentials: ServerApplicationCredentials, path: string): Promise<void> {
 | 
				
			||||||
 | 
					    const config: AxiosRequestConfig = {
 | 
				
			||||||
 | 
					        baseURL: credentials.node,
 | 
				
			||||||
 | 
					        headers: {
 | 
				
			||||||
 | 
					            'X-Access-Server': server.uuid,
 | 
				
			||||||
 | 
					            'X-Access-Token': credentials.key,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return new Promise((resolve, reject) => {
 | 
				
			||||||
 | 
					        http.post('/v1/server/file/folder', { path }, config)
 | 
				
			||||||
 | 
					            .then(() => {
 | 
				
			||||||
 | 
					                resolve();
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .catch((error: AxiosError) => {
 | 
				
			||||||
 | 
					                reject(error);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
    <Modal :show="visible" v-on:close="onModalClose" :showCloseIcon="false">
 | 
					    <Modal :show="visible" v-on:close="onModalClose" :showCloseIcon="false" :dismissable="!isLoading">
 | 
				
			||||||
        <div class="flex items-end">
 | 
					        <div class="flex items-end">
 | 
				
			||||||
            <div class="flex-1">
 | 
					            <div class="flex-1">
 | 
				
			||||||
                <label class="input-label">
 | 
					                <label class="input-label">
 | 
				
			||||||
@ -16,8 +16,15 @@
 | 
				
			|||||||
                />
 | 
					                />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="ml-4">
 | 
					            <div class="ml-4">
 | 
				
			||||||
                <button class="btn btn-primary btn-sm" type="submit" v-on:submit.prevent="submit">
 | 
					                <button type="submit"
 | 
				
			||||||
                    Create
 | 
					                        class="btn btn-primary btn-sm"
 | 
				
			||||||
 | 
					                        v-on:click.prevent="submit"
 | 
				
			||||||
 | 
					                        :disabled="errors.any() || isLoading"
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                    <span class="spinner white" v-bind:class="{ hidden: !isLoading }"> </span>
 | 
				
			||||||
 | 
					                    <span :class="{ hidden: isLoading }">
 | 
				
			||||||
 | 
					                        Create
 | 
				
			||||||
 | 
					                    </span>
 | 
				
			||||||
                </button>
 | 
					                </button>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
@ -31,17 +38,19 @@
 | 
				
			|||||||
    import Vue from 'vue';
 | 
					    import Vue from 'vue';
 | 
				
			||||||
    import Modal from '@/components/core/Modal.vue';
 | 
					    import Modal from '@/components/core/Modal.vue';
 | 
				
			||||||
    import {mapState} from "vuex";
 | 
					    import {mapState} from "vuex";
 | 
				
			||||||
 | 
					    import {createFolder} from "@/api/server/files/createFolder";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    export default Vue.extend({
 | 
					    export default Vue.extend({
 | 
				
			||||||
        name: 'CreateFolderModal',
 | 
					        name: 'CreateFolderModal',
 | 
				
			||||||
        components: {Modal},
 | 
					        components: {Modal},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        computed: {
 | 
					        computed: {
 | 
				
			||||||
            ...mapState('server', ['fm']),
 | 
					            ...mapState('server', ['server', 'credentials', 'fm']),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        data: function () {
 | 
					        data: function () {
 | 
				
			||||||
            return {
 | 
					            return {
 | 
				
			||||||
 | 
					                isLoading: false,
 | 
				
			||||||
                visible: false,
 | 
					                visible: false,
 | 
				
			||||||
                folderName: '',
 | 
					                folderName: '',
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
@ -55,11 +64,17 @@
 | 
				
			|||||||
            window.events.$on('server:files:open-directory-modal', () => {
 | 
					            window.events.$on('server:files:open-directory-modal', () => {
 | 
				
			||||||
                this.visible = true;
 | 
					                this.visible = true;
 | 
				
			||||||
                this.$nextTick(() => {
 | 
					                this.$nextTick(() => {
 | 
				
			||||||
                    (this.$refs.folderNameField as HTMLInputElement).focus();
 | 
					                    if (this.$refs.folderNameField) {
 | 
				
			||||||
 | 
					                        (this.$refs.folderNameField as HTMLInputElement).focus();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        beforeDestroy: function () {
 | 
				
			||||||
 | 
					            window.events.$off('server:files:open-directory-modal');
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        methods: {
 | 
					        methods: {
 | 
				
			||||||
            submit: function () {
 | 
					            submit: function () {
 | 
				
			||||||
                this.$validator.validate().then((result) => {
 | 
					                this.$validator.validate().then((result) => {
 | 
				
			||||||
@ -67,7 +82,17 @@
 | 
				
			|||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    this.onModalClose();
 | 
					                    this.isLoading = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    console.log(`${this.fm.currentDirectory}/${this.folderName.replace(/^\//, '')}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    createFolder(this.server, this.credentials, `${this.fm.currentDirectory}/${this.folderName.replace(/^\//, '')}`)
 | 
				
			||||||
 | 
					                        .then(() => {
 | 
				
			||||||
 | 
					                            this.$emit('close');
 | 
				
			||||||
 | 
					                            this.onModalClose();
 | 
				
			||||||
 | 
					                        })
 | 
				
			||||||
 | 
					                        .catch(console.error.bind(this))
 | 
				
			||||||
 | 
					                        .then(() => this.isLoading = false)
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -48,7 +48,7 @@
 | 
				
			|||||||
                <a href="#" class="block btn btn-primary btn-sm">New File</a>
 | 
					                <a href="#" class="block btn btn-primary btn-sm">New File</a>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <CreateFolderModal/>
 | 
					        <CreateFolderModal v-on:close="listDirectory"/>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -112,8 +112,6 @@
 | 
				
			|||||||
             * Watch the current directory setting and when it changes update the file listing.
 | 
					             * Watch the current directory setting and when it changes update the file listing.
 | 
				
			||||||
             */
 | 
					             */
 | 
				
			||||||
            currentDirectory: function () {
 | 
					            currentDirectory: function () {
 | 
				
			||||||
                this.$store.dispatch('server/updateCurrentDirectory', this.currentDirectory);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                this.listDirectory();
 | 
					                this.listDirectory();
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -152,6 +150,8 @@
 | 
				
			|||||||
                this.loading = true;
 | 
					                this.loading = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                const directory = encodeURI(this.currentDirectory.replace(/^\/|\/$/, ''));
 | 
					                const directory = encodeURI(this.currentDirectory.replace(/^\/|\/$/, ''));
 | 
				
			||||||
 | 
					                this.$store.dispatch('server/updateCurrentDirectory', `/${directory}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                getDirectoryContents(this.$route.params.id, directory)
 | 
					                getDirectoryContents(this.$route.params.id, directory)
 | 
				
			||||||
                    .then((response) => {
 | 
					                    .then((response) => {
 | 
				
			||||||
                        this.files = response.files;
 | 
					                        this.files = response.files;
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
import route from '../../../../../vendor/tightenco/ziggy/src/js/route';
 | 
					import route from '../../../../../vendor/tightenco/ziggy/src/js/route';
 | 
				
			||||||
import {ActionContext} from "vuex";
 | 
					import {ActionContext} from "vuex";
 | 
				
			||||||
import {ServerData} from "@/models/server";
 | 
					import {ServerData} from "@/models/server";
 | 
				
			||||||
import {FileManagerState, ServerApplicationCredentials, ServerState} from "../types";
 | 
					import {ServerApplicationCredentials, ServerState} from "../types";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
    namespaced: true,
 | 
					    namespaced: true,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user