mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-12-09 05:37:36 +08:00
Merge pull request #2681 from biosistemika/SCI-4780-replace-delete-button
SCI-4780 replace delete button with archive button
This commit is contained in:
commit
2a315ac106
10 changed files with 69 additions and 37 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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] =
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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."
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue