keep workspace type url when selecting template

This commit is contained in:
Ivan Kuchin
2025-11-12 18:30:44 +01:00
parent 65b48bd3d4
commit 6aa6e00852
4 changed files with 69 additions and 2 deletions
@@ -30,7 +30,7 @@ See COPYRIGHT and LICENSE files for more details.
<%=
component_wrapper do
settings_primer_form_with(
url: new_project_path,
url: new_workspace_path,
method: :get,
data: {
turbo_frame: Projects::NewComponent.wrapper_key,
@@ -35,12 +35,23 @@ module Projects
include OpPrimer::ComponentHelpers
include OpTurbo::Streamable
option :project
option :template
option :parent, optional: true
option :current_user, default: -> { User.current }
private
def new_workspace_path
workspace_type = if Project.workspace_types.key?(project.workspace_type)
project.workspace_type.to_sym
else
:project
end
url_for([:new, workspace_type])
end
def template_id = template&.id
def parent_id = parent&.id
end
+1
View File
@@ -36,6 +36,7 @@ See COPYRIGHT and LICENSE files for more details.
<%=
render Projects::TemplateSelectComponent.new(
project: @new_project,
template: @template,
parent: @parent,
current_user:
@@ -35,15 +35,70 @@ RSpec.describe Projects::TemplateSelectComponent, type: :component do
render_inline(described_class.new(...))
end
let(:project) { Project.new }
let(:template) { build_stubbed(:template_project) }
let(:current_user) { build_stubbed(:user) }
subject(:rendered_component) { render_component(template:, current_user:) }
subject(:rendered_component) { render_component(project:, template:, current_user:) }
it "renders form" do
expect(rendered_component).to have_element :form, method: "get"
end
describe "action" do
let(:project) { Project.new(workspace_type:) }
context "when workspace type is not set" do
let(:workspace_type) { nil }
it "sets action to create project" do
expect(rendered_component).to have_element :form, method: "get" do |form|
expect(form["action"]).to eq "/projects/new"
end
end
end
context "when workspace type set to unknown value" do
let(:workspace_type) { :unknown }
it "sets action to create project" do
expect(rendered_component).to have_element :form, method: "get" do |form|
expect(form["action"]).to eq "/projects/new"
end
end
end
context "when workspace type is set to project" do
let(:workspace_type) { :project }
it "sets action to create project" do
expect(rendered_component).to have_element :form, method: "get" do |form|
expect(form["action"]).to eq "/projects/new"
end
end
end
context "when workspace type is set to program" do
let(:workspace_type) { :program }
it "sets action to create project" do
expect(rendered_component).to have_element :form, method: "get" do |form|
expect(form["action"]).to eq "/programs/new"
end
end
end
context "when workspace type is set to portfolio" do
let(:workspace_type) { :portfolio }
it "sets action to create project" do
expect(rendered_component).to have_element :form, method: "get" do |form|
expect(form["action"]).to eq "/portfolios/new"
end
end
end
end
it "registers Stimulus controller" do
expect(rendered_component).to have_element :form do |form|
expect(form["data-controller"]).to include "auto-submit"