📍 Bài 16: Form địa chỉ Tỉnh / Quận / Phường (Cascade Dropdown)
Form chọn địa chỉ với 3 dropdown phụ thuộc: Tỉnh → Quận/Huyện → Phường/Xã. Bài tập về cascade data + state management.
📌 Quy tắc hoạt động
- Tỉnh: load sẵn từ data tĩnh.
- Quận/Huyện: ban đầu disabled. Chọn Tỉnh → load Quận tương ứng → enabled.
- Phường/Xã: ban đầu disabled. Chọn Quận → load Phường → enabled.
- Đổi Tỉnh: phải reset Quận và Phường về placeholder.
- Đổi Quận: phải reset Phường về placeholder.
- Số nhà + Đường: text input bình thường.
- Submit: tất cả bắt buộc, validate đầy đủ trước khi submit.
📌 Test data (subset cho demo)
- Hà Nội:
- Hoàn Kiếm: Hàng Bạc, Hàng Buồm, Cửa Đông
- Ba Đình: Phúc Xá, Trúc Bạch, Vĩnh Phúc
- Đống Đa: Cát Linh, Văn Miếu, Quốc Tử Giám
- TP Hồ Chí Minh:
- Quận 1: Bến Nghé, Bến Thành, Cô Giang
- Quận 3: Phường 1, Phường 2, Võ Thị Sáu
- Bình Thạnh: Phường 1, Phường 11, Phường 25
- Đà Nẵng:
- Hải Châu: Hải Châu I, Hải Châu II, Phước Ninh
- Sơn Trà: An Hải Bắc, An Hải Đông, Mân Thái
📋 Bảng đặc tả
| # | Tên | Loại | Bắt buộc | Mô tả |
| 1 | Tỉnh/TP | Dropdown | Yes | Khởi tạo enabled với placeholder "Chọn tỉnh" |
| 2 | Quận/Huyện | Dropdown | Yes | Disabled cho đến khi chọn Tỉnh |
| 3 | Phường/Xã | Dropdown | Yes | Disabled cho đến khi chọn Quận |
| 4 | Số nhà | Text | Yes | 1-20 ký tự |
| 5 | Đường | Text | Yes | 2-100 ký tự |
| 6 | Submit | Button | — | Validate và submit |
🎯 Yêu cầu
- Test các flow: chọn → chọn → chọn → submit (happy path).
- Test reset cascade: chọn đầy đủ rồi đổi Tỉnh → Quận và Phường có reset không?
- Test partial: chọn Tỉnh + Quận, không chọn Phường, rồi submit.
- Test rapid switch: đổi Tỉnh nhanh nhiều lần xem có race condition.
⚠️ Bug được cài cắm: cascade reset không hoạt động đúng, validate cho phép skip cấp, disabled state không correct, race condition.