Cấu hình và các quy tắc trong tab Calendar (v5jun261105am)
Chi tiết vềCấu hình (Configurations) và Các quy tắc (Rules) dành cho tab Calendar (Lịch):
1. Cấu hình (Configurations)
1.1. Cấu hình Hiển thị (Display Settings)
- Giao diện mặc định (Default View): Cho phép người dùng chọn giao diện mặc định khi mở tab Lịch (Tháng - Month, Tuần - Week, hoặc Ngày - Day).
- Ngày bắt đầu tuần (Start of Week): Tự động theo setting của hệ thống iOS (thường là Chủ nhật hoặc Thứ 2), hoặc cho phép người dùng ghi đè (override) trong cài đặt app.
- Khung giờ làm việc (Working Hours): (Tùy chọn) Highlight khung giờ làm việc tiêu chuẩn (ví dụ: 08:00 - 18:00) trong chế độ xem Ngày/Tuần để người dùng dễ tập trung.
1.2. Nguồn dữ liệu (Data Sources)
Tab Lịch sẽ là nơi tổng hợp dữ liệu từ 3 nguồn chính:
- Apple Calendar (EventKit): Các sự kiện hiện có trên lịch hệ thống của thiết bị (iCloud, Google Calendar, Outlook... đã được đồng bộ vào iPhone/Mac).
- Tasks (Nhiệm vụ): Các Task có thiết lập
dueDate(Ngày đến hạn) hoặcreminder(Nhắc nhở) từ tab Task. - Notes (Ghi chú): Các Ghi chú đã được người dùng ghim/thêm vào lịch (hiện tại app đang dùng
calendarEventIDđể theo dõi).
1.3. Cấu hình Phân loại & Màu sắc (Color Coding)
- Apple Calendar Events: Giữ nguyên màu sắc gốc của sự kiện từ EventKit (
calendar.cgColor). - Tasks: Sử dụng màu sắc riêng biệt (VD: Màu xanh dương/đỏ tùy mức độ ưu tiên) hoặc hiển thị kèm checkbox
[ ]để phân biệt với sự kiện thường. - Notes: Hiển thị biểu tượng (icon) cuốn sổ hoặc thẻ màu đặc trưng đã được lưu trong
calendarColorHexcủa Note.
2. Các Quy tắc (Business Rules & Logic)
2.1. Quy tắc Quyền truy cập (Permissions)
- Yêu cầu quyền (Prompting): Khi truy cập tab Lịch lần đầu, ứng dụng phải gọi
hasCalendarAccess()để kiểm tra và xin quyềnNSCalendarsUsageDescription/NSCalendarsFullAccessUsageDescription. - Xử lý từ chối quyền (Denied/Restricted State): Nếu người dùng từ chối, tab Lịch vẫn hiển thị nhưng chỉ hiện Tasks và Notes nội bộ của SonNG. Hiển thị một banner nhỏ (Call-to-action) gợi ý người dùng vào Settings để cấp quyền Lịch nhằm trải nghiệm đầy đủ.
2.2. Quy tắc Đồng bộ (Synchronization Rules)
- Từ SonNG sang Apple Calendar (Ghi/Write): Khi người dùng tạo sự kiện/task mới có chọn "Thêm vào lịch", hệ thống sẽ dùng
addNoteToCalendarđể đẩy dữ liệu lên Apple Calendar. Mỗi Note/Task được cấp mộtcalendarEventIDđể tránh tạo trùng lặp. - Từ Apple Calendar về SonNG (Đọc/Read): Chỉ hiển thị (Read-only view). Nếu người dùng muốn chỉnh sửa sự kiện của Apple Calendar, hệ thống sẽ mở pop-up chỉnh sửa của hệ thống (EKEventEditViewController) hoặc điều hướng sang app Lịch mặc định.
- Xóa (Deletion): Nếu xóa một Note/Task trong ứng dụng, có hộp thoại hỏi: "Bạn có muốn xóa sự kiện này khỏi Apple Calendar không?".
2.3. Quy tắc Hiển thị & Sắp xếp (Display & Sorting Rules)
- Sự kiện cả ngày (All-day events): Được ưu tiên ghim ở trên cùng của giao diện Ngày/Tuần.
- Xung đột thời gian (Time Conflicts): Nếu có nhiều sự kiện/task trùng giờ, giao diện Ngày/Tuần sẽ chia nhỏ cột (split columns) để hiển thị song song mà không che khuất nhau.
- Quá hạn (Overdue Tasks): Các Task đã quá hạn sẽ hiện màu đỏ ở ngày hiện tại (Today) như một lời nhắc nhở, bất kể ngày gốc của nó là ngày nào.
2.4. Quy tắc Tương tác (Interactions)
- Chạm nhanh (Tap): Chạm vào sự kiện/task để xem chi tiết (Mở bottom sheet hoặc popup).
- Chạm giữ (Long Press):
- Tại một ô trống: Tạo nhanh một Task/Note/Event mới tại khung giờ hoặc ngày đó.
- Tại một sự kiện: Hiện Context Menu (Sửa, Xóa, Đổi màu).
- Kéo thả (Drag & Drop): Hỗ trợ kéo một Task hoặc Note từ ngày này sang ngày khác (hoặc giờ khác) để tự động cập nhật lại
dueDatehoặc thời gian sự kiện. - Đánh dấu hoàn thành (Checkbox): Với các mục là Task, cho phép tick hoàn thành trực tiếp ngay trên giao diện lịch mà không cần mở chi tiết.
Bạn có muốn tôi điều chỉnh hoặc bổ sung thêm quy tắc nào đặc thù riêng cho flow làm việc hiện tại của bạn không? Hoặc nếu bạn đồng ý, chúng ta có thể chuyển sang bước triển khai các cấu hình và quy tắc này vào code.