mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-11 23:54:43 +08:00
Add assigned task dropdown to repository
This commit is contained in:
parent
1cea6116b5
commit
0604815c00
8 changed files with 79 additions and 22 deletions
|
@ -154,3 +154,25 @@ $.fn.dataTable.render.RepositoryNumberValue = function(data) {
|
|||
${data.value}
|
||||
</span>`;
|
||||
};
|
||||
|
||||
$.fn.dataTable.render.AssignedTasksValue = function(data) {
|
||||
if (data.tasks > 0) {
|
||||
let tooltip = I18n.t('repositories.table.assigned_tooltip', {
|
||||
tasks: data.tasks,
|
||||
experiments: data.experiments,
|
||||
projects: data.projects
|
||||
})
|
||||
return `<div class="assign-counter-container dropdown" title="${tooltip}"
|
||||
data-task-list-url="${data.task_list_url}">
|
||||
<a href="#" class="assign-counter has-assigned"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">${data.tasks}</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<div class="tasks"></div>
|
||||
</div>
|
||||
</div>`
|
||||
|
||||
} else {
|
||||
return "<div class='assign-counter-container'><span class='assign-counter'>0</span></div>"
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
@ -442,7 +442,7 @@ var RepositoryDatatable = (function(global) {
|
|||
className: 'assigned-column',
|
||||
sWidth: '1%',
|
||||
render: function(data, type, row) {
|
||||
let content = data;
|
||||
let content = $.fn.dataTable.render.AssignedTasksValue(data);
|
||||
let icon;
|
||||
if (!row.recordEditable) {
|
||||
icon = `<i class="repository-row-lock-icon fas fa-lock" title="${I18n.t('repositories.table.locked_item')}"></i>`;
|
||||
|
@ -582,6 +582,14 @@ var RepositoryDatatable = (function(global) {
|
|||
$(TABLE_ID).find('tr[data-editable=false]').each(function(_, e) {
|
||||
rowsLocked.push(parseInt($(e).attr('id'), 10));
|
||||
});
|
||||
|
||||
$(TABLE_ID).on('show.bs.dropdown', '.assign-counter-container', function() {
|
||||
var tasksContainer = $(this).find('.tasks');
|
||||
var tasksUrl = $(this).data('task-list-url');
|
||||
$.get(tasksUrl, function(result) {
|
||||
tasksContainer.html(result.html);
|
||||
})
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -49,7 +49,16 @@
|
|||
width: calc(100% - 40px);
|
||||
|
||||
.assign-counter {
|
||||
margin-left: 5px;
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
padding-left: 5px;
|
||||
width: 100%;
|
||||
|
||||
&:hover,
|
||||
&:visited,
|
||||
&:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
&.has-assigned {
|
||||
color: $brand-primary;
|
||||
|
@ -59,6 +68,10 @@
|
|||
&:hover {
|
||||
background-color: $color-alto;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.circle-icon {
|
||||
|
|
|
@ -3,7 +3,7 @@ class RepositoryRowsController < ApplicationController
|
|||
include ActionView::Helpers::TextHelper
|
||||
include ApplicationHelper
|
||||
|
||||
before_action :load_info_modal_vars, only: :show
|
||||
before_action :load_info_modal_vars, only: %i(show assigned_task_list)
|
||||
before_action :load_vars, only: %i(edit update)
|
||||
before_action :load_repository,
|
||||
only: %i(create
|
||||
|
@ -180,6 +180,14 @@ class RepositoryRowsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def assigned_task_list
|
||||
my_modules = @repository_row.my_modules.joins(experiment: :project)
|
||||
.my_modules_list_partial
|
||||
render json: {
|
||||
html: render_to_string(partial: 'shared/my_modules_list_partial.html.erb', locals: { task_groups: my_modules })
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
include StringUtility
|
||||
|
|
|
@ -7,7 +7,7 @@ module RepositoryDatatableHelper
|
|||
repository_rows.map do |record|
|
||||
row = {
|
||||
'DT_RowId': record.id,
|
||||
'1': assigned_row(record),
|
||||
'1': assigned_row(record, repository),
|
||||
'2': record.id,
|
||||
'3': escape_input(record.name),
|
||||
'4': I18n.l(record.created_at, format: :full),
|
||||
|
@ -64,18 +64,13 @@ module RepositoryDatatableHelper
|
|||
end
|
||||
end
|
||||
|
||||
def assigned_row(record)
|
||||
if record.assigned_my_modules_count.positive?
|
||||
tooltip = t('repositories.table.assigned_tooltip',
|
||||
tasks: record.assigned_my_modules_count,
|
||||
def assigned_row(record, repository)
|
||||
{
|
||||
tasks: record.assigned_my_modules_count,
|
||||
experiments: record.assigned_experiments_count,
|
||||
projects: record.assigned_projects_count)
|
||||
|
||||
"<div class='assign-counter-container' title='#{tooltip}'>"\
|
||||
"<span class='assign-counter has-assigned'>#{record.assigned_my_modules_count}</span></div>"
|
||||
else
|
||||
"<div class='assign-counter-container'><span class='assign-counter'>0</span></div>"
|
||||
end
|
||||
projects: record.assigned_projects_count,
|
||||
task_list_url: assigned_task_list_repository_repository_row_path(repository, record)
|
||||
}
|
||||
end
|
||||
|
||||
def can_perform_repository_actions(repository)
|
||||
|
|
|
@ -526,14 +526,17 @@ class MyModule < ApplicationRecord
|
|||
def self.my_modules_list_partial
|
||||
ungrouped_tasks = joins(experiment: :project)
|
||||
.select('experiments.name as experiment_name,
|
||||
experiments.archived as experiment_archived,
|
||||
projects.name as project_name,
|
||||
my_modules.name as task_name,
|
||||
my_modules.id')
|
||||
projects.archived as projects_archived,
|
||||
my_modules.*')
|
||||
ungrouped_tasks.group_by { |i| [i[:project_name], i[:experiment_name]] }.map do |group, tasks|
|
||||
{
|
||||
project_name: group[0],
|
||||
projects_archived: tasks[0]&.projects_archived,
|
||||
experiment_name: group[1],
|
||||
tasks: tasks.map { |task| { id: task.id, task_name: task.task_name } }
|
||||
experiment_archived: tasks[0]&.experiment_archived,
|
||||
tasks: tasks
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,15 +2,19 @@
|
|||
<% task_groups.each do |task_group| %>
|
||||
<div class="task-group">
|
||||
<div class="header">
|
||||
<span class="project" title="<%= task_group[:project_name] %>"><%= task_group[:project_name] %></span>
|
||||
<span class="project" title="<%= task_group[:project_name] %>"><%= escape_input(task_group[:project_name]) %></span>
|
||||
<span class="slash">/</span>
|
||||
<span class="experiment" title="<%= task_group[:experiment_name] %>"><%= task_group[:experiment_name] %></span>
|
||||
<span class="experiment" title="<%= task_group[:experiment_name] %>"><%= escape_input(task_group[:experiment_name]) %></span>
|
||||
</div>
|
||||
<div class="tasks">
|
||||
<% task_group[:tasks].each do |task| %>
|
||||
<div class="task">
|
||||
<%= draw_custom_icon('task-icon') %>
|
||||
<%= link_to(task[:task_name], protocols_my_module_path(task[:id]), {class: "task-link", title: task[:task_name]}) %>
|
||||
<% if can_read_experiment?(current_user, task.experiment) %>
|
||||
<%= link_to(escape_input(task.name), protocols_my_module_path(task.id), {class: "task-link", title: task.name}) %>
|
||||
<% else %>
|
||||
<%= escape_input(task.name) %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
|
|
@ -630,7 +630,11 @@ Rails.application.routes.draw do
|
|||
defaults: { format: 'json' }
|
||||
|
||||
resources :repository_columns, only: %i(create edit update destroy)
|
||||
resources :repository_rows, only: %i(create edit update)
|
||||
resources :repository_rows, only: %i(create edit update) do
|
||||
member do
|
||||
get :assigned_task_list
|
||||
end
|
||||
end
|
||||
member do
|
||||
post 'parse_sheet', defaults: { format: 'json' }
|
||||
post 'import_records'
|
||||
|
|
Loading…
Add table
Reference in a new issue