X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/e5337814593c504ef71e9f517dc1d99d41e19784..63b52a3a8d2fb55bd6aa0386e7d86851915be5af:/apps/workbench/app/controllers/projects_controller.rb diff --git a/apps/workbench/app/controllers/projects_controller.rb b/apps/workbench/app/controllers/projects_controller.rb index ea3103d9a8..1e06b0a9ea 100644 --- a/apps/workbench/app/controllers/projects_controller.rb +++ b/apps/workbench/app/controllers/projects_controller.rb @@ -77,32 +77,6 @@ class ProjectsController < ApplicationController end end - def move_items - target_uuid = params['target'] - uuids_to_add = session[:selected_move_items] - - uuids_to_add. - collect { |x| ArvadosBase::resource_class_for_uuid(x) }. - uniq. - each do |resource_class| - resource_class.filter([['uuid','in',uuids_to_add]]).each do |dst| - if resource_class == Collection - dst = Link.new(owner_uuid: target_uuid, - tail_uuid: target_uuid, - head_uuid: dst.uuid, - link_class: 'name', - name: target_uuid) - else - dst.owner_uuid = target_uuid - dst.tail_uuid = target_uuid if dst.class == Link - end - dst.save! - end - end - session[:selected_move_items] = nil - redirect_to @object - end - def destroy while (objects = Link.filter([['owner_uuid','=',@object.uuid], ['tail_uuid','=',@object.uuid]])).any? @@ -129,32 +103,41 @@ class ProjectsController < ApplicationController end def load_contents_objects kinds=[] - @limit = 5 kind_filters = @filters.select do |attr,op,val| op == 'is_a' and val.is_a? Array and val.count > 1 end - if /^created_at/ =~ @order[0] and kind_filters.count == 1 + if /^created_at\b/ =~ @order[0] and kind_filters.count == 1 # If filtering on multiple types and sorting by date: Get the # first page of each type, sort the entire set, truncate to one # page, and use the last item on this page as a filter for # retrieving the next page. Ideally the API would do this for # us, but it doesn't (yet). + nextpage_operator = /\bdesc$/i =~ @order[0] ? '<' : '>' @objects = [] + @name_link_for = {} kind_filters.each do |attr,op,val| (val.is_a?(Array) ? val : [val]).each do |type| - @objects += @object.contents(order: @order, - limit: @limit, - include_linked: true, - filters: (@filters - kind_filters + [['uuid', 'is_a', type]]), - offset: @offset) + objects = @object.contents(order: @order, + limit: @limit, + include_linked: true, + filters: (@filters - kind_filters + [['uuid', 'is_a', type]]), + offset: @offset) + objects.each do |object| + @name_link_for[object.andand.uuid] = objects.links_for(object, 'name').first + end + @objects += objects end end - @objects = @objects.to_a.sort_by(&:created_at).reverse[0..@limit-1] + @objects = @objects.to_a.sort_by(&:created_at) + @objects.reverse! if nextpage_operator == '<' + @objects = @objects[0..@limit-1] @next_page_filters = @filters.reject do |attr,op,val| - attr == 'created_at' and op == '<' + attr == 'created_at' and op == nextpage_operator end if @objects.any? - @next_page_filters += [['created_at', '<', @objects.last.created_at]] + @next_page_filters += [['created_at', + nextpage_operator, + @objects.last.created_at]] @next_page_href = url_for(partial: :contents_rows, filters: @next_page_filters.to_json) else @@ -168,6 +151,8 @@ class ProjectsController < ApplicationController offset: @offset) @next_page_href = next_page_href(partial: :contents_rows) end + + preload_links_for_objects(@objects.to_a) end def show @@ -224,6 +209,8 @@ class ProjectsController < ApplicationController name_links.each do |name_link| objects_and_names << [object, name_link] end + elsif @name_link_for.andand[object.uuid] + objects_and_names << [object, @name_link_for[object.uuid]] elsif object.respond_to? :name objects_and_names << [object, object] else @@ -233,6 +220,7 @@ class ProjectsController < ApplicationController head_uuid: object.uuid, link_class: "name", name: "")] + end end objects_and_names