<!-- This file is part of vospace-ui Copyright (C) 2021 Istituto Nazionale di Astrofisica SPDX-License-Identifier: GPL-3.0-or-later --> <template> <b-modal id="rename-modal" :title="'Rename ' + nodeToRename" okTitle="Rename" @show="reset" @shown="afterShow" @ok.prevent="renameNode"> <b-form inline> <label class="w-25" for="new-name-input">New name</label> <b-form-input v-model.trim="newName" id="new-name-input" ref="newNameInput" class="w-75" aria-describedby="new-name-input-feedback" :state="newNameState" v-on:input="resetError" @keydown.native.enter="renameNode"> </b-form-input> <b-form-invalid-feedback id="new-folder-name-input-feedback" class="text-right">{{newNameError}}</b-form-invalid-feedback> </b-form> </b-modal> </template> <script> export default { name: 'RenameModal', computed: { nodeToRename() { return this.$store.state.nodeToRename }, oldName() { return this.nodeToRename.substring(this.nodeToRename.lastIndexOf("/") + 1) }, newNameState() { if (this.newNameError) { return false; } return null; } }, data() { return { newName: this.oldName, newNameError: null } }, methods: { afterShow: function() { this.$refs.newNameInput.focus(); }, reset() { this.newName = this.oldName; this.resetError(); }, resetError() { this.newNameError = null; }, renameNode() { if (this.newName === this.oldName) { return; } if (!this.newName) { this.newNameError = "Name is required"; } else if (/[<>?":\\/`|'*]/.test(this.newName)) { this.newNameError = "Name contains an illegal character. Following characters are not allowed: < > ? \" : \\ / | ' * `"; } else { let parentPath = this.nodeToRename.substring(0, this.nodeToRename.lastIndexOf('/') + 1); this.$store.dispatch('moveNode', { target: parentPath + this.oldName, direction: parentPath + this.newName }) .then(() => { this.$bvModal.hide('rename-modal'); }) .catch(res => { this.newFolderNameError = res.message; }); } } } } </script>