From c1cac01b285f5bdb942f090b70cdbaf83e65069a Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Thu, 9 Apr 2020 15:14:55 +0200 Subject: [PATCH 1/5] Add repositories dropdown list --- .../javascripts/my_modules/repositories.js | 8 +++ .../my_modules/protocols/index.scss | 51 +++++++++++++++++++ .../stylesheets/my_modules/repositories.scss | 2 + .../my_module_repositories_controller.rb | 34 +++++++++---- app/views/my_modules/protocols.html.erb | 15 +++++- .../_repositories_dropdown_list.html.erb | 17 +++++++ config/routes.rb | 3 ++ 7 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 app/views/my_modules/repositories/_repositories_dropdown_list.html.erb diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js index 5d1ace471..7306cf47f 100644 --- a/app/assets/javascripts/my_modules/repositories.js +++ b/app/assets/javascripts/my_modules/repositories.js @@ -167,6 +167,13 @@ var MyModuleRepositories = (function() { renderFullViewTable(fullViewModal.find('.table')); }); e.stopPropagation(); + + function initRepositoriesDropdown() { + $('.repositories-assign-container').on('show.bs.dropdown', function() { + var dropdownContainer = $(this); + $.get(dropdownContainer.data('repositories-url'), function(result) { + dropdownContainer.find('.repositories-dropdown-menu').html(result.html); + }); }); } @@ -174,6 +181,7 @@ var MyModuleRepositories = (function() { init: () => { initSimpleTable(); initRepositoryFullView(); + initRepositoriesDropdown(); } }; }()); diff --git a/app/assets/stylesheets/my_modules/protocols/index.scss b/app/assets/stylesheets/my_modules/protocols/index.scss index 3d541443e..f8ceb5f06 100644 --- a/app/assets/stylesheets/my_modules/protocols/index.scss +++ b/app/assets/stylesheets/my_modules/protocols/index.scss @@ -37,6 +37,57 @@ margin-top: 11px; } } + + .task-section-header { + display: flex; + flex-wrap: wrap; + + .actions-block { + display: flex; + flex-grow: 1; + justify-content: flex-end; + + .repositories-assign-container { + flex-grow: 1; + max-width: 200px; + + .btn { + text-align: left; + + .caret { + margin: 8px 0; + } + } + + .repositories-dropdown-menu { + width: 100%; + + .repository { + @include font-button; + display: flex; + padding: 8px 16px; + + .assigned-items, + .shared-icon { + flex-shrink: 0; + + .fas { + padding-right: 5px; + } + } + + .assigned-items { + color: $color-alto; + } + + .name { + flex-grow: 1; + } + } + } + } + } + } } .complete-button-container { diff --git a/app/assets/stylesheets/my_modules/repositories.scss b/app/assets/stylesheets/my_modules/repositories.scss index e0ac69f13..7e0e9cdd4 100644 --- a/app/assets/stylesheets/my_modules/repositories.scss +++ b/app/assets/stylesheets/my_modules/repositories.scss @@ -97,6 +97,8 @@ } #assigned-items-container { + padding-top: 10px; + .assigned-repository { border: $border-default; border-radius: $border-radius-modal; diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb index 324f4d640..c35f9a171 100644 --- a/app/controllers/my_module_repositories_controller.rb +++ b/app/controllers/my_module_repositories_controller.rb @@ -1,8 +1,11 @@ # frozen_string_literal: true class MyModuleRepositoriesController < ApplicationController - before_action :load_vars, only: %i(show full_view_table) - before_action :check_view_permissions, only: %i(show full_view_table) + + before_action :load_my_module, only: %i(show full_view_table dropdown_list) + before_action :load_repository, only: %i(show full_view_table) + before_action :check_my_module_view_permissions, only: %i(show full_view_table dropdown_list) + before_action :check_repository_view_permissions, only: %i(show full_view_table) def show @draw = params[:draw].to_i @@ -30,17 +33,30 @@ class MyModuleRepositoriesController < ApplicationController render json: { html: render_to_string(partial: 'my_modules/repositories/full_view_table') } end + + def dropdown_list + @repositories = Repository.accessible_by_teams(current_team) + + render json: { html: render_to_string(partial: 'my_modules/repositories/repositories_dropdown_list') } + end + private - def load_vars + def load_my_module @my_module = MyModule.find(params[:my_module_id]) - @repository = Repository.find(params[:id]) - - render_404 unless @my_module && @repository + render_404 unless @my_module end - def check_view_permissions - render_403 unless can_read_experiment?(@my_module.experiment) && - can_read_repository?(@repository) + def load_repository + @repository = Repository.find(params[:id]) + ender_404 unless @repository + end + + def check_my_module_view_permissions + render_403 unless can_read_experiment?(@my_module.experiment) + end + + def check_repository_view_permissions + render_403 unless can_read_repository?(@repository) end end diff --git a/app/views/my_modules/protocols.html.erb b/app/views/my_modules/protocols.html.erb index 385618052..943cd49ae 100644 --- a/app/views/my_modules/protocols.html.erb +++ b/app/views/my_modules/protocols.html.erb @@ -41,7 +41,20 @@

