From 675b4d41a4a4c52398c439190cdfbaf45ce2edd6 Mon Sep 17 00:00:00 2001 From: Trey Pendragon Date: Tue, 19 Sep 2017 15:57:00 -0700 Subject: [PATCH] Add Save and Create Another. --- app/assets/javascripts/form/save_work_control.es6 | 7 +++++++ app/controllers/ephemera_folders_controller.rb | 11 +++++++++++ .../controllers/ephemera_folders_controller_spec.rb | 13 +++++++++++++ .../app/views/valhalla/base/_form_progress.html.erb | 3 +++ 4 files changed, 34 insertions(+) diff --git a/app/assets/javascripts/form/save_work_control.es6 b/app/assets/javascripts/form/save_work_control.es6 index e2253b4c48..c38af8c227 100644 --- a/app/assets/javascripts/form/save_work_control.es6 +++ b/app/assets/javascripts/form/save_work_control.es6 @@ -45,6 +45,13 @@ export default class SaveWorkControl { * */ preventSubmitIfAlreadyInProgress() { + let master = this + this.saveButton.on('click', function(evt) { + if (master.isValid()) { + let input = $("").attr("name", $(this)[0].name).attr("value", $(this)[0].value); + $(this).closest('form').append(input); + } + }) this.form.on('submit', (evt) => { if (this.isValid()) this.saveButton.prop("disabled", true); diff --git a/app/controllers/ephemera_folders_controller.rb b/app/controllers/ephemera_folders_controller.rb index 27f5c63dde..d72a5798e3 100644 --- a/app/controllers/ephemera_folders_controller.rb +++ b/app/controllers/ephemera_folders_controller.rb @@ -10,10 +10,21 @@ class EphemeraFoldersController < ApplicationController ) before_action :load_collections, only: [:new, :edit] + def after_create_success(obj, _change_set) + if params[:commit] == "Save and Create Another" + redirect_to parent_new_ephemera_box_path(parent_id: resource_params[:append_id], create_another: obj.id.to_s) + else + super + end + end + def new_resource if params[:template_id] template = find_resource(params[:template_id]) template.nested_properties.first + elsif params[:create_another] + resource = find_resource(params[:create_another]) + resource.new(id: nil, created_at: nil, updated_at: nil) else resource_class.new end diff --git a/spec/controllers/ephemera_folders_controller_spec.rb b/spec/controllers/ephemera_folders_controller_spec.rb index 65e8a4dc30..b3b288c5c4 100644 --- a/spec/controllers/ephemera_folders_controller_spec.rb +++ b/spec/controllers/ephemera_folders_controller_spec.rb @@ -61,6 +61,13 @@ get :new, params: { template_id: template.id.to_s } + expect(response.body).to have_field "Language", with: "Test" + end + it "can be passed a previously created record to pre-generate fields" do + record = FactoryGirl.create_for_repository(:ephemera_folder, language: "Test") + + get :new, params: { create_another: record.id.to_s } + expect(response.body).to have_field "Language", with: "Test" end end @@ -135,6 +142,12 @@ id = response.location.gsub("http://test.host/catalog/", "").gsub("%2F", "/").gsub(/^id-/, "") expect(find_resource(id).folder_number).to contain_exactly "one" end + it "can save and create another" do + box = FactoryGirl.create_for_repository(:ephemera_box) + post :create, params: { commit: "Save and Create Another", ephemera_folder: valid_params.merge(append_id: box.id) } + expect(response).to be_redirect + expect(response.location).to start_with "http://test.host/concern/ephemera_boxes/#{box.id}/ephemera_folders/new?create_another" + end context "when something bad goes wrong" do it "doesn't persist anything at all when it's solr erroring" do allow(Valkyrie::MetadataAdapter.find(:index_solr)).to receive(:persister).and_return( diff --git a/valhalla/app/views/valhalla/base/_form_progress.html.erb b/valhalla/app/views/valhalla/base/_form_progress.html.erb index 1eebab686a..05769fadb2 100644 --- a/valhalla/app/views/valhalla/base/_form_progress.html.erb +++ b/valhalla/app/views/valhalla/base/_form_progress.html.erb @@ -23,5 +23,8 @@ class: 'btn btn-default' %> <%= f.submit class: 'btn btn-primary' %> + <% if f.object.resource.is_a?(EphemeraFolder) && params[:controller] == "ephemera_folders" %> + <%= f.submit "Save and Create Another", class: 'btn btn-primary' %> + <% end %>