mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-29 08:24:40 +08:00
Merge pull request #3057 from okriuchykhin/ok_SCI_5317
Add project permissions check to projects toolbar [SCI-5317]
This commit is contained in:
commit
962b3a532e
5 changed files with 40 additions and 14 deletions
|
@ -11,6 +11,7 @@
|
|||
dropdownSelector Sidebar Turbolinks */
|
||||
|
||||
(function(global) {
|
||||
const PERMISSIONS = ['editable', 'archivable', 'restorable'];
|
||||
var toolbarWrapper = '#toolbarWrapper';
|
||||
var editProjectModal = '#edit-modal';
|
||||
|
||||
|
@ -300,22 +301,35 @@
|
|||
});
|
||||
}
|
||||
|
||||
function checkActionPermission(permission) {
|
||||
return selectedProjects.every(function(projectId) {
|
||||
return $(`.project-card[data-id="${projectId}"]`).data(permission);
|
||||
});
|
||||
}
|
||||
|
||||
function updateProjectsToolbar() {
|
||||
let projectsToolbar = $('#projectsToolbar');
|
||||
|
||||
if (selectedProjects.length === 0 && selectedProjectFolders.length === 0) {
|
||||
projectsToolbar.find('.single-object-action, .multiple-object-action').addClass('hidden');
|
||||
} else if (selectedProjects.length + selectedProjectFolders.length === 1) {
|
||||
projectsToolbar.find('.single-object-action, .multiple-object-action').removeClass('hidden');
|
||||
if (selectedProjectFolders.length === 1) {
|
||||
projectsToolbar.find('.project-only-action').addClass('hidden');
|
||||
}
|
||||
} else {
|
||||
projectsToolbar.find('.single-object-action').addClass('hidden');
|
||||
projectsToolbar.find('.multiple-object-action').removeClass('hidden');
|
||||
if (selectedProjectFolders.length > 0) {
|
||||
projectsToolbar.find('.project-only-action').addClass('hidden');
|
||||
if (selectedProjects.length + selectedProjectFolders.length === 1) {
|
||||
projectsToolbar.find('.single-object-action, .multiple-object-action').removeClass('hidden');
|
||||
if (selectedProjectFolders.length === 1) {
|
||||
projectsToolbar.find('.project-only-action').addClass('hidden');
|
||||
}
|
||||
} else {
|
||||
projectsToolbar.find('.single-object-action').addClass('hidden');
|
||||
projectsToolbar.find('.multiple-object-action').removeClass('hidden');
|
||||
if (selectedProjectFolders.length > 0) {
|
||||
projectsToolbar.find('.project-only-action').addClass('hidden');
|
||||
}
|
||||
}
|
||||
PERMISSIONS.forEach((permission) => {
|
||||
if (!checkActionPermission(permission)) {
|
||||
projectsToolbar.find(`.btn[data-for="${permission}"]`).addClass('hidden');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -84,13 +84,14 @@ class ProjectsOverviewService
|
|||
@team.projects
|
||||
.visible_to(@user, @team)
|
||||
.left_outer_joins(:project_comments)
|
||||
.preload(:user_projects, team: :user_teams)
|
||||
.select('projects.*')
|
||||
.select('COUNT(DISTINCT comments.id) AS comment_count')
|
||||
.group('projects.id')
|
||||
end
|
||||
|
||||
def fetch_project_folder_records
|
||||
project_folders = @team.project_folders.left_outer_joins(:projects, :project_folders)
|
||||
project_folders = @team.project_folders.preload(team: :user_teams).left_outer_joins(:projects, :project_folders)
|
||||
project_folders.select('project_folders.*')
|
||||
.select('COUNT(DISTINCT projects.id) AS projects_count')
|
||||
.select('COUNT(DISTINCT project_folders.id) AS folders_count')
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
<div class="card folder-card" data-id="<%= folder.id %>" data-edit-url="<%= edit_project_folder_path(folder) %>">
|
||||
<div class="card folder-card"
|
||||
data-id="<%= folder.id %>"
|
||||
data-edit-url="<%= edit_project_folder_path(folder) %>"
|
||||
data-editable="<%= can_update_team?(current_team) %>"
|
||||
data-archivable="<%= folder.active? && can_update_team?(current_team) %>"
|
||||
data-restorable="<%= folder.archived? && can_update_team?(current_team) %>">
|
||||
<div class="checkbox-cell">
|
||||
<div class="sci-checkbox-container">
|
||||
<input value="1" type="checkbox" class="sci-checkbox folder-card-selector">
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
<div class="card project-card" data-id="<%= project.id %>" data-edit-url="<%= edit_project_path(project) %>">
|
||||
<div class="card project-card"
|
||||
data-id="<%= project.id %>"
|
||||
data-edit-url="<%= edit_project_path(project) %>"
|
||||
data-editable="<%= can_manage_project?(project) %>"
|
||||
data-archivable="<%= project.active? && can_archive_project?(project) %>"
|
||||
data-restorable="<%= project.archived? && can_restore_project?(project) %>">
|
||||
<div class="checkbox-cell">
|
||||
<div class="sci-checkbox-container">
|
||||
<input value="1" type="checkbox" class="sci-checkbox project-card-selector">
|
||||
|
|
|
@ -19,17 +19,18 @@
|
|||
<span class="hidden-xs"><%= t('projects.index.new_folder') %></span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<a href="#" class="btn btn-light edit-btn single-object-action hidden" data-view-mode="active">
|
||||
<a href="#" class="btn btn-secondary edit-btn single-object-action hidden" data-for="editable" data-view-mode="active">
|
||||
<span class="fas fa-folder" aria-hidden="true"></span>
|
||||
<span class="hidden-xs"><%= t('projects.index.edit_button') %></span>
|
||||
</a>
|
||||
<a href="#" class="btn btn-light move-projects-btn multiple-object-action hidden">
|
||||
<a href="#" class="btn btn-light move-projects-btn multiple-object-action hidden" data-for="editable">
|
||||
<span class="fas fa-arrow-right" aria-hidden="true"></span>
|
||||
<span class="hidden-xs"><%= t('projects.index.move_button') %></span>
|
||||
</a>
|
||||
<%= button_to archive_group_projects_path,
|
||||
class: 'btn btn-light archive-projects-btn multiple-object-action project-only-action hidden',
|
||||
form_class: 'archive-projects-form',
|
||||
data: { for: :archivable },
|
||||
remote: true,
|
||||
method: :post do %>
|
||||
<span class="fas fa-archive" aria-hidden="true"></span>
|
||||
|
|
Loading…
Add table
Reference in a new issue