diff --git a/app/controllers/project_admin/workflows_controller.rb b/app/controllers/project_admin/workflows_controller.rb index a69b762..fb62575 100644 --- a/app/controllers/project_admin/workflows_controller.rb +++ b/app/controllers/project_admin/workflows_controller.rb @@ -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 diff --git a/app/services/project_admin/workflows/update.rb b/app/services/project_admin/workflows/update.rb new file mode 100644 index 0000000..e48c297 --- /dev/null +++ b/app/services/project_admin/workflows/update.rb @@ -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 diff --git a/app/view_models/project_admin/tabs_view_model.rb b/app/view_models/project_admin/tabs_view_model.rb index 7756f42..a1d16ff 100644 --- a/app/view_models/project_admin/tabs_view_model.rb +++ b/app/view_models/project_admin/tabs_view_model.rb @@ -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 diff --git a/app/views/project_admin/workflows/_form.html.slim b/app/views/project_admin/workflows/_form.html.slim new file mode 100644 index 0000000..fa0185f --- /dev/null +++ b/app/views/project_admin/workflows/_form.html.slim @@ -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' diff --git a/app/views/project_admin/workflows/edit.html.slim b/app/views/project_admin/workflows/edit.html.slim new file mode 100644 index 0000000..80e3c3c --- /dev/null +++ b/app/views/project_admin/workflows/edit.html.slim @@ -0,0 +1,5 @@ +h1 + | Editing workflow + =< @workflow.name + += render 'form', url: project_admin_workflow_path(@project, @workflow) diff --git a/app/views/project_admin/workflows/index.html.slim b/app/views/project_admin/workflows/index.html.slim index 80c82b9..a220a01 100644 --- a/app/views/project_admin/workflows/index.html.slim +++ b/app/views/project_admin/workflows/index.html.slim @@ -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' diff --git a/app/views/project_admin/workflows/show.html.slim b/app/views/project_admin/workflows/show.html.slim new file mode 100644 index 0000000..43e2976 --- /dev/null +++ b/app/views/project_admin/workflows/show.html.slim @@ -0,0 +1,8 @@ +h1 + | Workflow + += workflow_display @workflow, full: true, badge: true + +ul + - @workflow.task_statuses.each do |status| + li= status.name diff --git a/config/routes.rb b/config/routes.rb index da6724a..b4550d2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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