From a46b9cb8ea79dfe6c1b480c1233a9ad4d7e55004 Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Tue, 23 Mar 2021 15:20:40 +0100 Subject: [PATCH] Add document preview to reports [SCI-5559] --- .../reports/reports_datatable.js.erb | 8 +++---- app/controllers/reports_controller.rb | 12 +++++++++- app/datatables/report_datatable.rb | 8 +++---- app/views/assets/_asset_inline.html.erb | 2 +- .../_content_document_preview.html.erb | 23 +++++++++++++++++++ app/views/reports/index.html.erb | 2 ++ app/views/shared/_pdf_viewer.html.erb | 11 ++++++--- .../shared/file_preview/_content.html.erb | 2 +- config/routes.rb | 7 +++++- 9 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 app/views/reports/_content_document_preview.html.erb diff --git a/app/assets/javascripts/reports/reports_datatable.js.erb b/app/assets/javascripts/reports/reports_datatable.js.erb index 160620bc6..e804a9a0a 100644 --- a/app/assets/javascripts/reports/reports_datatable.js.erb +++ b/app/assets/javascripts/reports/reports_datatable.js.erb @@ -74,8 +74,8 @@ `; } - if (data.file) { - return ` + if (data.preview_url) { + return ` ${I18n.t('projects.reports.index.docx')} `; @@ -98,8 +98,8 @@ `; } - if (data.file) { - return ` + if (data.preview_url) { + return ` ${I18n.t('projects.reports.index.pdf')} `; diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index a91624940..a91296f6a 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -23,7 +23,7 @@ class ReportsController < ApplicationController result_contents ).freeze - before_action :load_vars, only: %i(edit update) + before_action :load_vars, only: %i(edit update document_preview) before_action :load_vars_nested, only: BEFORE_ACTION_METHODS before_action :load_visible_projects, only: :new before_action :load_available_repositories, @@ -455,6 +455,16 @@ class ReportsController < ApplicationController render json: { results: @available_repositories }, status: :ok end + def document_preview + render json: { html: render_to_string( + partial: 'reports/content_document_preview.html.erb', + locals: { + report: @report, + report_type: params[:report_type] + } + ) } + end + private include StringUtility diff --git a/app/datatables/report_datatable.rb b/app/datatables/report_datatable.rb index cfdf77775..298872520 100644 --- a/app/datatables/report_datatable.rb +++ b/app/datatables/report_datatable.rb @@ -66,19 +66,19 @@ class ReportDatatable < CustomDatatable end def docx_file(report) - docx = rails_blob_path(report.docx_file, disposition: 'attachment') if report.docx_file.attached? + docx = document_preview_report_path(report, report_type: :docx) if report.docx_file.attached? { processing: report.docx_file_processing, - file: docx, + preview_url: docx, error: false } end def pdf_file(report) - pdf = rails_blob_path(report.pdf_file, disposition: 'attachment') if report.pdf_file.attached? + pdf = document_preview_report_path(report, report_type: :pdf) if report.pdf_file.attached? { processing: report.pdf_file_processing, - file: pdf, + preview_url: pdf, error: false } end diff --git a/app/views/assets/_asset_inline.html.erb b/app/views/assets/_asset_inline.html.erb index 7aa63b9ad..91d281a3b 100644 --- a/app/views/assets/_asset_inline.html.erb +++ b/app/views/assets/_asset_inline.html.erb @@ -40,7 +40,7 @@ <% end %> <% elsif asset.pdf_previewable? %> - <%= render partial: 'shared/pdf_viewer.html.erb', locals: { asset: asset } %> + <%= render partial: 'shared/pdf_viewer.html.erb', locals: { asset: asset, report_document: false } %> <% elsif asset.previewable? %>
<%= image_tag asset.large_preview, diff --git a/app/views/reports/_content_document_preview.html.erb b/app/views/reports/_content_document_preview.html.erb new file mode 100644 index 000000000..fdfbb3aa4 --- /dev/null +++ b/app/views/reports/_content_document_preview.html.erb @@ -0,0 +1,23 @@ + + + diff --git a/app/views/reports/index.html.erb b/app/views/reports/index.html.erb index 4a4a54a3a..d1303cefc 100644 --- a/app/views/reports/index.html.erb +++ b/app/views/reports/index.html.erb @@ -62,3 +62,5 @@
<%= javascript_include_tag("reports/reports_datatable") %> +<%= javascript_pack_tag 'pdfjs/pdf_js' %> +<%= stylesheet_pack_tag 'pdfjs/pdf_js_styles' %> diff --git a/app/views/shared/_pdf_viewer.html.erb b/app/views/shared/_pdf_viewer.html.erb index b8faab300..9903652ac 100644 --- a/app/views/shared/_pdf_viewer.html.erb +++ b/app/views/shared/_pdf_viewer.html.erb @@ -1,7 +1,12 @@ <% - pdf_url = asset.pdf? ? asset_download_path(asset) : asset_pdf_preview_path(asset) - pdf_size = !asset.pdf? && asset.pdf_preview_ready? ? asset.file_pdf_preview&.blob&.byte_size : asset.file_size - blocked = pdf_size > Constants::PDF_PREVIEW_MAX_SIZE_MB.megabyte + unless report_document + pdf_url = asset.pdf? ? asset_download_path(asset) : asset_pdf_preview_path(asset) + pdf_size = !asset.pdf? && asset.pdf_preview_ready? ? asset.file_pdf_preview&.blob&.byte_size : asset.file_size + else + pdf_url = rails_blob_path(asset, disposition: 'attachment') + pdf_size = asset.blob.byte_size + end + blocked = pdf_size > Constants::PDF_PREVIEW_MAX_SIZE_MB.megabyte %>
diff --git a/app/views/shared/file_preview/_content.html.erb b/app/views/shared/file_preview/_content.html.erb index 9f15cb6b3..933e448ae 100644 --- a/app/views/shared/file_preview/_content.html.erb +++ b/app/views/shared/file_preview/_content.html.erb @@ -50,7 +50,7 @@ <% if wopi_enabled? && wopi_file?(asset) %> <% elsif asset.pdf_previewable? %> - <%= render partial: 'shared/pdf_viewer.html.erb', locals: { asset: asset } %> + <%= render partial: 'shared/pdf_viewer.html.erb', locals: { asset: asset, report_document: false } %> <% else %> <%= image_tag asset.large_preview, onerror: 'ActiveStoragePreviews.reCheckPreview(event)', diff --git a/config/routes.rb b/config/routes.rb index 31683c625..8cbbafc6a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -194,7 +194,12 @@ Rails.application.routes.draw do via: [:get, :post, :put, :patch] end - resources :reports, only: [:index, :new] + + resources :reports, only: [:index, :new] do + member do + get :document_preview + end + end get 'reports/datatable', to: 'reports#datatable' post 'reports/visible_projects', to: 'reports#visible_projects', defaults: { format: 'json' }