<%= t('my_modules.assigned_items.title') %>

- + +
+ +
<%= render partial: "my_modules/repositories/repositories_list" %> diff --git a/app/views/my_modules/repositories/_repositories_dropdown_list.html.erb b/app/views/my_modules/repositories/_repositories_dropdown_list.html.erb new file mode 100644 index 000000000..5a67c7fd9 --- /dev/null +++ b/app/views/my_modules/repositories/_repositories_dropdown_list.html.erb @@ -0,0 +1,17 @@ +<% @repositories.each do |repository| %> + <% assigned_items_count = @my_module.repository_rows_count(repository) %> +
+ <% if repository.shared_with?(current_team) %> + + + + <% end %> + <%= escape_input(repository.name) %> + <% if assigned_items_count.positive? %> + + + <%= assigned_items_count %> + + <% end %> +
+<% end %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 111ec6473..257a5c4df 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -385,6 +385,9 @@ Rails.application.routes.draw do member do get :full_view_table end + collection do + get :dropdown_list + end end # resources :sample_my_modules, path: '/samples_index', only: [:index] From 15b291347b0955f955f53af1bb813bf446f7479b Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Thu, 9 Apr 2020 15:20:17 +0200 Subject: [PATCH 2/5] Fix I18n --- app/views/my_modules/protocols.html.erb | 2 +- config/locales/en.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/my_modules/protocols.html.erb b/app/views/my_modules/protocols.html.erb index 943cd49ae..48de35791 100644 --- a/app/views/my_modules/protocols.html.erb +++ b/app/views/my_modules/protocols.html.erb @@ -48,7 +48,7 @@ >
diff --git a/app/views/my_modules/repositories/_repositories_dropdown_list.html.erb b/app/views/my_modules/repositories/_repositories_dropdown_list.html.erb index 5a67c7fd9..452677d31 100644 --- a/app/views/my_modules/repositories/_repositories_dropdown_list.html.erb +++ b/app/views/my_modules/repositories/_repositories_dropdown_list.html.erb @@ -1,6 +1,6 @@ <% @repositories.each do |repository| %> <% assigned_items_count = @my_module.repository_rows_count(repository) %> -
+
  • <% if repository.shared_with?(current_team) %> @@ -13,5 +13,5 @@ <%= assigned_items_count %> <% end %> -
  • + <% end %> \ No newline at end of file From f00561cc227d50782f2c1bcf857ce488f816cb18 Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Tue, 14 Apr 2020 13:10:13 +0200 Subject: [PATCH 4/5] Fix markup --- app/controllers/my_module_repositories_controller.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb index c35f9a171..5bd5b1955 100644 --- a/app/controllers/my_module_repositories_controller.rb +++ b/app/controllers/my_module_repositories_controller.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class MyModuleRepositoriesController < ApplicationController - before_action :load_my_module, only: %i(show full_view_table dropdown_list) before_action :load_repository, only: %i(show full_view_table) before_action :check_my_module_view_permissions, only: %i(show full_view_table dropdown_list) @@ -33,7 +32,6 @@ class MyModuleRepositoriesController < ApplicationController render json: { html: render_to_string(partial: 'my_modules/repositories/full_view_table') } end - def dropdown_list @repositories = Repository.accessible_by_teams(current_team) From 0d1dd74f0223492c71c1ca319683cce8f989f807 Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Tue, 14 Apr 2020 18:17:54 +0200 Subject: [PATCH 5/5] Fix typo --- app/controllers/my_module_repositories_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb index 5bd5b1955..7b0b92890 100644 --- a/app/controllers/my_module_repositories_controller.rb +++ b/app/controllers/my_module_repositories_controller.rb @@ -41,13 +41,13 @@ class MyModuleRepositoriesController < ApplicationController private def load_my_module - @my_module = MyModule.find(params[:my_module_id]) + @my_module = MyModule.find_by(id: params[:my_module_id]) render_404 unless @my_module end def load_repository - @repository = Repository.find(params[:id]) - ender_404 unless @repository + @repository = Repository.find_by(id: params[:id]) + render_404 unless @repository end def check_my_module_view_permissions