From 7c4bfad09ba5a31f10e3ae5823c069e7fc100ae7 Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Thu, 16 Jul 2020 15:42:52 +0200 Subject: [PATCH] Add pagination to results page --- .../shared/kaminari_pagination.scss | 71 +++++++++++++++++++ .../shared_styles/constants/fonts.scss | 2 + app/controllers/my_modules_controller.rb | 2 + app/controllers/result_assets_controller.rb | 28 ++------ app/controllers/result_tables_controller.rb | 28 ++------ app/controllers/result_texts_controller.rb | 37 +++------- app/helpers/my_modules_helper.rb | 5 +- app/views/my_modules/results.html.erb | 5 +- config/locales/en.yml | 8 +++ 9 files changed, 112 insertions(+), 74 deletions(-) create mode 100644 app/assets/stylesheets/shared/kaminari_pagination.scss diff --git a/app/assets/stylesheets/shared/kaminari_pagination.scss b/app/assets/stylesheets/shared/kaminari_pagination.scss new file mode 100644 index 000000000..1a0dc3238 --- /dev/null +++ b/app/assets/stylesheets/shared/kaminari_pagination.scss @@ -0,0 +1,71 @@ +.kaminari-pagination { + align-items: center; + display: flex; + justify-content: center; + + .page a, + .page.current, + .page.gap { + align-items: center; + border: $border-transparent; + border-radius: $border-radius-default; + color: inherit; + display: inline-flex; + height: 3em; + justify-content: center; + margin: 0 .25em; + outline: 0; + text-decoration: none; + width: 3em; + + &.current { + border: $border-primary; + } + } + + .prev a { + &::before { + @include font-awesome; + content: $font-fas-angle-left; + } + } + + .first a { + &::before { + @include font-awesome; + content: $font-fas-angle-double-left; + } + } + + .next a { + &::after { + @include font-awesome; + content: $font-fas-angle-right; + } + } + + .last a { + &::after { + @include font-awesome; + content: $font-fas-angle-double-right; + } + } + + .first, + .prev, + .next, + .last { + a { + color: inherit; + line-height: 3em; + margin: 0 .25em; + padding: .5em; + text-decoration: none; + + &:before, + &:after { + margin: 0 .25em; + } + } + } +} diff --git a/app/assets/stylesheets/shared_styles/constants/fonts.scss b/app/assets/stylesheets/shared_styles/constants/fonts.scss index 5bced3ebc..1550a36e5 100644 --- a/app/assets/stylesheets/shared_styles/constants/fonts.scss +++ b/app/assets/stylesheets/shared_styles/constants/fonts.scss @@ -19,6 +19,8 @@ $font-fas-exclamation-triangle: "\f071"; $font-fas-lock: "\f023"; $font-fas-angle-left: "\f104"; $font-fas-angle-right: "\f105"; +$font-fas-angle-double-left: "\f100"; +$font-fas-angle-double-right: "\f101"; $font-fas-exclamation-circle: "\f06a"; @mixin font-h1 { diff --git a/app/controllers/my_modules_controller.rb b/app/controllers/my_modules_controller.rb index 1a7951768..f388326b0 100644 --- a/app/controllers/my_modules_controller.rb +++ b/app/controllers/my_modules_controller.rb @@ -6,6 +6,7 @@ class MyModulesController < ApplicationController include Rails.application.routes.url_helpers include ActionView::Helpers::UrlHelper include ApplicationHelper + include MyModulesHelper before_action :load_vars before_action :load_projects_tree, only: %i(protocols results activities archive) @@ -245,6 +246,7 @@ class MyModulesController < ApplicationController .experiment .project .team) + @results = ordered_result_of(@my_module, params[:page]) end def archive diff --git a/app/controllers/result_assets_controller.rb b/app/controllers/result_assets_controller.rb index 9bb7d10fc..1050ab83f 100644 --- a/app/controllers/result_assets_controller.rb +++ b/app/controllers/result_assets_controller.rb @@ -26,27 +26,13 @@ class ResultAssetsController < ApplicationController def create obj = create_multiple_results - respond_to do |format| - if obj.fetch(:status) - format.html do - flash[:success] = t('result_assets.create.success_flash', - module: @my_module.name) - redirect_to results_my_module_path(@my_module) - end - format.json do - render json: { - html: render_to_string( - partial: 'my_modules/results.html.erb', - locals: { results: obj.fetch(:results) } - ) - }, status: :ok - end - else - flash[:error] = t('result_assets.error_flash') - format.json do - render json: {}, status: :bad_request - end - end + if obj.fetch(:status) + flash[:success] = t('result_assets.create.success_flash', + module: @my_module.name) + redirect_to results_my_module_path(@my_module) + else + flash[:error] = t('result_assets.error_flash') + render json: {}, status: :bad_request end end diff --git a/app/controllers/result_tables_controller.rb b/app/controllers/result_tables_controller.rb index f471566bf..19d3bf1b7 100644 --- a/app/controllers/result_tables_controller.rb +++ b/app/controllers/result_tables_controller.rb @@ -41,28 +41,12 @@ class ResultTablesController < ApplicationController ) @result.last_modified_by = current_user - respond_to do |format| - if (@result.save and @table.save) then - log_activity(:add_result) - - format.html { - flash[:success] = t( - "result_tables.create.success_flash", - module: @my_module.name) - redirect_to results_my_module_path(@my_module) - } - format.json { - render json: { - html: render_to_string({ - partial: "my_modules/result.html.erb", locals: {result: @result} - }) - }, status: :ok - } - else - format.json { - render json: @result.errors, status: :bad_request - } - end + if @result.save && @table.save + log_activity(:add_result) + flash[:success] = t('result_tables.create.success_flash', module: @my_module.name) + redirect_to results_my_module_path(@my_module) + else + render json: @result.errors, status: :bad_request end end diff --git a/app/controllers/result_texts_controller.rb b/app/controllers/result_texts_controller.rb index 7d4f05e5f..21d162042 100644 --- a/app/controllers/result_texts_controller.rb +++ b/app/controllers/result_texts_controller.rb @@ -39,35 +39,16 @@ class ResultTextsController < ApplicationController ) @result.last_modified_by = current_user - respond_to do |format| - if @result.save && @result_text.save - # link tiny_mce_assets to the text result - TinyMceAsset.update_images(@result_text, params[:tiny_mce_images], current_user) + if @result.save && @result_text.save + # link tiny_mce_assets to the text result + TinyMceAsset.update_images(@result_text, params[:tiny_mce_images], current_user) - result_annotation_notification - log_activity(:add_result) - - format.html { - flash[:success] = t( - "result_texts.create.success_flash", - module: @my_module.name) - redirect_to results_my_module_path(@my_module) - } - format.json { - render json: { - html: render_to_string({ - partial: "my_modules/result.html.erb", - locals: { - result: @result - } - }) - }, status: :ok - } - else - format.json { - render json: @result.errors, status: :bad_request - } - end + result_annotation_notification + log_activity(:add_result) + flash[:success] = t('result_texts.create.success_flash', module: @my_module.name) + redirect_to results_my_module_path(@my_module) + else + render json: @result.errors, status: :bad_request end end diff --git a/app/helpers/my_modules_helper.rb b/app/helpers/my_modules_helper.rb index b04d2cb31..4c83473c9 100644 --- a/app/helpers/my_modules_helper.rb +++ b/app/helpers/my_modules_helper.rb @@ -33,8 +33,9 @@ module MyModulesHelper my_module.samples.count end - def ordered_result_of(my_module) - my_module.results.where(archived: false).order(created_at: :desc) + def ordered_result_of(my_module, page) + page ||= 1 + my_module.results.where(archived: false).page(page).per(10).order(created_at: :desc) end def get_task_alert_color(my_module) diff --git a/app/views/my_modules/results.html.erb b/app/views/my_modules/results.html.erb index 74405527d..e7e078555 100644 --- a/app/views/my_modules/results.html.erb +++ b/app/views/my_modules/results.html.erb @@ -52,10 +52,13 @@
- <% ordered_result_of(@my_module).each do |result| %> + <% @results.each do |result| %> <%= render partial: "result", locals: { result: result } %> <% end %>
+
+ <%= paginate @results, outer_window: 1, window: 1 %> +
<%= javascript_include_tag "handsontable.full.min" %> diff --git a/config/locales/en.yml b/config/locales/en.yml index d2589a038..c86b44791 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2423,3 +2423,11 @@ en: structure_placeholder: "Click here to enter Chemical Drawing name" modal_name_title: "Chemical Drawing name:" checmical_drawing: "Chemical drawings" + + views: + pagination: + first: "First" + last: "Last" + previous: "Previous" + next: "Next" + truncate: "…"