diff --git a/app/assets/javascripts/hyrax/file_manager/sorting.es6 b/app/assets/javascripts/hyrax/file_manager/sorting.es6
index 55d8251c4d..19eae36fe3 100644
--- a/app/assets/javascripts/hyrax/file_manager/sorting.es6
+++ b/app/assets/javascripts/hyrax/file_manager/sorting.es6
@@ -4,6 +4,7 @@ export default class SortManager {
this.sorting_info = {}
this.initialize_sort()
this.element.data("current-order", this.order)
+ this.sort_property = this.element.data("sort-property")
this.save_manager = save_manager
this.initialize_alpha_sort_button()
}
@@ -38,9 +39,9 @@ export default class SortManager {
params() {
let params = {}
params[this.singular_class_name] = {
- "version": this.version,
- "ordered_member_ids": this.order
+ "version": this.version
}
+ params[this.singular_class_name][this.sort_property] = this.order
params["_method"] = "PATCH"
return params
}
diff --git a/app/controllers/concerns/hyrax/works_controller_behavior.rb b/app/controllers/concerns/hyrax/works_controller_behavior.rb
index 1b4b7b6b23..631e44501a 100644
--- a/app/controllers/concerns/hyrax/works_controller_behavior.rb
+++ b/app/controllers/concerns/hyrax/works_controller_behavior.rb
@@ -125,7 +125,7 @@ def destroy
end
def file_manager
- @form = Forms::FileManagerForm.new(curation_concern, current_ability)
+ @form = presenter
end
def inspect_work
diff --git a/app/forms/hyrax/forms/file_manager_form.rb b/app/forms/hyrax/forms/file_manager_form.rb
deleted file mode 100644
index ef1fd33118..0000000000
--- a/app/forms/hyrax/forms/file_manager_form.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-module Hyrax
- module Forms
- class FileManagerForm
- include HydraEditor::Form
- self.terms = []
- delegate :id, :thumbnail_id, :representative_id, :to_s, to: :model
- attr_reader :current_ability, :request
-
- ##
- # @param work [Object] a work with members
- # @param ability [::Ability] the current ability
- # @param member_factory [Class] the member_presenter factory object to use
- # when constructing presenters
- def initialize(work, ability, member_factory: MemberPresenterFactory)
- super(work)
- @current_ability = ability
- @request = nil
- @member_factory = member_factory
- end
-
- def version
- model.etag
- end
-
- delegate :member_presenters, to: :member_presenter_factory
-
- private
-
- def member_presenter_factory
- @member_factory.new(model, current_ability)
- end
- end
- end
-end
diff --git a/app/presenters/hyrax/work_show_presenter.rb b/app/presenters/hyrax/work_show_presenter.rb
index 8486859f10..3475bc63ac 100644
--- a/app/presenters/hyrax/work_show_presenter.rb
+++ b/app/presenters/hyrax/work_show_presenter.rb
@@ -252,6 +252,11 @@ def valid_child_concerns
Hyrax::ChildTypes.for(parent: solr_document.hydra_model).to_a
end
+ # @return [Boolean]
+ def valkyrie_presenter?
+ solr_document.hydra_model < Valkyrie::Resource
+ end
+
private
# list of item ids to display is based on ordered_ids
@@ -298,7 +303,7 @@ def presenter_factory_arguments
def member_presenter_factory
@member_presenter_factory ||=
- if solr_document.hydra_model < Valkyrie::Resource
+ if valkyrie_presenter?
PcdmMemberPresenterFactory.new(solr_document, current_ability)
else
self.class
diff --git a/app/views/hyrax/base/_file_manager_members.html.erb b/app/views/hyrax/base/_file_manager_members.html.erb
index 804c0f2b9d..43459f0f15 100644
--- a/app/views/hyrax/base/_file_manager_members.html.erb
+++ b/app/views/hyrax/base/_file_manager_members.html.erb
@@ -2,10 +2,10 @@
id: "sortable",
class: "list-unstyled grid d-flex flex-wrap clearfix",
data: {
- id: @form.id,
+ id: @form.id.to_s,
"class-name" => @form.model_name.plural,
"singular-class-name" => @form.model_name.singular,
- version: @form.version
+ "sort_property" => @form.valkyrie_presenter? ? "member_ids" : "ordered_member_ids"
} do %>
<% @form.member_presenters.each do |member| %>
<%= render "file_manager_member", node: member %>
diff --git a/app/views/hyrax/base/file_manager.html.erb b/app/views/hyrax/base/file_manager.html.erb
index fe6b15af8a..64858709db 100644
--- a/app/views/hyrax/base/file_manager.html.erb
+++ b/app/views/hyrax/base/file_manager.html.erb
@@ -5,7 +5,7 @@
-<% if !@form.member_presenters.empty? %>
+<% if !@form.member_presenters.blank? %>
<%= t('.toolbar') %>
diff --git a/app/views/hyrax/base/show.json.jbuilder b/app/views/hyrax/base/show.json.jbuilder
index 04301e3a2d..1cd461209a 100644
--- a/app/views/hyrax/base/show.json.jbuilder
+++ b/app/views/hyrax/base/show.json.jbuilder
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-@curation_concern = Wings::ActiveFedoraConverter.convert(resource: @curation_concern) if
- @curation_concern.is_a? Hyrax::Resource
+@curation_concern = ::Wings::ActiveFedoraConverter.convert(resource: @curation_concern) if
+ @curation_concern.is_a?(Hyrax::Resource) && Object.const_defined?("Wings")
json.extract! @curation_concern, *[:id] + @curation_concern.class.fields.reject { |f| [:has_model].include? f }
json.version @curation_concern.try(:etag)
diff --git a/spec/features/file_manager_spec.rb b/spec/features/file_manager_spec.rb
new file mode 100644
index 0000000000..a001a1e3ee
--- /dev/null
+++ b/spec/features/file_manager_spec.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+RSpec.describe "file manager" do
+ let(:user) { FactoryBot.create(:admin) }
+ let!(:work) do
+ FactoryBot.valkyrie_create(:monograph, :with_member_file_sets, :public,
+ title: ["Toothbrush"])
+ end
+ let(:file_set) do
+ Hyrax.query_service.find_members(resource: work).first
+ end
+ before do
+ sign_in user
+ visit "/concern/monographs/#{work.id}/file_manager"
+ end
+
+ it "looks like a file manager" do
+ # has a bulk edit header
+ expect(page.html).to include "#{I18n.t('hyrax.file_manager.link_text')}
"
+
+ # displays each file set's label
+ expect(page).to have_selector "input[name='file_set[title][]'][type='text'][value='#{file_set.title.first}']"
+
+ # has a link to edit each file set
+ expect(page).to have_selector("a[href='/concern/parent/#{work.id}/file_sets/#{file_set.id}']")
+
+ # has a link back to parent
+ expect(page).to have_link work.title.first, href: hyrax_monograph_path(id: work.id, locale: :en)
+
+ # renders a form for each member
+ expect(page).to have_selector("#sortable form", count: work.member_ids.length)
+
+ # Defines the order property
+ expect(page).to have_selector("#sortable[data-sort-property='member_ids']")
+
+ # renders an input for titles
+ expect(page).to have_selector("input[name='file_set[title][]']")
+
+ # renders a resource form for the entire resource
+ expect(page).to have_selector("form#resource-form")
+
+ # renders a hidden field for the resource form thumbnail id
+ expect(page).to have_selector("#resource-form input[type=hidden][name='monograph[thumbnail_id]']", visible: false)
+
+ # renders a thumbnail field for each member
+ expect(page).to have_selector("input[name='thumbnail_id']", count: work.member_ids.length)
+
+ # renders a hidden field for the resource form representative id
+ expect(page).to have_selector("#resource-form input[type=hidden][name='monograph[representative_id]']", visible: false)
+
+ # renders a representative field for each member
+ expect(page).to have_selector("input[name='representative_id']", count: work.member_ids.length)
+ end
+end
diff --git a/spec/forms/hyrax/forms/file_manager_form_spec.rb b/spec/forms/hyrax/forms/file_manager_form_spec.rb
deleted file mode 100644
index 1beba864bd..0000000000
--- a/spec/forms/hyrax/forms/file_manager_form_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-RSpec.describe Hyrax::Forms::FileManagerForm do
- subject(:form) { described_class.new(work, ability) }
- let(:work) { FactoryBot.build(:generic_work) }
- let(:ability) { :FAKE_ABILITY }
-
- describe "#member_presenters" do
- context 'with a custom member presenter factory' do
- subject(:form) { described_class.new(work, ability, member_factory: member_factory) }
-
- let(:member_factory) do
- Class.new(Hyrax::MemberPresenterFactory) do
- def member_presenters
- [:some, :member, :presenters]
- end
- end
- end
-
- it "is delegated to the MemberPresenterFactory" do
- expect(form.member_presenters).to eq [:some, :member, :presenters]
- end
- end
-
- context 'with an AF::Base work' do
- let(:work) { FactoryBot.create(:work_with_files) }
-
- it 'gives file set presenters' do
- expect(form.member_presenters)
- .to contain_exactly(an_instance_of(Hyrax::FileSetPresenter),
- an_instance_of(Hyrax::FileSetPresenter))
- end
- end
- end
-end
diff --git a/spec/views/hyrax/base/file_manager.html.erb_spec.rb b/spec/views/hyrax/base/file_manager.html.erb_spec.rb
deleted file mode 100644
index 8de5e32d87..0000000000
--- a/spec/views/hyrax/base/file_manager.html.erb_spec.rb
+++ /dev/null
@@ -1,88 +0,0 @@
-# frozen_string_literal: true
-RSpec.describe "hyrax/base/file_manager.html.erb" do
- let(:members) { [file_set, member] }
- let(:file_set) { Hyrax::FileSetPresenter.new(solr_doc, nil) }
- let(:member) { Hyrax::WorkShowPresenter.new(solr_doc_work, nil) }
- let(:solr_doc) do
- SolrDocument.new(
- id: "test",
- title_tesim: ["Test"],
- thumbnail_path_ss: "/test/image/path.jpg",
- label_tesim: ["file_name.tif"],
- has_model_ssim: 'FileSet'
- )
- end
- let(:solr_doc_work) do
- SolrDocument.new(
- id: "work",
- has_model_ssim: 'GenericWork',
- title_tesim: ["Work"],
- thumbnail_path_ss: "/test/image/path.jpg",
- label_tesim: ["work"]
- )
- end
-
- let(:parent) { stub_model(GenericWork, title: ["Test title"]) }
-
- let(:form) do
- Hyrax::Forms::FileManagerForm.new(parent, nil)
- end
-
- before do
- allow(parent).to receive(:etag).and_return("123456")
- allow(parent).to receive(:persisted?).and_return(true)
- allow(parent).to receive(:id).and_return('resource')
-
- allow(form).to receive(:member_presenters).and_return([file_set, member])
- assign(:form, form)
- # Blacklight nonsense
- allow(view).to receive(:dom_class) { '' }
- allow(view).to receive(:session_tracking_params).and_return({})
- allow(view).to receive(:curation_concern).and_return(parent)
- allow(view).to receive(:contextual_path).with(anything, anything) do |x, y|
- Hyrax::ContextualPath.new(x, y).show
- end
- render
- end
-
- it "draws the page" do
- # has a bulk edit header
- expect(rendered).to include "#{I18n.t('hyrax.file_manager.link_text')}
"
-
- # displays each file set's label
- expect(rendered).to have_selector "input[name='file_set[title][]'][type='text'][value='#{file_set}']"
-
- # displays each file set's file name
- expect(rendered).to have_content "file_name.tif"
-
- # has a link to edit each file set
- expect(rendered).to have_selector('a[href="/concern/file_sets/test"]')
-
- # has a link back to parent
- expect(rendered).to have_link "Test title", href: hyrax_generic_work_path(id: "resource")
-
- # has thumbnails for each resource
- expect(rendered).to have_selector("img[src='/test/image/path.jpg']")
-
- # renders a form for each member
- expect(rendered).to have_selector("#sortable form", count: members.length)
-
- # renders an input for titles
- expect(rendered).to have_selector("input[name='file_set[title][]']")
-
- # renders a resource form for the entire resource
- expect(rendered).to have_selector("form#resource-form")
-
- # renders a hidden field for the resource form thumbnail id
- expect(rendered).to have_selector("#resource-form input[type=hidden][name='generic_work[thumbnail_id]']", visible: false)
-
- # renders a thumbnail field for each member
- expect(rendered).to have_selector("input[name='thumbnail_id']", count: members.length)
-
- # renders a hidden field for the resource form representative id
- expect(rendered).to have_selector("#resource-form input[type=hidden][name='generic_work[representative_id]']", visible: false)
-
- # renders a representative field for each member
- expect(rendered).to have_selector("input[name='representative_id']", count: members.length)
- end
-end