Workflow creation

This commit is contained in:
2026-04-22 02:15:16 +03:00
parent 52f2191a25
commit fb03bb1a2d
7 changed files with 26 additions and 37 deletions
@@ -12,16 +12,23 @@ module ProjectAdmin
# TODO: add loading statuses and other things # TODO: add loading statuses and other things
end end
def edit def new
@form = ProjectAdmin::Workflows::Update.new( @workflow = @project.workflows.build
@workflow.attributes.slice('name', 'icon', 'color')
)
end end
def update def create
@form = ProjectAdmin::Workflows::Update.new(params.expect(workflow: %i[name color icon])) @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) redirect_to project_admin_workflow_path(@project, @workflow)
else else
render :edit, status: :unprocessable_entity render :edit, status: :unprocessable_entity
@@ -36,5 +43,9 @@ module ProjectAdmin
def fetch_workflow def fetch_workflow
@workflow = @project.workflows.find(params[:id]) @workflow = @project.workflows.find(params[:id])
end end
def workflow_params
params.expect(workflow: %i[name color icon])
end
end end
end end
@@ -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
@@ -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 .field
= form.label :name = form.label :name
= form.text_field :name = form.text_field :name
@@ -2,6 +2,9 @@
h2 h2
span Workflows span Workflows
.links
= link_to 'New', new_project_admin_workflow_path(@project)
- @workflows.each do |workflow| - @workflows.each do |workflow|
article.row article.row
= workflow_display(workflow, full: true) = workflow_display(workflow, full: true)
@@ -0,0 +1,2 @@
= project_admin_frame(@project) do
= render 'form', url: project_admin_workflows_path(@project, @workflow)
@@ -3,7 +3,7 @@ h1
.row .row
= workflow_display @workflow, full: true, badge: true = workflow_display @workflow, full: true, badge: true
.links .links.right
= link_to 'Edit', edit_project_admin_workflow_path(@project, @workflow) = link_to 'Edit', edit_project_admin_workflow_path(@project, @workflow)
h2 Statuses h2 Statuses
@@ -1,5 +1,5 @@
= project_admin_workflow_frame(@workflow) do = 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" section.workflow-statuses-batch-update-fieldsets data-dynamic-forms-target="container"
= f.fields_for :task_statuses, include_id: false do |tsf| = f.fields_for :task_statuses, include_id: false do |tsf|
= render 'batch_update_fieldset', ff: tsf, with_destroy: true = render 'batch_update_fieldset', ff: tsf, with_destroy: true