Add ToggleComplete for TaskController

This commit is contained in:
Thuan Bui
2025-03-06 22:25:46 +09:00
parent 11826da4c9
commit da2c4eeb6d
5 changed files with 34 additions and 18 deletions
+4 -4
View File
@@ -10,10 +10,10 @@ use Illuminate\Support\Facades\Auth;
class TaskController extends Controller class TaskController extends Controller
{ {
public function index() { public function index() {
$task = Task::latest('updated_at')->Paginate(20); $totalTasks = Task::count(); // Count all tasks
return view('task.index', [ $completedTasks = Task::where('completed', true)->count(); // Coun
'tasks' => $task $tasks = Task::latest('updated_at')->Paginate(20);
]); return view('task.index', compact('tasks','totalTasks','completedTasks'));
} }
public function show(Task $task) { public function show(Task $task) {
+1 -1
View File
@@ -18,7 +18,7 @@ class Task extends Model
if (is_null($task->completed)) { if (is_null($task->completed)) {
$task->completed = false; // Ensure completed is false when creating a new task $task->completed = false; // Ensure completed is false when creating a new task
} }
$task->user_id = Auth::id(); // Set user_id automatically $task->user_id = Auth::id(); // Set user_id automatically
}); });
} }
+16 -9
View File
@@ -9,18 +9,25 @@
<div class="mb-5"> <div class="mb-5">
<a class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded" href="/task/create">Create new task</a> <a class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded" href="/task/create">Create new task</a>
</div> </div>
<div class="mb-5">
Progress: {{ $completedTasks}} / {{ $totalTasks }} completed.
</div>
@foreach ($tasks as $task) @foreach ($tasks as $task)
<div class="block border-2 border-gray-500 p-2"> <div class="block border-2 border-gray-500 p-2">
<div><a href="/task/{{ $task->id }}"> <div class="flex items-center justify-between">
<h3 class="text-2xl tracking-tight text-blue-800">{{ $task->name }}<h3> <div>
</a></div> <div><a href="/task/{{ $task->id }}">
<div><strong>Where to go:</strong> {{ $task->location }}</div> <h3 class="text-2xl tracking-tight text-blue-800">{{ $task->name }}<h3>
<div><strong>Time Estimate:</strong> {{ $task->time_estimate }}</div> </a></div>
<div><strong>Where to go:</strong> {{ $task->location }}</div>
<div><strong>Time Estimate:</strong> {{ $task->time_estimate }}</div>
</div>
<div>
<p>{{ ($task->completed) ? "Completed" : "" }}</p>
</div>
</div>
</div> </div>
@endforeach @endforeach
<div class="mt-2">{{$tasks -> links()}}</div> <div class="mt-2">{{$tasks -> links()}}</div>
</x-layout> </x-layout>
$completedCount = Task::where('completed', true)->count();
+11 -2
View File
@@ -4,12 +4,21 @@
<div> <div>
<div class="text-lg mb-4"> {{ $task->description }}</div> <div class="text-lg mb-4">
<h2>What need to do </h2>
<p class="text-sm">{{ $task->description }}</p>
</div>
<div><strong>Where to go:</strong> {{ $task->location }}</div> <div><strong>Where to go:</strong> {{ $task->location }}</div>
<div><strong>Time Estimate:</strong> {{ $task->time_estimate }} hour</div> <div><strong>Time Estimate:</strong> {{ $task->time_estimate }} hour</div>
<div><strong>Category:</strong> {{ $task->category->name }}</div> <div><strong>Category:</strong> {{ $task->category->name }}</div>
<div><strong>Owner:</strong> {{ $task->user->name }}</div> <div><strong>Owner:</strong> {{ $task->user->name }}</div>
<div class="mt-4 mb-4">
<form action="/task/{{ $task->id }}/toggle" method="POST" class="d-inline" >
@csrf
@method('PATCH')
<x-form-button>{{ (! $task->completed) ? 'Mark Completed' : "Greate! You nailed it!" }}</x-form-button>
</form>
</div>
</div> </div>
<div class="mt-5"> <div class="mt-5">
<a href="/task/{{ $task->id }}/edit" class="text-sm text-blue-600 dark:text-blue-500 hover:underline">Edit</a> <a href="/task/{{ $task->id }}/edit" class="text-sm text-blue-600 dark:text-blue-500 hover:underline">Edit</a>
+2 -2
View File
@@ -12,8 +12,6 @@ use Illuminate\Validation\Rules\Password;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
Route::get('/', [TaskController::class, 'index']); Route::get('/', [TaskController::class, 'index']);
Route::get('/task', [TaskController::class, 'index'])->name('task.index'); Route::get('/task', [TaskController::class, 'index'])->name('task.index');
Route::get('/task/create', [TaskController::class, 'create']); Route::get('/task/create', [TaskController::class, 'create']);
@@ -22,6 +20,8 @@ Route::post('/task/create', [TaskController::class, 'store'])->name('task.create
Route::delete('/task/{task}', [TaskController::class, 'destroy']); Route::delete('/task/{task}', [TaskController::class, 'destroy']);
Route::get('/task/{task}/edit', [TaskController::class, 'edit']); Route::get('/task/{task}/edit', [TaskController::class, 'edit']);
Route::patch('/task/{task}', [TaskController::class, 'update']); Route::patch('/task/{task}', [TaskController::class, 'update']);
Route::patch('/task/{task}/toggle', [TaskController::class, 'toggleComplete']);
Route::get('/register', [UserRegisterController::class, 'register']); Route::get('/register', [UserRegisterController::class, 'register']);
Route::post('/register', [UserRegisterController::class, 'store']); Route::post('/register', [UserRegisterController::class, 'store']);