From f8e381086e2f1aff632610b578372c4d0a4b210d Mon Sep 17 00:00:00 2001
From: Tamara Steinwender <tamara.steinwender@tugraz.at>
Date: Tue, 16 Mar 2021 15:03:05 +0100
Subject: [PATCH] Show clipboardfiles in filesink

---
 packages/file-handling/src/file-sink.js       | 82 ++++++++++++++++++-
 packages/file-handling/src/file-source.js     |  1 +
 .../src/i18n/de/translation.json              | 10 ++-
 .../src/i18n/en/translation.json              | 10 ++-
 packages/file-handling/src/styles.js          |  2 +-
 5 files changed, 98 insertions(+), 7 deletions(-)

diff --git a/packages/file-handling/src/file-sink.js b/packages/file-handling/src/file-sink.js
index 1993bd30..1c0bf555 100644
--- a/packages/file-handling/src/file-sink.js
+++ b/packages/file-handling/src/file-sink.js
@@ -11,6 +11,7 @@ import FileSaver from 'file-saver';
 import MicroModal from "./micromodal.es";
 import * as fileHandlingStyles from './styles';
 import { send } from '@dbp-toolkit/common/notification';
+import {humanFileSize} from '@dbp-toolkit/common/i18next';
 
 
 /**
@@ -36,6 +37,7 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) {
         this.firstOpen = true;
 
         this.initialFileHandlingState = {target: '', path: ''};
+        this.clipBoardFiles = {files: ''};
     }
 
     static get scopedElements() {
@@ -69,6 +71,7 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) {
             nextcloudPath: {type: String, attribute: false},
 
             initialFileHandlingState: {type: Object, attribute: 'initial-file-handling-state'},
+            clipBoardFiles: {type: Object, attribute: 'clipboard-files'},
 
         };
     }
@@ -221,7 +224,25 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) {
         if (this.files.length !== 0) {
             data = {"files": this.files};
             this.sendSetPropertyEvent('clipboard-files', data);
+            this.closeDialog();
+            send({
+                "summary": i18n.t('file-sink.save-to-clipboard-title'),
+                "body": i18n.t('file-sink.save-to-clipboard-body', {count: this.files.length}),
+                "type": "success",
+                "timeout": 5,
+            });
+            console.log("--------------", this.clipBoardFiles);
         }
+
+    }
+
+    getClipboardFiles() {
+        let files = [];
+        for(let i = 0; i < this.clipBoardFiles.files.length; i ++)
+        {
+            files[i] =  html`<div class="clipboard-list"><strong>${this.clipBoardFiles.files[i].name}</strong> ${humanFileSize(this.clipBoardFiles.files[i].size)}</div>`;
+        }
+        return files;
     }
 
     closeDialog(e) {
@@ -250,6 +271,50 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) {
             .block {
                 margin-bottom: 10px;
             }
+            
+            .warning-icon{
+                font-size: 2rem;
+                padding: 0 1rem;
+            }
+            
+            .clipboard-btn{
+                margin-top: 1.5rem;
+                margin-bottom: 1.5rem;
+            }
+            
+            .warning-container{
+                display: flex;
+                max-width: 400px;
+            }
+
+            .clipboard-data h4{
+                margin-top: 2rem;
+            }
+            
+            .clipboard-data p{
+                margin-bottom: 1rem;
+            }
+            
+            .clipboard-list{
+                padding: 1rem 0;
+                border-top: 1px solid #eee;
+            }
+            
+
+            @media only screen
+            and (orientation: portrait)
+            and (max-device-width: 765px) {
+                .clipboard-container p, .clipboard-container h3{
+                    text-align: center;
+                }
+                .warning-container{
+                    flex-direction: column;
+                    align-items: center;
+                }
+                .warning-icon{
+                    margin-bottom: 1rem;
+                }
+            }
         `;
     }
 
@@ -322,13 +387,22 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) {
                             </div>
                             <div class="source-main ${classMap({"hidden": this.activeTarget !== "clipboard"})}">
                                 <div class="block clipboard-container">
-                                    <h2>In Zwischenablage speicher</h2>
-                                    <p>Hier können Sie Dateien temporär ablegen..<br><br></p>
-                                    <button class="button is-primary"
+                                    <h3>${i18n.t('file-sink.save-to-clipboard-title')}</h3>
+                                    <p>${i18n.t('file-sink.save-to-clipboard-text')}</p>
+                                    <button class="button is-primary clipboard-btn"
                                             ?disabled="${this.disabled}"
                                             @click="${() => { this.saveFilesToClipboard(); }}">
-                                        ${this.buttonLabel || "Ablegen"}
+                                        ${this.buttonLabel || i18n.t('file-sink.save-to-clipboard-btn', {count:this.files.length})}
                                     </button>
+                                    <div class="warning-container">
+                                        <dbp-icon name="warning" class="warning-icon"></dbp-icon>
+                                        <p>${i18n.t('file-sink.save-to-clipboard-warning')}</p>
+                                    </div>
+                                    <div class="clipboard-data ${classMap({"hidden": this.clipBoardFiles.files.length === 0})}">
+                                        <h4>Aktuell vorhandene Dateien im Clipboard</h4>
+                                        <p>Folgende Dateien werden überschrieben:</p>
+                                        ${this.getClipboardFiles()}
+                                    </div>
                                 </div>
                             </div>
                         </main>
diff --git a/packages/file-handling/src/file-source.js b/packages/file-handling/src/file-source.js
index 9634ee6d..ed7ccd1c 100644
--- a/packages/file-handling/src/file-source.js
+++ b/packages/file-handling/src/file-source.js
@@ -403,6 +403,7 @@ export class FileSource extends ScopedElementsMixin(DBPLitElement) {
     }
 
     getClipboardFiles() {
+        console.log("+++++++++++++++", this.clipBoardFiles);
         let htmlpath = [];
         htmlpath[0] =  html`ein file und danach select button<br>`;
         //console.log("############################", this.clipBoardFiles );
diff --git a/packages/file-handling/src/i18n/de/translation.json b/packages/file-handling/src/i18n/de/translation.json
index d6a874dd..0b3e9947 100644
--- a/packages/file-handling/src/i18n/de/translation.json
+++ b/packages/file-handling/src/i18n/de/translation.json
@@ -26,7 +26,15 @@
     "nav-local": "Lokaler Computer",
     "upload-success-title": "Erfolgreich hochgeladen",
     "upload-success-body": "Sie haben {{count}} Datei erfolgreich in {{name}} hochgeladen.",
-    "upload-success-body_plural": "Sie haben {{count}} Dateien erfolgreich in {{name}} hochgeladen."
+    "upload-success-body_plural": "Sie haben {{count}} Dateien erfolgreich in {{name}} hochgeladen.",
+    "save-to-clipboard-title": "Erfolgreich abgelegt",
+    "save-to-clipboard-body": "Sie haben {{count}} Datei im Clipboard temporär abgelegt. Vergessen Sie nicht diese dauerhaft zu speichern.",
+    "save-to-clipboard-body_plural": "Sie haben {{count}} Dateien im Clipboard temporär abgelegt. Vergessen Sie nicht diese dauerhaft zu speichern.",
+    "save-to-clipboard-btn": "{{count}} Datei ablegen",
+    "save-to-clipboard-btn_plural": "{{count}} Dateien ablegen",
+    "save-to-clipboard-title": "Dateien im Clipboard ablegen",
+    "save-to-clipboard-text": "Hier können Sie Dateien temporär ablegen.",
+    "save-to-clipboard-warning": "Vorsicht! Wenn Sie den Browser schließen, die Seite neu laden oder neue Dateien hinzufügen, wird das Clipboard automatisch geleert!"
   },
   "nextcloud-file-picker": {
     "open": "Nextcloud",
diff --git a/packages/file-handling/src/i18n/en/translation.json b/packages/file-handling/src/i18n/en/translation.json
index a5396952..28289180 100644
--- a/packages/file-handling/src/i18n/en/translation.json
+++ b/packages/file-handling/src/i18n/en/translation.json
@@ -26,7 +26,15 @@
     "nav-local": "My device",
     "upload-success-title": "Successful uploaded",
     "upload-success-body": "You have successfully uploaded {{count}} file to {{name}}.",
-    "upload-success-body_plural": "You have successfully uploaded {{count}} files to {{name}}."
+    "upload-success-body_plural": "You have successfully uploaded {{count}} files to {{name}}.",
+    "save-to-clipboard-title": "Cached successfully",
+    "save-to-clipboard-body": "You have temporarily stored {{count}} file in the clipboard. Don't forget to save it permanently.",
+    "save-to-clipboard-body_plural": "You have temporarily saved {{count}} files in the clipboard. Don't forget to save them permanently.",
+    "save-to-clipboard-btn": "{{count}} cache file",
+    "save-to-clipboard-btn_plural": "{{count}} cache files",
+    "save-to-clipboard-title": "Cache files in the clipboard ",
+    "save-to-clipboard-text": "Here you can cache files temporarily.",
+    "save-to-clipboard-warning": "Attention! When you close the browser, reload the page or add new files, the clipboard will automatically be emptied!"
   },
   "nextcloud-file-picker": {
     "open": "Nextcloud",
diff --git a/packages/file-handling/src/styles.js b/packages/file-handling/src/styles.js
index 723bf967..3ae37713 100644
--- a/packages/file-handling/src/styles.js
+++ b/packages/file-handling/src/styles.js
@@ -76,7 +76,7 @@ export function getFileHandlingCss() {
             align-items: center;
             flex-direction: column;
             width: 100%;
-            justify-content: center;
+            overflow-x: auto;
         }
 
         /**************************\\
-- 
GitLab