diff --git a/packages/file-handling/src/dbp-nextcloud-file-picker.js b/packages/file-handling/src/dbp-nextcloud-file-picker.js index cdb0c047d3b1ee6bb96907f0fffebfca947a2dd1..7762e60dedadf6e19e9c673d201ab0539ec4a88e 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 8ef1b2ae7e5cdcfb5b5b8f0ed3bf17e796b6f381..e0b890e5af9296d884fbbfc2ffa92ab8929ae3ef 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 72880778b9d02b0405c9097c400ba04ab4bf80ec..03b288a72f5a67e666e160da366f9244d9f92a7e 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 0118dd1db623e33356bcf2d1136ab420f01c8c66..e79dcf78afd669f1ca55ab1da393ceb9edc2a8b9 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(); } }, {