Instruction file imported from HuynhVanMinhz/aidr (
.cursor/rules/aidr-field-validation.mdc). Copyright stays with the author.
AIDR - Field Validation
Nguyên tắc
- Mặc định validate đầy đủ mọi field người dùng nhập (required, format, length, range) trên FE và BE.
- Chỉ không validate (hoặc cho optional) khi
bussiness-system.md/ BR / UC mô tả rõ field đó không bắt buộc hoặc không ràng buộc. - BE là nguồn chặn cuối - FE validate để UX, không thay thế BE.
Form UX (FE)
-
Lỗi theo từng field - hiển thị ngay dưới
input/select/textareatương ứng. Alert trên cùng chỉ dùng cho lỗi API/server. -
Ẩn khi chưa vi phạm - lúc mở form không hiện lỗi. Chỉ hiện sau khi field không hợp lệ (blur / đổi giá trị sai / bấm submit).
-
Validate đồng thời - submit phải kiểm tra tất cả field, không dừng ở lỗi đầu tiên.
-
Nút submit
- Create:
disabledkhi form chưa chỉnh (chưa dirty), còn lỗi, hoặc thiếu field bắt buộc. - Update:
disabledkhi chưa có thay đổi (dirty) hoặc còn lỗi validation.
- Create:
-
Dùng helper chung (
tryValidateField,FormField,canSubmit*,visibleFieldErrors) thay vì chỉ 1 alert chung.
// ❌ Sai - hiện lỗi required ngay khi form trống
<p className="form-field-error">{errors.name}</p>
// ✅ Đúng - chỉ hiện khi field đã vi phạm
{visible.name && <p className="form-field-error">{visible.name}</p>}
<button disabled={!canSubmit}>Save</button>
Không làm
- Chỉ hiện 1 lỗi đầu tiên trong alert khi nhiều field sai.
- Enable nút Tạo/Lưu khi form trống hoặc chưa thay đổi (edit).
- Hiện hết lỗi required ngay lúc vào màn create/edit.