Status transitions editing
This commit is contained in:
@@ -18,12 +18,30 @@ module ProjectAdmin
|
|||||||
|
|
||||||
@form = ProjectAdmin::Workflows::Statuses::BatchUpdate.new(form_params)
|
@form = ProjectAdmin::Workflows::Statuses::BatchUpdate.new(form_params)
|
||||||
if @form.call(@workflow)
|
if @form.call(@workflow)
|
||||||
redirect_to project_admin_workflow_path(@project, @workflow)
|
redirect_to(action: :edit_transitions)
|
||||||
else
|
else
|
||||||
render :edit
|
render :edit
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def edit_transitions
|
||||||
|
@form = ProjectAdmin::Workflows::Statuses::UpdateTransitions.from_model(@workflow)
|
||||||
|
end
|
||||||
|
|
||||||
|
def batch_update_transitions
|
||||||
|
form_params = params.expect(workflow: { task_statuses_attributes: [[:id, { next_status_ids: [] }]] })
|
||||||
|
if form_params[:task_statuses_attributes].respond_to?(:keys)
|
||||||
|
form_params[:task_statuses_attributes] = form_params[:task_statuses_attributes].values
|
||||||
|
end
|
||||||
|
|
||||||
|
@form = ProjectAdmin::Workflows::Statuses::UpdateTransitions.new(form_params)
|
||||||
|
if @form.call(@workflow)
|
||||||
|
redirect_to project_admin_workflow_path(@project, @workflow)
|
||||||
|
else
|
||||||
|
render :edit_transitions
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def fetch_workflow
|
def fetch_workflow
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ module ProjectAdminHelper
|
|||||||
def project_admin_workflow_frame(workflow, &)
|
def project_admin_workflow_frame(workflow, &)
|
||||||
links = {
|
links = {
|
||||||
'Data' => edit_project_admin_workflow_path(workflow.project, workflow),
|
'Data' => edit_project_admin_workflow_path(workflow.project, workflow),
|
||||||
'Statuses' => edit_project_admin_workflow_statuses_path(workflow.project, workflow)
|
'Statuses' => edit_project_admin_workflow_statuses_path(workflow.project, workflow),
|
||||||
|
'Transitions' => edit_transitions_project_admin_workflow_statuses_path(workflow.project, workflow)
|
||||||
}
|
}
|
||||||
title = "Editing workflow #{workflow.name} for project #{workflow.project.name}"
|
title = "Editing workflow #{workflow.name} for project #{workflow.project.name}"
|
||||||
admin_frame(links, title:, back_path: project_admin_workflow_path(workflow.project, workflow), &)
|
admin_frame(links, title:, back_path: project_admin_workflow_path(workflow.project, workflow), &)
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module ProjectAdmin
|
||||||
|
module Workflows
|
||||||
|
module Statuses
|
||||||
|
class UpdateTransitions < ApplicationService
|
||||||
|
class TaskStatus
|
||||||
|
include ActiveModel::Model
|
||||||
|
include ActiveModel::Attributes
|
||||||
|
|
||||||
|
attribute :id, :integer
|
||||||
|
attribute :next_status_ids
|
||||||
|
end
|
||||||
|
|
||||||
|
attr_accessor :task_statuses
|
||||||
|
|
||||||
|
def self.from_model(workflow)
|
||||||
|
new(task_statuses_attributes: workflow.task_statuses
|
||||||
|
.includes(:next_statuses)
|
||||||
|
.map { |ts| { id: ts.id, next_status_ids: ts.next_status_ids } })
|
||||||
|
end
|
||||||
|
|
||||||
|
def task_statuses_attributes=(attributes)
|
||||||
|
@task_statuses = Array(attributes).map { |e| TaskStatus.new(e) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(workflow)
|
||||||
|
workflow.update(task_statuses_attributes: task_statuses.map(&:attributes))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
= project_admin_workflow_frame(@workflow) do
|
||||||
|
= form_with model: @workflow, scope: :workflow, url: transitions_project_admin_workflow_statuses_path(@project, @workflow), method: :put, data: {'turbo-frame': '_top'} do |f|
|
||||||
|
= f.fields_for :task_statuses do |tsf|
|
||||||
|
section
|
||||||
|
div= task_status_badge tsf.object
|
||||||
|
div= tsf.collection_checkboxes :next_status_ids, @workflow.task_statuses - [tsf.object], :id, :name
|
||||||
|
|
||||||
|
.submit
|
||||||
|
= f.submit
|
||||||
@@ -25,6 +25,8 @@ Rails.application.routes.draw do
|
|||||||
resources :statuses, only: %i[index] do
|
resources :statuses, only: %i[index] do
|
||||||
get :edit, on: :collection
|
get :edit, on: :collection
|
||||||
put '/', action: :batch_update, on: :collection
|
put '/', action: :batch_update, on: :collection
|
||||||
|
get :edit_transitions, on: :collection
|
||||||
|
put '/transitions', action: :batch_update_transitions, on: :collection
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user