From 0e494433d5b9c1738cabf1ec9954d9eac2ed3ac1 Mon Sep 17 00:00:00 2001 From: Eugen Ciur <eugen@papermerge.com> Date: Sat, 27 Nov 2021 06:04:32 +0100 Subject: [PATCH] download document version --- .../button/download_document_version.hbs | 8 ++-- .../button/download_document_version.js | 30 ++++++++++++++ app/components/viewer/action_buttons.hbs | 6 --- app/components/viewer/index.js | 2 +- app/router.js | 4 -- app/services/requests.js | 40 +++++++++++++++++++ 6 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 app/components/button/download_document_version.js diff --git a/app/components/button/download_document_version.hbs b/app/components/button/download_document_version.hbs index ad7e43f..0931d85 100644 --- a/app/components/button/download_document_version.hbs +++ b/app/components/button/download_document_version.hbs @@ -9,12 +9,10 @@ <ul class="dropdown-menu"> {{#each @document_versions as |document_version|}} <li> - <LinkTo - @route="authenticated.document-version-download" - @model={{document_version.id}} - class="dropdown-item"> + <a class="dropdown-item" href="#" + {{on "click" (fn this.download document_version)}}> version {{document_version.number}} {{document_version.short_description}} - </LinkTo> + </a> </li> {{/each}} </ul> diff --git a/app/components/button/download_document_version.js b/app/components/button/download_document_version.js new file mode 100644 index 0000000..c974ce5 --- /dev/null +++ b/app/components/button/download_document_version.js @@ -0,0 +1,30 @@ +import Component from '@glimmer/component'; +import { action } from '@ember/object'; +import { inject as service } from '@ember/service'; + + +export default class ButtonDownloadComponent extends Component { + + @service requests; + + @action + download(document_version) { + /* + `document_version` contains following attributes: + id + number + file_name + lang + pages + size + page_count + short_description + + attributes which correspond to server side (or client side) DocumentVersion model + */ + this.requests.downloadDocumentVersion( + document_version + ); + } +} + diff --git a/app/components/viewer/action_buttons.hbs b/app/components/viewer/action_buttons.hbs index 294289e..c967b5c 100644 --- a/app/components/viewer/action_buttons.hbs +++ b/app/components/viewer/action_buttons.hbs @@ -1,12 +1,6 @@ <div> <Button::DownloadDocumentVersion @document_versions={{@document_versions}} /> - <button - class="btn btn-light" - type="button"> - <i class="fa fa-upload mr-1"></i> - Upload - </button> <button class="btn btn-light" type="button" diff --git a/app/components/viewer/index.js b/app/components/viewer/index.js index 38951fb..4a00bee 100644 --- a/app/components/viewer/index.js +++ b/app/components/viewer/index.js @@ -10,7 +10,7 @@ export default class ViewComponent extends Component { @action onRunOCR() { this.requests.runOCR({ - doc_id: this.args.last_document_version.id, + doc_id: this.args.doc.id, lang: 'deu' }); } diff --git a/app/router.js b/app/router.js index b1ccadd..014e172 100644 --- a/app/router.js +++ b/app/router.js @@ -11,10 +11,6 @@ Router.map(function () { this.route('documents'); this.route('inbox'); this.route('document', { path: '/document/:document_id' }); - this.route( - 'document-version-download', - { path: '/document-versions/:document_version_id/download/' } - ); this.route('nodes', { path: '/nodes/:node_id' }); diff --git a/app/services/requests.js b/app/services/requests.js index 78b01f7..fedbb59 100644 --- a/app/services/requests.js +++ b/app/services/requests.js @@ -27,6 +27,46 @@ export default class Requests extends Service { }); } + async downloadDocumentVersion(document_version) { + /* + `document_version` contains following attributes: + id + number + file_name + lang + pages + size + page_count + short_description + + attributes which correspond to server side (or client side) DocumentVersion model + */ + let url, headers_copy = {}; + + url = `${this.base_url}document-versions/${document_version.id}/download/`; + Object.assign(headers_copy, this.headers); + //headers_copy['Access-Control-Allow-Origin'] = ENV.APP.HOST; + + return fetch(url, { + method: 'GET', + headers: headers_copy + }).then( + response => response.blob() + ).then((blob) => { + let url = window.URL.createObjectURL(blob); + let a = document.createElement('a'); + + a.href = url; + a.download = document_version.file_name; + // we need to append the element to the dom -> otherwise it will not + // work in firefox + document.body.appendChild(a); + a.click(); + //afterwards we remove the element again + a.remove(); + }); + } + get base_url() { return `${ENV.APP.HOST}/${ENV.APP.NAMESPACE}/`; } -- GitLab