From 977a83a76cb35ef37690cb7192ec839635044b79 Mon Sep 17 00:00:00 2001 From: Tamara Steinwender <tamara.steinwender@tugraz.at> Date: Wed, 5 Aug 2020 15:44:45 +0200 Subject: [PATCH] Handle close dialog error in Micromodal library, few bugfixes, create propfind for checking rights --- .../src/dbp-nextcloud-file-picker.js | 100 ++++++++++-------- packages/file-handling/src/file-sink.js | 25 ++--- packages/file-handling/src/file-source.js | 4 +- packages/file-handling/src/micromodal.es.js | 8 +- 4 files changed, 70 insertions(+), 67 deletions(-) diff --git a/packages/file-handling/src/dbp-nextcloud-file-picker.js b/packages/file-handling/src/dbp-nextcloud-file-picker.js index cdb0c047..7762e60d 100644 --- a/packages/file-handling/src/dbp-nextcloud-file-picker.js +++ b/packages/file-handling/src/dbp-nextcloud-file-picker.js @@ -11,7 +11,6 @@ import {humanFileSize} from 'dbp-common/i18next'; import Tabulator from 'tabulator-tables'; import nextcloudFileURL from 'consts:nextcloudFileURL'; import MicroModal from './micromodal.es'; -import {waitFor} from "@babel/core/lib/gensync-utils/async"; /** * NextcloudFilePicker web component @@ -40,7 +39,6 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { this.replaceFilename = ''; this.uploadFileObject = null; this.uploadFileDirectory = null; - this.isDialogOpen = true; this.fileList = []; } @@ -71,7 +69,6 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { replaceFilename: { type: String, attribute: false }, uploadFileObject: { type: Object, attribute: false }, uploadFileDirectory: { type: String, attribute: false }, - isDialogOpen: { type: Boolean, attribute: false }, }; } @@ -280,7 +277,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { this.webDavClient .getDirectoryContents(path, {details: true}) .then(contents => { - console.log("contents", contents); + //console.log("contents", contents); this.loading = false; this.statusText = ""; this.tabulatorTable.setData(contents.data); @@ -307,6 +304,23 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { this.statusText = reloadButton; }); + const contents2 = this.webDavClient.customRequest(path, { + method: "PROPFIND", + headers: { + Accept: "text/plain", + Depth: 0 + }, + data: "<?xml version=\"1.0\"?>\n" + + "<d:propfind xmlns:d=\"DAV:\" xmlns:oc=\"http://owncloud.org/ns\" xmlns:nc=\"http://nextcloud.org/ns\">\n" + + " <d:prop>\n" + + " <oc:permissions />\n" + + " <nc:acl-permissions />\n" + + " </d:prop>\n" + + "</d:propfind>", + responseType: "text" + }); // contents => { //console.log("---------", contents)}); + + } directoryClicked(event, file) { @@ -316,7 +330,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { downloadFiles(files) { files.forEach((fileData) => this.downloadFile(fileData)); - MicroModal.close(); + } downloadFile(fileData) { @@ -378,8 +392,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { let path = directory + "/" + file.name; // https://github.com/perry-mitchell/webdav-client#putfilecontents let ret = false; - try{ - let contents = await this.webDavClient + let contents = await this.webDavClient .putFileContents(path, file, { overwrite: false, onUploadProgress: progress => { console.log(`Uploaded ${progress.loaded} bytes of ${progress.total}`); }}).then(function() { @@ -390,22 +403,20 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { this.fileList.shift(); console.log("FileList: ", this.fileList); this.uploadFile(directory); + }).catch(error => { + console.error(error.message); + //this.loading = false; + //this.statusText = error.message; + console.log("--- h-", error.message); + if(error.message.search("412") !== -1) { + this.replaceModalDialog(file, directory); + } } - ); - - } catch(error ) { - console.error(error.message); - this.loading = false; - this.statusText = error.message; - console.log("----", error.message); - if(error.message.search("412") !== -1) { - this.replaceModalDialog(file, directory); - console.log("dialog open after upload? ", this.isDialogOpen); - } - } - + ); } else { + this.loading = false; + this.statusText = ""; const event = new CustomEvent("dbp-nextcloud-file-picker-file-uploaded-finished", { bubbles: true, composed: true }); this.dispatchEvent(event); @@ -421,8 +432,9 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { let directory = this.uploadFileDirectory; if(this._("input[name='replacement']:checked").value === "ignore") { - MicroModal.close(); + MicroModal.close(this._("#replace-modal")); this.fileList.shift(); + this.uploadFile(directory); return true; } else if (this._("input[name='replacement']:checked").value === "new-name") { @@ -437,32 +449,29 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { } // https://github.com/perry-mitchell/webdav-client#putfilecontents - try{ - let contents = await this.webDavClient + let contents = await this.webDavClient .putFileContents(path, file, { overwrite: overwrite, onUploadProgress: progress => { console.log(`Uploaded ${progress.loaded} bytes of ${progress.total}`); - }}); - this.loading = false; - this.statusText = ""; - console.log("try finished"); - console.log("after one file finished"); - this.fileList.shift(); - console.log("FileList length: ", this.fileList.length); - console.log("########## after one file finished"); - MicroModal.close(); - this.uploadFile(directory); - - } catch(error ) { - console.error(error.message); - this.loading = false; - this.statusText = error.message; - console.log("----", error.message); - if(error.message.search("412") !== -1) { - MicroModal.close(); - this.replaceModalDialog(file, directory); - console.log("dialog open after upload? ", this.isDialogOpen); - } - } + }}).then(content => { + this.loading = false; + this.statusText = ""; + console.log("try finished"); + console.log("after one file finished"); + this.fileList.shift(); + console.log("FileList length: ", this.fileList.length); + console.log("########## after one file finished"); + MicroModal.close(this._("#replace-modal")); + this.uploadFile(directory); + }).catch(error => { + console.error(error.message); + this.loading = false; + this.statusText = error.message; + console.log("----", error.message); + if(error.message.search("412") !== -1) { + MicroModal.close(this._("#replace-modal")); + this.replaceModalDialog(file, directory); + } + }); } /** @@ -476,7 +485,6 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { this.uploadFileDirectory = directory; MicroModal.show(this._('#replace-modal')); - console.log("dialog is open? ", this.isDialogOpen); } /** diff --git a/packages/file-handling/src/file-sink.js b/packages/file-handling/src/file-sink.js index 8ef1b2ae..e0b890e5 100644 --- a/packages/file-handling/src/file-sink.js +++ b/packages/file-handling/src/file-sink.js @@ -114,28 +114,14 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) { } async uploadToNextcloud(directory) { - let that = this; const element = that._('#nextcloud-file-picker'); console.log("davor"); await element.uploadFiles(that.files, directory); - /*console.log("fertig", finished); - if(finished) { - MicroModal.close(); - console.log("close"); - send({ - "summary": i18n.t('file-sink.upload-success-title'), - "body": i18n.t('file-sink.upload-success-body', {name: this.nextcloudName}), - "type": "success", - "timeout": 5, - }); - }*/ - - } finishedFileUpload() { - MicroModal.close(); + MicroModal.close(this._('#modal-picker')); console.log("close"); send({ "summary": i18n.t('file-sink.upload-success-title'), @@ -153,13 +139,14 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) { openDialog() { console.log("openDialog"); MicroModal.show(this._('#modal-picker'), { - onClose: modal => { this.isDialogOpen = false; } + onClose: modal => { this.isDialogOpen = false; }, + closeTrigger: 'data-custom-close', }); } closeDialog() { console.log("closeDialog"); - MicroModal.close(); + MicroModal.close(this._('#modal-picker')); } static get styles() { @@ -189,7 +176,7 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) { return html` <vpu-notification lang="de" client-id="my-client-id"></vpu-notification> <div class="modal micromodal-slide" id="modal-picker" aria-hidden="true"> - <div class="modal-overlay" tabindex="-1" data-micromodal-close> + <div class="modal-overlay" tabindex="-1" data-custom-close> <div class="modal-container" role="dialog" aria-modal="true" aria-labelledby="modal-picker-title"> <nav class="modal-nav"> <div title="${i18n.t('file-sink.nav-local')}" @@ -206,7 +193,7 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) { </div> </nav> <div class="modal-header"> - <button title="${i18n.t('file-sink.modal-close')}" class="modal-close" aria-label="Close modal" data-micromodal-close> + <button title="${i18n.t('file-sink.modal-close')}" class="modal-close" aria-label="Close modal" data-custom-close @click="${() => { this.closeDialog()}}"> <dbp-icon title="${i18n.t('file-sink.modal-close')}" name="close" class="close-icon"></dbp-icon> </button> <p class="modal-context"> ${this.context}</p> diff --git a/packages/file-handling/src/file-source.js b/packages/file-handling/src/file-source.js index 72880778..03b288a7 100644 --- a/packages/file-handling/src/file-source.js +++ b/packages/file-handling/src/file-source.js @@ -205,6 +205,8 @@ export class FileSource extends ScopedElementsMixin(DBPLitElement) { * @param file */ sendFileEvent(file) { + MicroModal.close(this._('#modal-picker')); + console.log("close filesource modal.") const data = {"file": file}; const event = new CustomEvent("dbp-file-source-file-selected", { "detail": data, bubbles: true, composed: true }); this.dispatchEvent(event); @@ -319,7 +321,7 @@ export class FileSource extends ScopedElementsMixin(DBPLitElement) { closeDialog() { console.log("closeDialog"); - MicroModal.close(); + MicroModal.close(this._('#modal-picker')); } static get styles() { diff --git a/packages/file-handling/src/micromodal.es.js b/packages/file-handling/src/micromodal.es.js index 0118dd1d..e79dcf78 100644 --- a/packages/file-handling/src/micromodal.es.js +++ b/packages/file-handling/src/micromodal.es.js @@ -185,7 +185,13 @@ var MicroModal = function () { }, { key: "closeModalById", value: function closeModalById(targetModal) { - this.modal = document.getElementById(targetModal); + // added support to pass on an element or an id -> for webcomponents + if (targetModal instanceof HTMLElement) { + this.modal = targetModal; + } + else { + this.model = document.getElementById(targetModal); + } if (this.modal) this.closeModal(); } }, { -- GitLab