From 076dbbd999354b3eb28199c6634b135b50bd7f31 Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Tue, 16 Nov 2021 20:55:55 +0100
Subject: [PATCH] update files

---
 app/adapters/document.js             | 16 ++++++++++++++++
 app/components/button/upload.js      | 20 ++++++++++----------
 app/routes/authenticated/document.js |  2 +-
 3 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/app/adapters/document.js b/app/adapters/document.js
index f0b1aab..f5ec3ec 100644
--- a/app/adapters/document.js
+++ b/app/adapters/document.js
@@ -14,4 +14,20 @@ export default class NodeAdapter extends ApplicationAdapter {
       return ret;
     });
   }
+
+  uploadFile({doc, file}) {
+    let build_url, url, headers;
+
+    headers = this.headers;
+    headers['Content-Disposition'] = `attachment; filename=${file.name}`;
+
+    build_url = this.buildURL('documents', doc.id);
+    url = `${build_url}upload/${file.name}`;
+
+    return fetch(url, {
+      method: 'PUT',
+      body: file,
+      headers: headers
+    });
+  }
 }
diff --git a/app/components/button/upload.js b/app/components/button/upload.js
index 7645086..2f10ec2 100644
--- a/app/components/button/upload.js
+++ b/app/components/button/upload.js
@@ -30,8 +30,6 @@ export default class UploadButtonComponent extends Component {
   @action
   onUploadChange(event) {
     let files;
-    console.log(this.args.node.id);
-    console.log(event.target.files);
 
     files = event.target.files;
 
@@ -41,22 +39,22 @@ export default class UploadButtonComponent extends Component {
     }
 
     Array.from(files, (file) => {
-      let new_doc;
-
       /* Upload of documents to the server side is two stage process:
         (1.) create document model on the server side
         (2.) upload file and associated it with model created in (1.)
        */
-      new_doc = this._createDocumentModel({
+      this._createDocumentModel({
         file: file,
         node: this.args.node,
         lang: "deu"
+      }).then((doc) => {
+        this._uploadFile({doc, file});
       });
-      this._uploadFile({doc: new_doc, file: file});
+
     });
   }
 
-  _createDocumentModel({file, node, lang}) {
+  async _createDocumentModel({file, node, lang}) {
     /*
       Creates document model on the server side.
 
@@ -78,9 +76,7 @@ export default class UploadButtonComponent extends Component {
     new_doc.parent = node;
     new_doc.lang = lang;
 
-    new_doc.save();
-
-    return new_doc;
+    return new_doc.save();
   }
 
   _uploadFile({file, doc}) {
@@ -89,6 +85,10 @@ export default class UploadButtonComponent extends Component {
 
       Document model ``doc`` should exist on the server side.
     */
+    let doc_adapter = this.store.adapterFor('document');
+
+
+    doc_adapter.uploadFile({file, doc});
   }
 
 }
\ No newline at end of file
diff --git a/app/routes/authenticated/document.js b/app/routes/authenticated/document.js
index 1bb1975..4695eb5 100644
--- a/app/routes/authenticated/document.js
+++ b/app/routes/authenticated/document.js
@@ -61,7 +61,7 @@ export default class DocumentRoute extends Route {
     return {
       'document_version': document_version,
       'pages': pages_with_url
-    }
+    };
   }
 
   renderTemplate() {
-- 
GitLab