🗑️ Bài 22: Bulk Delete với Select-all
Bảng 15 items có checkbox mỗi row + checkbox "Select all" ở header + nút Delete + modal xác nhận. Bài tập về indeterminate checkbox state + bulk action UI.
📋 Quy tắc tương tác
- Click row checkbox: toggle item.
- Click "Select all":
- Nếu chưa chọn item nào → chọn tất cả.
- Nếu đã chọn 1 phần → chọn tất cả.
- Nếu đã chọn tất cả → bỏ chọn tất cả.
- Indeterminate state của Select-all:
- Đã chọn 0 → unchecked.
- Đã chọn 1..N-1 → indeterminate (dấu gạch ngang).
- Đã chọn tất cả → checked.
- Counter: hiển thị "X items selected".
- Delete button:
- Disabled khi 0 items selected.
- Click → hiển thị modal "Delete X items? This cannot be undone."
- Confirm → xóa khỏi list, reset checkboxes.
🎯 Yêu cầu
- Test indeterminate state ở các trạng thái: 0/1/2/.../14/15 selected.
- Test Select-all toggle behavior.
- Test Delete button enable/disable theo selected count.
- Test modal confirm: số items hiển thị đúng?
- Test sau khi xóa: counter, indeterminate, list refresh.
- Test: chọn 5 items → xóa 2 items → còn lại đúng items chưa chọn.
⚠️ Bug được cài cắm: indeterminate logic, Select-all toggle, modal count, delete behavior, counter.