diff --git a/app/controllers/tasks_controller.rb b/app/controllers/tasks_controller.rb index f51bcd2..955546a 100644 --- a/app/controllers/tasks_controller.rb +++ b/app/controllers/tasks_controller.rb @@ -51,7 +51,7 @@ def destroy private def task_params - params.require(:task).permit(:description, :notes, :position) + params.require(:task).permit(:description, :notes, :position, :completed) end def tasks diff --git a/app/javascript/controllers/task_controller.js b/app/javascript/controllers/task_controller.js new file mode 100644 index 0000000..9cdbb26 --- /dev/null +++ b/app/javascript/controllers/task_controller.js @@ -0,0 +1,13 @@ +import { Controller } from "@hotwired/stimulus"; +import { patch } from "@rails/request.js"; + +export default class extends Controller { + async toggle(event) { + event.target.setAttribute("disabled", true); + + await patch(this.element.dataset.sortableUpdateUrl, { + body: { task: { completed: event.target.checked } }, + responseKind: "turbo-stream", + }); + } +} diff --git a/app/views/tasks/_task.html.erb b/app/views/tasks/_task.html.erb index b08513d..6742b13 100644 --- a/app/views/tasks/_task.html.erb +++ b/app/views/tasks/_task.html.erb @@ -1,4 +1,5 @@ -<%= turbo_frame_tag task, data: { "sortable-update-url": task_path(task) } do %> +<%= turbo_frame_tag task, data: { controller: "task", "sortable-update-url": task_path(task) } do %> + <%= checkbox_tag :completed, checked: task.completed?, data: { action: "task#toggle" } %>