diff --git a/app/assets/javascripts/projects/index.js b/app/assets/javascripts/projects/index.js index 1083de879..0cdf87d7a 100644 --- a/app/assets/javascripts/projects/index.js +++ b/app/assets/javascripts/projects/index.js @@ -42,6 +42,37 @@ var selectedProjects = []; var selectedProjectFolders = []; + // Init new project folder modal function + function initNewProjectFolderModal() { + var newProjectFolderModal = '#new-project-folder-modal' + // Modal's submit handler function + function newProjectFolderModalResponse() { + $(newProjectFolderModal).find('form') + .on('ajax:success', function(ev, data) { + refreshCurrentView(); + $(newProjectFolderModal).modal('hide'); + HelperModule.flashAlertMsg(data.message, 'success'); + }) + .on('ajax:error', function(e, data) { + $(this).renderFormErrors('project_folder', data.responseJSON); + }); + } + + $('.new-project-folder-btn') + .on('ajax:success', function(e, data) { + // Add and show modal + $('body').append($.parseHTML(data.html)); + $(newProjectFolderModal).modal('show'); + $(newProjectFolderModal).find("input[type='text']").focus(); + newProjectFolderModalResponse(); + + // Remove modal when it gets closed + $(newProjectFolderModal).on('hidden.bs.modal', function() { + $(newProjectFolderModal).remove(); + }); + }); + } + /** * Initialize the JS for new project modal to work. */ @@ -402,12 +433,12 @@ exportProjectsSubmit = $('#export-projects-modal-submit'); updateSelectedCards(); + initNewProjectFolderModal(); initNewProjectModal(); initEditProjectModal(); initManageUsersModal(); initExportProjectsModal(); initExportProjects(); - $('.new-project-folder-btn').initSubmitModal('#new-project-folder-modal', 'project_folder'); initEditProjectButton($('.panel-project')); initArchiveRestoreButton($('.panel-project')); diff --git a/app/controllers/project_folders_controller.rb b/app/controllers/project_folders_controller.rb index 166009121..74a7daf5b 100644 --- a/app/controllers/project_folders_controller.rb +++ b/app/controllers/project_folders_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class ProjectFoldersController < ApplicationController + include InputSanitizeHelper + before_action :load_current_folder, only: %i(new) before_action :check_create_permissions, only: %i(new create) before_action :check_manage_permissions, only: %i(move_to) @@ -19,19 +21,17 @@ class ProjectFoldersController < ApplicationController end def create - @project_folder = ProjectFolder.new(team: current_team) - @project_folder.assign_attributes(project_folders_params) + project_folder = current_team.project_folders.new(project_folders_params) respond_to do |format| format.json do - if @project_folder.save + if project_folder.save # log_activity() - flash[:success] = t('projects.index.modal_new_project_folder.success_flash', - name: @project_folder.name) - render json: { url: project_folder_path(@project_folder) }, - status: :ok + message = t('projects.index.modal_new_project_folder.success_flash', + name: escape_input(project_folder.name)) + render json: { message: message } else - render json: @project_folder.errors, + render json: project_folder.errors, status: :unprocessable_entity end end @@ -58,7 +58,7 @@ class ProjectFoldersController < ApplicationController private def load_current_folder - if current_team && params[:project_folder_id].present? + if params[:project_folder_id].present? @current_folder = current_team.project_folders.find_by(id: params[:project_folder_id]) end end diff --git a/app/views/projects/index/modals/_new_project_folder.html.erb b/app/views/projects/index/modals/_new_project_folder.html.erb index 92b0bdcca..549274b10 100644 --- a/app/views/projects/index/modals/_new_project_folder.html.erb +++ b/app/views/projects/index/modals/_new_project_folder.html.erb @@ -1,5 +1,5 @@