Workflow info and update

This commit is contained in:
2026-03-29 14:23:26 +03:00
parent 83b296dbe7
commit 32a7b07f2d
8 changed files with 97 additions and 4 deletions
@@ -2,8 +2,39 @@
module ProjectAdmin
class WorkflowsController < ApplicationController
before_action :fetch_workflow, only: %w[show edit update destroy]
def index
@workflows = @project.workflows
end
def show
# TODO: add loading statuses and other things
end
def edit
@form = ProjectAdmin::Workflows::Update.new(
@workflow.attributes.slice('name', 'icon', 'color')
)
end
def update
@form = ProjectAdmin::Workflows::Update.new(params.expect(workflow: %i[name color icon]))
if @form.perform(@workflow)
redirect_to project_admin_workflow_path(@project, @workflow)
else
render :edit, status: :unprocessable_entity
end
end
def destroy
end
private
def fetch_workflow
@workflow = @project.workflows.find(params[:id])
end
end
end
@@ -0,0 +1,27 @@
# 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
@@ -22,7 +22,7 @@ module ProjectAdmin
def links
{
'Data' => edit_project_path(@project),
'Workflows' => project_workflows_path(@project)
'Workflows' => project_admin_workflows_path(@project)
}
end
end
@@ -0,0 +1,14 @@
= form_with model: @form, url: url do |form|
.field
= form.label :name
= form.text_field :name
.field
/ TODO: replace with radio buttons maybe
= form.label :color
= form.select :color, Workflow.colors
.field
/ TODO: replace with radio buttons maybe
= form.label :icon
= form.select :icon, Workflow.icons
.submit
= form.submit 'Submit'
@@ -0,0 +1,5 @@
h1
| Editing workflow
=< @workflow.name
= render 'form', url: project_admin_workflow_path(@project, @workflow)
@@ -6,4 +6,5 @@
article.row
= workflow_display(workflow, full: true)
ul.links.right
li= link_to 'Edit', edit_project_workflow_path(@project, workflow), target: '_blank'
li= link_to 'Info', project_admin_workflow_path(@project, workflow), target: '_blank'
li= link_to 'Edit', edit_project_admin_workflow_path(@project, workflow), target: '_blank'
@@ -0,0 +1,8 @@
h1
| Workflow
= workflow_display @workflow, full: true, badge: true
ul
- @workflow.task_statuses.each do |status|
li= status.name
+9 -2
View File
@@ -16,9 +16,16 @@ Rails.application.routes.draw do
# Defines the root path route ("/")
# root "posts#index"
root to: redirect('/projects')
resources :projects do
scope module: :project_admin do
resources :workflows, only: %i[index new create edit update destroy]
namespace :project_admin, as: 'admin' do
resources :workflows do
namespace :statuses do
get '/', action: :index
patch '/', action: :batch_update
end
end
end
end