From 41bb825f3384feed78ffb6827e1319bb6c7f74be Mon Sep 17 00:00:00 2001 From: miha Date: Tue, 23 Jun 2020 22:59:21 +0200 Subject: [PATCH] SCI-4780 Added archive and restore items to repository actions dropdown, minor refactoring of controller --- app/assets/javascripts/repositories/show.js | 14 ++++++++++++++ app/controllers/repositories_controller.rb | 16 +++++++++++----- .../archive_repository_base_service.rb | 6 +----- .../archive_repository_service.rb | 6 ------ .../restore_repository_service.rb | 6 ------ app/views/repositories/show.html.erb | 19 ++++++++++++++++--- config/locales/en.yml | 2 ++ config/routes.rb | 2 ++ 8 files changed, 46 insertions(+), 25 deletions(-) diff --git a/app/assets/javascripts/repositories/show.js b/app/assets/javascripts/repositories/show.js index 358a441dd..f02eade5d 100644 --- a/app/assets/javascripts/repositories/show.js +++ b/app/assets/javascripts/repositories/show.js @@ -173,7 +173,21 @@ }); $('.create-new-repository').initializeModal('#create-repo-modal'); + + function initArchivingActionsInDropdown(){ + $('.archive-repository-option').on('click', function(event){ + event.preventDefault(); + var link = event.target.getAttribute("href"); + $.ajax({ + type: 'GET', + url: link, + success: pageReload + }); + }); + } + initImportRecordsModal(); initTable(); initRepositoryViewSwitcher(); + initArchivingActionsInDropdown(); }(window)); diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 18fd71ad3..3efc894bd 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -128,7 +128,7 @@ class RepositoriesController < ApplicationController end def archive - service = Repositories::ArchiveRepositoryService.call(repositories: selected_repos_params, + service = Repositories::ArchiveRepositoryService.call(repositories: selected_repositories, user: current_user, team: current_team) if service.succeed? @@ -139,7 +139,7 @@ class RepositoriesController < ApplicationController end def restore - service = Repositories::RestoreRepositoryService.call(repositories: selected_repos_params, + service = Repositories::RestoreRepositoryService.call(repositories: selected_repositories, user: current_user, team: current_team) if service.succeed? @@ -430,9 +430,15 @@ class RepositoriesController < ApplicationController params.permit(:id, :file, :file_id, mappings: {}).to_h end - def selected_repos_params - process_ids = params[:selected_repos].map(&:to_i).uniq - Repository.where(id: process_ids, team_id: current_team).pluck(:id) + def selected_repositories + if params[:repository_id].present? + repository_ids = params[:repository_id] + elsif params[:selected_repos].any? + repository_ids = params[:selected_repos].map(&:to_i).uniq + else + render status: :not_found + end + current_team.repositories.where(id: repository_ids) end def repository_response(message) diff --git a/app/services/repositories/archive_repository_base_service.rb b/app/services/repositories/archive_repository_base_service.rb index 3695b3481..9d81a700f 100644 --- a/app/services/repositories/archive_repository_base_service.rb +++ b/app/services/repositories/archive_repository_base_service.rb @@ -9,7 +9,7 @@ module Repositories def initialize(user:, team:, repositories:) @user = user @team = team - @repositories = scoped_repositories(repositories) + @repositories = repositories @errors = {} end @@ -27,10 +27,6 @@ module Repositories private - def scoped_repositories(_ids) - raise NotImplementedError - end - def valid? unless @user @errors[:invalid_arguments] = diff --git a/app/services/repositories/archive_repository_service.rb b/app/services/repositories/archive_repository_service.rb index 453668892..689c7ce1a 100644 --- a/app/services/repositories/archive_repository_service.rb +++ b/app/services/repositories/archive_repository_service.rb @@ -24,11 +24,5 @@ module Repositories self end - - private - - def scoped_repositories(ids) - Repository.where(id: ids, team_id: @team) - end end end diff --git a/app/services/repositories/restore_repository_service.rb b/app/services/repositories/restore_repository_service.rb index 25b16cc95..94b1606d0 100644 --- a/app/services/repositories/restore_repository_service.rb +++ b/app/services/repositories/restore_repository_service.rb @@ -24,11 +24,5 @@ module Repositories self end - - private - - def scoped_repositories(ids) - Repository.where(id: ids, team_id: @team) - end end end diff --git a/app/views/repositories/show.html.erb b/app/views/repositories/show.html.erb index 439ded84e..eefc54b1f 100644 --- a/app/views/repositories/show.html.erb +++ b/app/views/repositories/show.html.erb @@ -92,14 +92,27 @@ remote: true %> <% end %> - <% if can_manage_repository?(@repository) %> - -
  • + <% if can_manage_repository?(@repository)%> +
  • +
  • + <%= link_to t('repositories.index.options_dropdown.archive'), + team_repository_archive_path(current_team, @repository), + class: "archive-repository-option", + remote: true %> +
  • +
  • + <%= link_to t('repositories.index.options_dropdown.restore'), + team_repository_restore_path(current_team, @repository), + class: "archive-repository-option", + remote: true %> +
  • +
  • <%= link_to t('repositories.index.options_dropdown.delete'), team_repository_destroy_modal_path(current_team, repository_id: @repository), class: "delete-repo-option", remote: true %>
  • + <% end %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index f81ba4b6c..4539f7c10 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1086,6 +1086,8 @@ en: rename: "Rename inventory" copy: "Copy inventory" delete: "Delete inventory" + archive: 'Archive inventory' + restore: 'Restore inventory' modal_delete: title_html: "Delete inventory %{name}" message_html: "Are you sure you want to delete inventory %{name}? This action is irreversible." diff --git a/config/routes.rb b/config/routes.rb index c9ca51fc2..a2c35c15d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -180,6 +180,8 @@ Rails.application.routes.draw do post 'copy', to: 'repositories#copy', defaults: { format: 'json' } get :share_modal + get :archive, to: 'repositories#archive' + get :restore, to: 'repositories#restore' resources :team_repositories, only: %i(destroy) do collection do