diff --git a/app/controllers/project_admin/workflows_controller.rb b/app/controllers/project_admin/workflows_controller.rb index fb62575..6081385 100644 --- a/app/controllers/project_admin/workflows_controller.rb +++ b/app/controllers/project_admin/workflows_controller.rb @@ -12,16 +12,23 @@ module ProjectAdmin # TODO: add loading statuses and other things end - def edit - @form = ProjectAdmin::Workflows::Update.new( - @workflow.attributes.slice('name', 'icon', 'color') - ) + def new + @workflow = @project.workflows.build end - def update - @form = ProjectAdmin::Workflows::Update.new(params.expect(workflow: %i[name color icon])) + def create + @workflow = @project.workflows.build(workflow_params) + if @workflow.save + redirect_to project_admin_workflow_path(@project, @workflow) + else + render :new, status: :unprocessable_entity + end + end - if @form.perform(@workflow) + def edit; end + + def update + if @workflow.update(workflow_params) redirect_to project_admin_workflow_path(@project, @workflow) else render :edit, status: :unprocessable_entity @@ -36,5 +43,9 @@ module ProjectAdmin def fetch_workflow @workflow = @project.workflows.find(params[:id]) end + + def workflow_params + params.expect(workflow: %i[name color icon]) + end end end diff --git a/app/services/project_admin/workflows/update.rb b/app/services/project_admin/workflows/update.rb deleted file mode 100644 index e48c297..0000000 --- a/app/services/project_admin/workflows/update.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -module ProjectAdmin - module Workflows - class Update < ApplicationService - attribute :id, :integer - attribute :name, :string - attribute :icon, :string - attribute :color, :string - - validates :name, presence: true - validates :icon, inclusion: { in: Workflow.icons.values } - validates :color, inclusion: { in: Workflow.colors.values } - - delegate :model_name, to: Workflow - - def persisted? = true - - def perform(workflow) - @workflow = workflow - @id = workflow.id - @workflow.assign_attributes(icon:, color:, name:) - save @workflow - end - end - end -end diff --git a/app/views/project_admin/workflows/_form.html.slim b/app/views/project_admin/workflows/_form.html.slim index fa0185f..2164d8d 100644 --- a/app/views/project_admin/workflows/_form.html.slim +++ b/app/views/project_admin/workflows/_form.html.slim @@ -1,4 +1,4 @@ -= form_with model: @form, url: url do |form| += form_with model: @workflow, url: url, data: {'turbo-frame': '_top'} do |form| .field = form.label :name = form.text_field :name diff --git a/app/views/project_admin/workflows/index.html.slim b/app/views/project_admin/workflows/index.html.slim index a220a01..55268ff 100644 --- a/app/views/project_admin/workflows/index.html.slim +++ b/app/views/project_admin/workflows/index.html.slim @@ -2,6 +2,9 @@ h2 span Workflows + .links + = link_to 'New', new_project_admin_workflow_path(@project) + - @workflows.each do |workflow| article.row = workflow_display(workflow, full: true) diff --git a/app/views/project_admin/workflows/new.html.slim b/app/views/project_admin/workflows/new.html.slim new file mode 100644 index 0000000..3c9c82f --- /dev/null +++ b/app/views/project_admin/workflows/new.html.slim @@ -0,0 +1,2 @@ += project_admin_frame(@project) do + = render 'form', url: project_admin_workflows_path(@project, @workflow) diff --git a/app/views/project_admin/workflows/show.html.slim b/app/views/project_admin/workflows/show.html.slim index 2a36a88..39831e5 100644 --- a/app/views/project_admin/workflows/show.html.slim +++ b/app/views/project_admin/workflows/show.html.slim @@ -3,7 +3,7 @@ h1 .row = workflow_display @workflow, full: true, badge: true - .links + .links.right = link_to 'Edit', edit_project_admin_workflow_path(@project, @workflow) h2 Statuses diff --git a/app/views/project_admin/workflows/statuses/edit.html.slim b/app/views/project_admin/workflows/statuses/edit.html.slim index a2df883..129d907 100644 --- a/app/views/project_admin/workflows/statuses/edit.html.slim +++ b/app/views/project_admin/workflows/statuses/edit.html.slim @@ -1,5 +1,5 @@ = project_admin_workflow_frame(@workflow) do - = form_with model: @form, scope: 'workflow', url: project_admin_workflow_statuses_path(@project, @workflow), method: :put, data: {controller: 'dynamic-forms', 'dynamic-forms-field-name-value': 'task_statuses_attributes', 'dynamic-forms-field-template-value': '_extra_form', 'dynamic-forms-index-template-value': '__index__', 'dynamic-forms-count-value': @form.task_statuses.count} do |f| + = form_with model: @form, scope: 'workflow', url: project_admin_workflow_statuses_path(@project, @workflow), method: :put, data: {controller: 'dynamic-forms', 'dynamic-forms-field-name-value': 'task_statuses_attributes', 'dynamic-forms-field-template-value': '_extra_form', 'dynamic-forms-index-template-value': '__index__', 'dynamic-forms-count-value': @form.task_statuses.count, 'turbo-frame': '_top'} do |f| section.workflow-statuses-batch-update-fieldsets data-dynamic-forms-target="container" = f.fields_for :task_statuses, include_id: false do |tsf| = render 'batch_update_fieldset', ff: tsf, with_destroy: true