Fix folder creation for archived view [SCI-5383]

This commit is contained in:
Oleksii Kriuchykhin 2021-01-12 10:51:17 +01:00
parent 04f68facd3
commit 78ec862a2c
12 changed files with 39 additions and 44 deletions

View file

@ -454,7 +454,7 @@
loadCardsView();
Sidebar.reload({
sort: projectsCurrentSort,
view_mode: $('.projects-index').data('mode')
view_mode: $('.projects-index').data('view-mode')
});
}
@ -540,7 +540,7 @@
folders = selectedProjectFolders.map(e => ({ id: e, type: 'project_folder' }));
let movables = projects.concat(folders);
$.get(url, { items: items, sort: projectsCurrentSort, mode: $('.projects-index').data('mode') }, function(result) {
$.get(url, { items: items, sort: projectsCurrentSort, view_mode: $('.projects-index').data('view-mode') }, function(result) {
$(moveToModal).find('.modal-content').html(result.html);
$(moveToModal).modal('show');
initializeJSTree($(moveToModal).find('#moveToFolders'));
@ -584,7 +584,7 @@
type: 'GET',
dataType: 'json',
data: {
view_mode: $('.projects-index').data('mode'),
view_mode: $('.projects-index').data('view-mode'),
sort: projectsCurrentSort,
search: projectsViewSearch,
members: membersFilter,

View file

@ -2,6 +2,7 @@
class ProjectFoldersController < ApplicationController
include InputSanitizeHelper
include ProjectsHelper
include ProjectFoldersHelper
before_action :load_current_folder, only: %i(new)
@ -10,7 +11,8 @@ class ProjectFoldersController < ApplicationController
before_action :check_manage_permissions, only: %i(archive move_to)
def new
@project_folder = current_team.project_folders.new(parent_folder: @current_folder)
@project_folder =
current_team.project_folders.new(parent_folder: @current_folder, archived: projects_view_mode_archived?)
respond_to do |format|
format.json do
render json: {
@ -65,8 +67,7 @@ class ProjectFoldersController < ApplicationController
def move_to_modal
view_state = current_team.current_view_state(current_user)
@current_view_mode = params[:mode] || 'active'
@current_sort = view_state.state.dig('projects', @current_view_mode, 'sort') || 'atoz'
@current_sort = view_state.state.dig('projects', projects_view_mode, 'sort') || 'atoz'
render json: {
html: render_to_string(partial: 'projects/index/modals/move_to_modal_contents.html.erb',
@ -113,7 +114,7 @@ class ProjectFoldersController < ApplicationController
end
def project_folders_params
params.require(:project_folder).permit(:name, :parent_folder_id)
params.require(:project_folder).permit(:name, :parent_folder_id, :archived)
end
def move_params

View file

@ -21,8 +21,7 @@ class ProjectsController < ApplicationController
def index
if current_team
view_state = current_team.current_view_state(current_user)
@current_view_mode = params[:mode] || 'active'
@current_sort = view_state.state.dig('projects', @current_view_mode, 'sort') || 'atoz'
@current_sort = view_state.state.dig('projects', projects_view_mode, 'sort') || 'atoz'
end
end

View file

@ -14,11 +14,7 @@ class TeamsController < ApplicationController
render json: {
html: render_to_string(
partial: 'shared/sidebar/projects.html.erb',
locals: {
team: current_team,
sort: params[:sort],
view_mode: params[:view_mode]
}
locals: { team: current_team, sort: params[:sort] }
)
}
end

View file

@ -1,6 +1,14 @@
# frozen_string_literal: true
module ProjectsHelper
def projects_view_mode
params[:view_mode] == 'archived' ? 'archived' : 'active'
end
def projects_view_mode_archived?
params[:view_mode] == 'archived'
end
def user_project_role_to_s(user_project)
t('user_projects.enums.role.' + user_project.role)
end
@ -21,16 +29,14 @@ module ProjectsHelper
conns.to_s[1..-2]
end
def sidebar_folders_tree(team, user, sort, view_mode, folders_only: false)
records = if view_mode == 'archived'
items = ProjectFolder.archived.inner_folders(team)
items += team.projects.archived.visible_to(user, team) unless folders_only
items
else
items = ProjectFolder.active.inner_folders(team)
items += team.projects.active.visible_to(user, team) unless folders_only
items
end
def sidebar_folders_tree(team, user, sort, folders_only: false)
if projects_view_mode_archived?
records = ProjectFolder.archived.inner_folders(team)
records += team.projects.archived.visible_to(user, team) unless folders_only
else
records = ProjectFolder.active.inner_folders(team)
records += team.projects.active.visible_to(user, team) unless folders_only
end
sort ||= team.current_view_state(user).state.dig('projects', 'active', 'sort')
records = case sort
when 'new'

View file

@ -48,12 +48,9 @@ class ProjectsOverviewService
elsif @params[:folders_search] == 'true'
folders = ProjectFolder.inner_folders(@team, nil).or(ProjectFolder.where(id: nil))
fetch_project_records
elsif @view_mode == 'archived'
folders = ProjectFolder.where(id: nil)
fetch_project_records.where(team: @team)
else
folders = ProjectFolder.where(id: nil)
fetch_project_records.where(project_folder: nil, team: @team)
fetch_project_records.where(project_folder: @current_folder, team: @team)
end
project_records = sort_records(filter_project_records(project_records)).includes(:project_folder).to_a
@ -66,13 +63,8 @@ class ProjectsOverviewService
end
def project_and_folder_cards
cards =
if @view_mode == 'archived'
filter_project_records(fetch_project_records) + filter_project_folder_records(fetch_project_folder_records)
else
filter_project_records(fetch_project_records.where(project_folder: @current_folder)) +
filter_project_folder_records(fetch_project_folder_records.where(parent_folder: @current_folder))
end
cards = filter_project_records(fetch_project_records.where(project_folder: @current_folder)) +
filter_project_folder_records(fetch_project_folder_records.where(parent_folder: @current_folder))
mixed_sort_records(cards)
end

View file

@ -4,14 +4,14 @@
<% provide(:container_class, 'no-second-nav-container') %>
<%= content_for :sidebar do %>
<%= render partial: 'shared/sidebar/projects', locals: { team: current_team, sort: nil, view_mode: @current_view_mode } if current_team %>
<%= render partial: 'shared/sidebar/projects', locals: { team: current_team, sort: nil, view_mode: projects_view_mode } if current_team %>
<% end %>
<% content_for :breadcrumbs do %>
<%= render partial: 'projects/index/breadcrumbs' if @current_folder %>
<% end %>
<div class="content-pane flexible projects-index <%= @current_view_mode %>" data-mode="<%= @current_view_mode %>">
<div class="content-pane flexible projects-index <%= projects_view_mode %>" data-view-mode="<%= projects_view_mode %>">
<%= render partial: 'projects/index/header' %>
<span style="display: none;" data-hook="projects-index-html"></span>

View file

@ -13,7 +13,7 @@
<% end %>
<!-- new project folder button -->
<% if current_team && can_create_project_folders?(current_team) %>
<%= link_to new_project_folder_path(project_folder_id: @current_folder),
<%= link_to new_project_folder_path(project_folder_id: @current_folder, view_mode: projects_view_mode),
class: 'btn btn-light new-project-folder-btn',
data: { view_mode: 'active' },
remote: true do %>

View file

@ -20,7 +20,7 @@
<li class="jstree-open" id="root_folder" data-jstree='{"icon":"fas fa-folder root-folder"}'>
<a class="jstree-clicked" href="#">Projects</a>
<%= render partial: 'projects/index/modals/move_to_folders_tree.html.erb',
locals: { records: sidebar_folders_tree(current_team, current_user, @current_sort, @current_view_mode, folders_only: true) } %>
locals: { records: sidebar_folders_tree(current_team, current_user, projects_view_mode, folders_only: true) } %>
</li>
</ul>
</div>

View file

@ -12,6 +12,7 @@
<p><%= t('projects.index.modal_new_project_folder.description') %></p>
<div class="form-group sci-input-container">
<%= f.hidden_field :parent_folder_id %>
<%= f.hidden_field :archived %>
<%= f.text_field :name, label: t('projects.index.modal_new_project_folder.name'), placeholder: t('projects.index.modal_new_project_folder.name_placeholder') %>
</div>
</div>

View file

@ -1,7 +1,7 @@
<ul class="sidebar-branch">
<li class="sidebar-leaf">
<% if @project.archived? %>
<%= link_to t('sidebar.experiments.back_archived_projects'), projects_path(mode: :archived), class: 'sidebar-link back-button' %>
<%= link_to t('sidebar.experiments.back_archived_projects'), projects_path(view_mode: :archived), class: 'sidebar-link back-button' %>
<% elsif archived %>
<%= link_to t('sidebar.experiments.back_active_experiments'), project_url(@project), class: 'sidebar-link back-button' %>
<% else %>

View file

@ -1,15 +1,15 @@
<ul class="sidebar-branch">
<% if view_mode == 'archived' %>
<% if projects_view_mode_archived? %>
<li class="sidebar-leaf">
<%= link_to projects_path, class: "sidebar-link back-button" do %>
<%= t("projects.index.back_to_active_projects") %>
<% end %>
</li>
<% end %>
<%= render partial: 'shared/sidebar/projects_tree_branch.html.erb', locals: { records: sidebar_folders_tree(team, current_user, sort, view_mode) } %>
<% if view_mode != 'archived' %>
<%= render partial: 'shared/sidebar/projects_tree_branch.html.erb', locals: { records: sidebar_folders_tree(team, current_user, sort) } %>
<% if !projects_view_mode_archived? %>
<li class="sidebar-leaf">
<%= link_to projects_path(mode: :archived), class: "sidebar-link" do %>
<%= link_to projects_path(view_mode: :archived), class: "sidebar-link" do %>
<span class="fas fa-archive"></span>
<%= t("projects.index.navigation_archived_projects") %>
<% end %>