Task creation (workflow dependent frames)
This commit is contained in:
@@ -18,7 +18,8 @@ class TasksController < ApplicationController
|
|||||||
|
|
||||||
def new
|
def new
|
||||||
@project = fetch_project || Project.order(:name).first
|
@project = fetch_project || Project.order(:name).first
|
||||||
@form = Tasks::Create.new(project_id: @project.id)
|
@workflow = fetch_workflow || @project.workflows.first
|
||||||
|
@form = Tasks::Create.new(project_id: @project.id, workflow_id: @workflow.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@@ -70,6 +71,12 @@ class TasksController < ApplicationController
|
|||||||
Project.find_by!(code: params[:project])
|
Project.find_by!(code: params[:project])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def fetch_workflow
|
||||||
|
return nil if params[:workflow_id].blank?
|
||||||
|
|
||||||
|
@project.workflows.find(params[:workflow_id])
|
||||||
|
end
|
||||||
|
|
||||||
def fetch_task
|
def fetch_task
|
||||||
@task = Task.includes(:project).find_by_full_number_or_id!(params[:id])
|
@task = Task.includes(:project).find_by_full_number_or_id!(params[:id])
|
||||||
self.current_project = @task.project
|
self.current_project = @task.project
|
||||||
|
|||||||
+7
-5
@@ -1,16 +1,18 @@
|
|||||||
import { Controller } from '@hotwired/stimulus'
|
import { Controller } from '@hotwired/stimulus'
|
||||||
|
|
||||||
// TODO: unite with ProjectsSelectorController?
|
// TODO: unite with ProjectsSelectorController?
|
||||||
class FormProjectsSelectorController extends Controller {
|
class DependentFramesSelectorController extends Controller {
|
||||||
|
static values = {'param': String}
|
||||||
|
|
||||||
static targets = ['frame']
|
static targets = ['frame']
|
||||||
|
|
||||||
changeProject(event) {
|
refresh(event) {
|
||||||
const loc = new URL(location)
|
const loc = new URL(location)
|
||||||
const selected = event.target.selectedOptions[0]
|
const selected = event.target.selectedOptions[0]
|
||||||
const code = selected.dataset.code
|
const value = selected.dataset.code || selected.value
|
||||||
loc.searchParams.set('project', code)
|
loc.searchParams.set(this.paramValue, value)
|
||||||
Turbo.visit(loc.toString(), {frame: this.frameTarget})
|
Turbo.visit(loc.toString(), {frame: this.frameTarget})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default FormProjectsSelectorController
|
export default DependentFramesSelectorController
|
||||||
@@ -4,7 +4,7 @@ class Workflow < ApplicationRecord
|
|||||||
belongs_to :project
|
belongs_to :project
|
||||||
|
|
||||||
has_many :tasks, dependent: :restrict_with_exception
|
has_many :tasks, dependent: :restrict_with_exception
|
||||||
has_many :statuses, dependent: :restrict_with_error
|
has_many :statuses, class_name: 'TaskStatus', dependent: :restrict_with_error
|
||||||
|
|
||||||
enum :icon, { task: 'task', warning: 'warning' }, default: 'task', scopes: false
|
enum :icon, { task: 'task', warning: 'warning' }, default: 'task', scopes: false
|
||||||
enum :color, { blue: 'blue', gray: 'gray', yellow: 'yellow', red: 'red' }, default: 'gray', scopes: false
|
enum :color, { blue: 'blue', gray: 'gray', yellow: 'yellow', red: 'red' }, default: 'gray', scopes: false
|
||||||
|
|||||||
@@ -2,7 +2,10 @@
|
|||||||
tr id="task_#{task.id}"
|
tr id="task_#{task.id}"
|
||||||
td
|
td
|
||||||
/ TODO: extract into a presenter (and especially add color)
|
/ TODO: extract into a presenter (and especially add color)
|
||||||
= image_tag('mingcute/task_line.svg', title: task.workflow.name)
|
- wf_icon = 'task_line'
|
||||||
|
- if task.workflow.icon == 'warning'
|
||||||
|
- wf_icon = 'warning_line'
|
||||||
|
= image_tag("mingcute/#{wf_icon}.svg", title: task.workflow.name)
|
||||||
td= link_to task.full_number, task_path(task)
|
td= link_to task.full_number, task_path(task)
|
||||||
td
|
td
|
||||||
= task_status_selector task, with_form: true
|
= task_status_selector task, with_form: true
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
h1 New task
|
h1 New task
|
||||||
|
|
||||||
= form_with model: @form, data: {controller: 'form-projects-selector'} do |form|
|
= form_with model: @form, data: {controller: 'dependent-frames-selector', 'dependent-frames-selector-param-value': 'project'} do |form|
|
||||||
.field
|
.field
|
||||||
= form.label :project_id
|
= form.label :project_id
|
||||||
= form.select :project_id, Project.order(:name).map { |p| [p.name, p.id, {'data-code': p.code}] }, {}, data: {action: 'form-projects-selector#changeProject'}
|
= form.select :project_id, Project.order(:name).map { |p| [p.name, p.id, {'data-code': p.code}] }, {}, data: {action: 'dependent-frames-selector#refresh'}
|
||||||
= turbo_frame_tag :project_field_selects, data: {'form-projects-selector-target': 'frame'} do
|
= turbo_frame_tag :project_field_selects, data: {'dependent-frames-selector-target': 'frame'} do
|
||||||
.field
|
fieldset data={controller: 'dependent-frames-selector', 'dependent-frames-selector-param-value': 'workflow_id'}
|
||||||
= form.label :workflow
|
.field
|
||||||
= form.select :workflow_id, Workflow.where(project: @form.project).map { |w| [w.name, w.id] }
|
= form.label :workflow
|
||||||
|
= form.select :workflow_id, Workflow.where(project: @form.project).map { |w| [w.name, w.id] }, {}, data: {action: 'dependent-frames-selector#refresh'}
|
||||||
|
|
||||||
.field
|
= turbo_frame_tag :status_select, data: {'dependent-frames-selector-target': 'frame'}
|
||||||
= form.label :status_id
|
.field
|
||||||
= form.select :status_id, TaskStatus.where(project: @form.project).default_order.map { |ts| [ts.name, ts.id] }
|
= form.label :status_id
|
||||||
|
= form.select :status_id, TaskStatus.where(workflow: @workflow).default_order.map { |ts| [ts.name, ts.id] }
|
||||||
.field
|
.field
|
||||||
= form.label :title
|
= form.label :title
|
||||||
= form.text_field :title
|
= form.text_field :title
|
||||||
|
|||||||
Reference in New Issue
Block a user