ajout composant fileExistsDialog (non fonctionnel)
This commit is contained in:
101
src/components/FileExistsDialog.vue
Normal file
101
src/components/FileExistsDialog.vue
Normal file
@ -0,0 +1,101 @@
|
||||
<template>
|
||||
<div class="fixed inset-0 flex items-center justify-center bg-gray-700 bg-opacity-50 z-50">
|
||||
<div v-if="!displayRename" class="bg-NcBlack rounded-lg shadow-lg p-6 w-96">
|
||||
<h2 class="text-lg font-semibold mb-4">Le fichier existe déjà</h2>
|
||||
<p>Le fichier "{{ fileName }}" existe déjà. Que voulez-vous faire ?</p>
|
||||
<div class="flex justify-end mt-4 space-x-2">
|
||||
<button @click="onOverwrite">Écraser</button>
|
||||
<button @click="toggleRename">Renommer</button>
|
||||
<button @click="onCancel">Annuler</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Renommer le fichier -->
|
||||
<div v-else class="bg-NcBlack rounded-lg shadow-lg p-6 w-96">
|
||||
<h2 class="text-lg font-semibold mb-4">Modifier le nom du fichier</h2>
|
||||
<input
|
||||
type="text"
|
||||
v-model="newFileName"
|
||||
@input="onInputChange"
|
||||
@keyup.enter="save"
|
||||
placeholder="Entrez le nom du fichier"
|
||||
class="w-full px-4 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
/>
|
||||
<div class="flex justify-end mt-4 space-x-2">
|
||||
<button @click="save" class="px-4 py-2 bg-gray-200 text-gray-700 rounded-md hover:bg-gray-300 transition">Valider</button>
|
||||
<button @click="toggleRename" class="px-4 py-2 bg-gray-200 text-gray-700 rounded-md hover:bg-gray-300 transition">Annuler</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
fileName: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
var oldFileName = this.fileName;
|
||||
var newFileName = this.fileName;
|
||||
var extension = '';
|
||||
if(!this.isDirectory) {
|
||||
let nameSplit = newFileName.split('.');
|
||||
if (nameSplit.length > 1) {
|
||||
extension = nameSplit.pop();
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
displayRename: false,
|
||||
oldFileName,
|
||||
newFileName,
|
||||
extension,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onOverwrite() {
|
||||
this.$emit('overwrite', {forAll : false});
|
||||
},
|
||||
onCancel() {
|
||||
this.$emit('cancel');
|
||||
},
|
||||
toggleRename() {
|
||||
this.displayRename = !this.displayRename;
|
||||
},
|
||||
save() {
|
||||
if(this.newFileName !== ''){
|
||||
// Séparer le nom de fichier sans l'extension
|
||||
const fileNameWithoutExtension = this.newFileName.slice(0, this.newFileName.lastIndexOf('.'));
|
||||
// Re-construire le nom du fichier avec l'extension d'origine
|
||||
const newFileNameWithOriginalExtension = fileNameWithoutExtension + '.' + this.extension;
|
||||
|
||||
if (!this.isDirectory && this.newFileName !== newFileNameWithOriginalExtension) {
|
||||
// L'extension a été modifiée, on rétablit l'extension correcte
|
||||
this.newFileName = newFileNameWithOriginalExtension;
|
||||
}
|
||||
|
||||
this.$emit("rename", { initialFileName: this.initialFileName, newFileName: this.newFileName });
|
||||
this.onCancel();
|
||||
}
|
||||
},
|
||||
onInputChange() {
|
||||
if (!this.isDirectory) {
|
||||
const fileNameWithoutExtension = this.newFileName.slice(0, this.newFileName.lastIndexOf('.'));
|
||||
const newFileNameWithOriginalExtension = fileNameWithoutExtension + '.' + this.extension;
|
||||
|
||||
// Si l'extension est différente de celle d'origine, on la rétablit
|
||||
if (this.extension !== '' && this.newFileName !== newFileNameWithOriginalExtension) {
|
||||
// Vous pouvez ici vérifier si l'extension a été modifiée et la rétablir
|
||||
|
||||
this.newFileName = newFileNameWithOriginalExtension;
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
@ -15,9 +15,9 @@
|
||||
<Plus :size="20" />
|
||||
<span>Nouveau</span>
|
||||
</button>
|
||||
<span v-else>
|
||||
<div v-else>
|
||||
<ProgressBar :value="transferProgress" :color="transferStatus" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</NcBreadcrumbs>
|
||||
@ -117,8 +117,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<EditFileName v-if="!editDialogDisabled" :initialFileName="initialFileName" :isDirectory="isDirectory" @update="updateFileName" @close="closeEditDialog">
|
||||
</EditFileName>
|
||||
<FileExistsDialog v-if="!fileExistDialogDisabled" :fileName="initialFileName" @overwrite="" @rename="" @cancel="fileExistDialogDisabled = true">
|
||||
</FileExistsDialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -126,16 +129,22 @@
|
||||
|
||||
<script>
|
||||
import { getClient, getRootPath } from '@nextcloud/files/dav';
|
||||
|
||||
// NextCloud Components
|
||||
import NcBreadcrumbs from '@nextcloud/vue/dist/Components/NcBreadcrumbs.js';
|
||||
import NcBreadcrumb from '@nextcloud/vue/dist/Components/NcBreadcrumb.js';
|
||||
import Plus from 'vue-material-design-icons/Plus.vue'
|
||||
import NcActions from '@nextcloud/vue/dist/Components/NcActions.js';
|
||||
import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js';
|
||||
import Delete from 'vue-material-design-icons/Delete.vue';
|
||||
import Pencil from 'vue-material-design-icons/Pencil.vue'
|
||||
//import NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'
|
||||
|
||||
// Custom components
|
||||
import ProgressBar from './ProgressBar.vue';
|
||||
import EditFileName from './EditFileName.vue';
|
||||
import FileExistsDialog from './FileExistsDialog.vue';
|
||||
|
||||
// Icons
|
||||
import Plus from 'vue-material-design-icons/Plus.vue'
|
||||
import Delete from 'vue-material-design-icons/Delete.vue';
|
||||
import Pencil from 'vue-material-design-icons/Pencil.vue'
|
||||
|
||||
export default {
|
||||
name: 'FileTable',
|
||||
@ -149,6 +158,7 @@ export default {
|
||||
Delete,
|
||||
Pencil,
|
||||
EditFileName,
|
||||
FileExistsDialog
|
||||
},
|
||||
props: {
|
||||
file: {
|
||||
@ -167,8 +177,9 @@ export default {
|
||||
isTransfering: false,
|
||||
isDragging: false,
|
||||
editDialogDisabled: true,
|
||||
initialFileName: '', // Nom originel du fichier/dossier edite
|
||||
isDirectory: false, // Si l'element edite est un dossier ou non
|
||||
fileExistDialogDisabled:true,
|
||||
initialFileName: '', // Nom originel du fichier/dossier a edite
|
||||
isDirectory: false, // Si l'element a edite est un dossier ou non
|
||||
transferProgress: 0,
|
||||
transferStatus: 'bg-blue-500',
|
||||
};
|
||||
@ -350,7 +361,11 @@ export default {
|
||||
await this.fetchFiles();
|
||||
}
|
||||
else{
|
||||
alert(`Vous ne pouvez pas deposer le fichier : ${file.name} car un autre fichier porte deja le meme nom.`);
|
||||
this.initialFileName = file.name;
|
||||
this.fileExistDialogDisabled = false;
|
||||
while(!this.fileExistDialogDisabled) {
|
||||
await this.sleep(50);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur lors du déplacement du fichier:', error);
|
||||
@ -368,7 +383,11 @@ export default {
|
||||
await this.fetchFiles();
|
||||
}
|
||||
else{
|
||||
alert(`Vous ne pouvez pas deposer le dossier : ${folder.name} car un autre dossier porte deja le meme nom.`);
|
||||
this.initialFileName = folder.name;
|
||||
this.fileExistDialogDisabled = false;
|
||||
while(!this.fileExistDialogDisabled) {
|
||||
await this.sleep();
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la création du dossier :', error);
|
||||
@ -427,7 +446,6 @@ export default {
|
||||
catch(error){
|
||||
console.error('Erreur lors du renommage d\'un element : ', error);
|
||||
}
|
||||
|
||||
await this.fetchFiles();
|
||||
}
|
||||
},
|
||||
@ -440,6 +458,9 @@ export default {
|
||||
let exists = await client.exists(path);
|
||||
|
||||
return exists;
|
||||
},
|
||||
async sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
Reference in New Issue
Block a user