Merge pull request #2681 from biosistemika/SCI-4780-replace-delete-button

SCI-4780 replace delete button with archive button
This commit is contained in:
Alex Kriuchykhin 2020-06-24 13:16:11 +02:00 committed by GitHub
commit 2a315ac106
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 69 additions and 37 deletions

View file

@ -117,7 +117,7 @@
$('.repositories-index') $('.repositories-index')
.on('click', '#archiveRepoBtn', function() { .on('click', '#archiveRepoBtn', function() {
$.post($('#archiveRepoBtn').data('archive-repositories'), { $.post($('#archiveRepoBtn').data('archive-repositories'), {
selected_repos: CHECKBOX_SELECTOR.selectedRows repository_ids: CHECKBOX_SELECTOR.selectedRows
}, function(data) { }, function(data) {
HelperModule.flashAlertMsg(data.flash, 'success'); HelperModule.flashAlertMsg(data.flash, 'success');
initRepositoriesDataTable('#repositoriesList'); initRepositoriesDataTable('#repositoriesList');
@ -133,7 +133,7 @@
}) })
.on('click', '#restoreRepoBtn', function() { .on('click', '#restoreRepoBtn', function() {
$.post($('#restoreRepoBtn').data('restore-repositories'), { $.post($('#restoreRepoBtn').data('restore-repositories'), {
selected_repos: CHECKBOX_SELECTOR.selectedRows repository_ids: CHECKBOX_SELECTOR.selectedRows
}, function(data) { }, function(data) {
HelperModule.flashAlertMsg(data.flash, 'success'); HelperModule.flashAlertMsg(data.flash, 'success');
initRepositoriesDataTable('#repositoriesList', true); initRepositoriesDataTable('#repositoriesList', true);

View file

@ -1,7 +1,7 @@
//= require repositories/import/records_importer.js //= require repositories/import/records_importer.js
/* /*
global animateSpinner repositoryRecordsImporter I18n global pageReload animateSpinner repositoryRecordsImporter I18n
RepositoryDatatable PerfectScrollbar HelperModule RepositoryDatatable PerfectScrollbar HelperModule
*/ */
@ -150,13 +150,13 @@
function initRepositoryViewSwitcher() { function initRepositoryViewSwitcher() {
var viewSwitch = $('.view-switch'); var viewSwitch = $('.view-switch');
viewSwitch.on('click', '.view-switch-archived', function() { viewSwitch.on('click', '.view-switch-archived', function() {
$('.repository-show').removeClass('active').addClass('archived') $('.repository-show').removeClass('active').addClass('archived');
$('#manage-repository-column').removeClass('active').addClass('archived'); $('#manage-repository-column').removeClass('active').addClass('archived');
RepositoryDatatable.reload(); RepositoryDatatable.reload();
}); });
viewSwitch.on('click', '.view-switch-active', function() { viewSwitch.on('click', '.view-switch-active', function() {
$('.repository-show').removeClass('archived').addClass('active'); $('.repository-show').removeClass('archived').addClass('active');
$('#manage-repository-column').removeClass('archived').addClass('active');; $('#manage-repository-column').removeClass('archived').addClass('active');
RepositoryDatatable.reload(); RepositoryDatatable.reload();
}); });
} }
@ -173,7 +173,32 @@
}); });
$('.create-new-repository').initializeModal('#create-repo-modal'); $('.create-new-repository').initializeModal('#create-repo-modal');
function initArchivingActionsInDropdown() {
$('.archive-repository-option').on('click', function(event) {
event.preventDefault();
animateSpinner(null, true);
$.ajax({
type: 'POST',
url: $(this).attr('href'),
dataType: 'json',
data: { repository_ids: [$(this).data('repositoryId')] },
success: pageReload,
error: function(ev) {
if (ev.status === 403) {
HelperModule.flashAlertMsg(I18n.t('repositories.js.permission_error'), ev.responseJSON.style);
} else if (ev.status === 422) {
HelperModule.flashAlertMsg(ev.responseJSON.error, 'danger');
}
animateSpinner(null, false);
}
});
});
}
initImportRecordsModal(); initImportRecordsModal();
initTable(); initTable();
initRepositoryViewSwitcher(); initRepositoryViewSwitcher();
initArchivingActionsInDropdown();
}(window)); }(window));

View file

@ -11,6 +11,8 @@ class RepositoriesController < ApplicationController
before_action :switch_team_with_param, only: :show before_action :switch_team_with_param, only: :show
before_action :load_repository, except: %i(index create create_modal sidebar archive restore) before_action :load_repository, except: %i(index create create_modal sidebar archive restore)
before_action :load_repositories, only: %i(index show sidebar) before_action :load_repositories, only: %i(index show sidebar)
before_action :load_repositories_for_archiving, only: :archive
before_action :load_repositories_for_restoring, only: :restore
before_action :check_view_all_permissions, only: %i(index sidebar) before_action :check_view_all_permissions, only: %i(index sidebar)
before_action :check_view_permissions, except: %i(index create_modal create update destroy parse_sheet import_records sidebar archive restore) before_action :check_view_permissions, except: %i(index create_modal create update destroy parse_sheet import_records sidebar archive restore)
before_action :check_manage_permissions, only: %i(destroy destroy_modal rename_modal update) before_action :check_manage_permissions, only: %i(destroy destroy_modal rename_modal update)
@ -128,7 +130,7 @@ class RepositoriesController < ApplicationController
end end
def archive def archive
service = Repositories::ArchiveRepositoryService.call(repositories: selected_repos_params, service = Repositories::ArchiveRepositoryService.call(repositories: @repositories,
user: current_user, user: current_user,
team: current_team) team: current_team)
if service.succeed? if service.succeed?
@ -139,7 +141,7 @@ class RepositoriesController < ApplicationController
end end
def restore def restore
service = Repositories::RestoreRepositoryService.call(repositories: selected_repos_params, service = Repositories::RestoreRepositoryService.call(repositories: @repositories,
user: current_user, user: current_user,
team: current_team) team: current_team)
if service.succeed? if service.succeed?
@ -381,6 +383,14 @@ class RepositoriesController < ApplicationController
end end
end end
def load_repositories_for_archiving
@repositories = current_team.repositories.active.where(id: params[:repository_ids])
end
def load_repositories_for_restoring
@repositories = current_team.repositories.archived.where(id: params[:repository_ids])
end
def set_inline_name_editing def set_inline_name_editing
return unless can_manage_repository?(@repository) return unless can_manage_repository?(@repository)
@ -415,7 +425,9 @@ class RepositoriesController < ApplicationController
end end
def check_archive_permissions def check_archive_permissions
render_403 unless can_archive_repositories?(current_team) @repositories.each do |repository|
return render_403 unless can_archive_repository?(repository)
end
end end
def check_share_permissions def check_share_permissions
@ -430,11 +442,6 @@ class RepositoriesController < ApplicationController
params.permit(:id, :file, :file_id, mappings: {}).to_h params.permit(:id, :file, :file_id, mappings: {}).to_h
end 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)
end
def repository_response(message) def repository_response(message)
respond_to do |format| respond_to do |format|
format.html do format.html do

View file

@ -30,6 +30,11 @@ Canaid::Permissions.register_for(Repository) do
user.is_admin_of_team?(repository.team) unless repository.shared_with?(user.current_team) user.is_admin_of_team?(repository.team) unless repository.shared_with?(user.current_team)
end end
# repository: archive, restore
can :archive_repository do |user, repository|
!repository.shared_with?(user.current_team) && user.is_admin_of_team?(repository.team)
end
# repository: share # repository: share
can :share_repository do |user, repository| can :share_repository do |user, repository|
user.is_admin_of_team?(repository.team) unless repository.shared_with?(user.current_team) user.is_admin_of_team?(repository.team) unless repository.shared_with?(user.current_team)

View file

@ -53,11 +53,6 @@ Canaid::Permissions.register_for(Team) do
within_limits && user.is_admin_of_team?(team) within_limits && user.is_admin_of_team?(team)
end end
# repository: archive, restore
can :archive_repositories do |user, team|
user.is_admin_of_team?(team)
end
# this permission is scattered around the application # this permission is scattered around the application
# if you want to make changes here keep in mind to check/change the # if you want to make changes here keep in mind to check/change the
# SQL view that lists reports in index page: # SQL view that lists reports in index page:

View file

@ -9,7 +9,7 @@ module Repositories
def initialize(user:, team:, repositories:) def initialize(user:, team:, repositories:)
@user = user @user = user
@team = team @team = team
@repositories = scoped_repositories(repositories) @repositories = repositories
@errors = {} @errors = {}
end end
@ -27,10 +27,6 @@ module Repositories
private private
def scoped_repositories(_ids)
raise NotImplementedError
end
def valid? def valid?
unless @user unless @user
@errors[:invalid_arguments] = @errors[:invalid_arguments] =

View file

@ -18,11 +18,5 @@ module Repositories
self self
end end
private
def scoped_repositories(ids)
Repository.where(id: ids, team_id: @team)
end
end end
end end

View file

@ -18,11 +18,5 @@ module Repositories
self self
end end
private
def scoped_repositories(ids)
Repository.where(id: ids, team_id: @team)
end
end end
end end

View file

@ -92,9 +92,23 @@
remote: true %> remote: true %>
</li> </li>
<% end %> <% end %>
<% if can_archive_repository?(@repository) %>
<li data-view-mode="active" role="separator" class="divider"></li>
<li data-view-mode="active">
<%= link_to t('repositories.index.options_dropdown.archive'),
archive_team_repositories_path(current_team),
class: "archive-repository-option",
data: { repository_id: @repository.id } %>
</li>
<li data-view-mode="archived">
<%= link_to t('repositories.index.options_dropdown.restore'),
restore_team_repositories_path(current_team),
class: "archive-repository-option",
data: { repository_id: @repository.id } %>
</li>
<% end %>
<% if can_manage_repository?(@repository) %> <% if can_manage_repository?(@repository) %>
<li data-view-mode="active" data-hook="destroy-repository-option" role="separator" class="divider"></li> <li data-view-mode="archived" data-hook="destroy-repository-option">
<li data-view-mode="active" data-hook="destroy-repository-option">
<%= link_to t('repositories.index.options_dropdown.delete'), <%= link_to t('repositories.index.options_dropdown.delete'),
team_repository_destroy_modal_path(current_team, repository_id: @repository), team_repository_destroy_modal_path(current_team, repository_id: @repository),
class: "delete-repo-option", class: "delete-repo-option",

View file

@ -1086,6 +1086,8 @@ en:
rename: "Rename inventory" rename: "Rename inventory"
copy: "Copy inventory" copy: "Copy inventory"
delete: "Delete inventory" delete: "Delete inventory"
archive: 'Archive inventory'
restore: 'Restore inventory'
modal_delete: modal_delete:
title_html: "Delete inventory <em>%{name}</em>" title_html: "Delete inventory <em>%{name}</em>"
message_html: "Are you sure you want to delete inventory <em>%{name}</em>? This action is irreversible." message_html: "Are you sure you want to delete inventory <em>%{name}</em>? This action is irreversible."