diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js index 5d1ace471..aba7b9215 100644 --- a/app/assets/javascripts/my_modules/repositories.js +++ b/app/assets/javascripts/my_modules/repositories.js @@ -170,10 +170,20 @@ var MyModuleRepositories = (function() { }); } + 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); + }); + }); + } + return { 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 4a7080031..605f46f32 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/assets/stylesheets/repositories.scss b/app/assets/stylesheets/repositories.scss index b9c797564..b4a1b741d 100644 --- a/app/assets/stylesheets/repositories.scss +++ b/app/assets/stylesheets/repositories.scss @@ -187,29 +187,6 @@ } } -.repositories-dropdown-menu { - border: 1px solid $color-gainsboro; - border-top: 0; - box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .05); - height: auto; - max-height: 400px; - overflow-x: hidden; - text-transform: initial; - width: 300px; - - li:not(:first-child) { - border-top: 1px solid $color-gainsboro; - } - - .fas-custom { - float: right; - } - - a.muted { - opacity: .7; - } -} - .repository-share-status { display: contents !important; diff --git a/app/assets/stylesheets/themes/scinote.scss b/app/assets/stylesheets/themes/scinote.scss index a6cdea83a..8626e39c7 100644 --- a/app/assets/stylesheets/themes/scinote.scss +++ b/app/assets/stylesheets/themes/scinote.scss @@ -1899,10 +1899,6 @@ th.custom-field .modal-tooltiptext { background-color: $color-alto; } -.my_module-state-buttons { - padding-top: 6px; -} - .parse-records-table { max-height: 200px; } diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb index 324f4d640..7b0b92890 100644 --- a/app/controllers/my_module_repositories_controller.rb +++ b/app/controllers/my_module_repositories_controller.rb @@ -1,8 +1,10 @@ # 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 +32,29 @@ 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 - @my_module = MyModule.find(params[:my_module_id]) - @repository = Repository.find(params[:id]) - - render_404 unless @my_module && @repository + def load_my_module + @my_module = MyModule.find_by(id: params[:my_module_id]) + 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_by(id: params[:id]) + render_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..76ebaa98f 100644 --- a/app/views/my_modules/protocols.html.erb +++ b/app/views/my_modules/protocols.html.erb @@ -11,7 +11,7 @@

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

-
+
<%= render partial: "my_modules/state_buttons.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..452677d31 --- /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/locales/en.yml b/config/locales/en.yml index 40b5a99af..da2915641 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -604,6 +604,7 @@ en: empty_description_edit_label: "Click here to start writing notes" assigned_items: title: "Assigned items" + assign_from: "Assign from" protocol: title: "Protocol" buttons: diff --git a/config/routes.rb b/config/routes.rb index f674560ad..389b25809 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -388,6 +388,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]