feat(notifications): day sheet notification types

Add daySheetId field to NotificationItem model (Brick-managed), extract
notificationTitle/notificationIcon to top-level testable functions, add
five day-sheet notification cases, and wire tap/banner routing for
day-sheet detail and approvals tab.
Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-09-28 14:54:19 +08:00
parent 54ce528b02
commit 5af0ce62d9
8 changed files with 219 additions and 38 deletions
@@ -23,6 +23,9 @@ Future<NotificationItem> _$NotificationItemFromSupabase(
? null
: data['announcement_id'] as String?,
messageId: data['message_id'] == null ? null : data['message_id'] as int?,
daySheetId: data['day_sheet_id'] == null
? null
: data['day_sheet_id'] as String?,
type: data['type'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
readAt: data['read_at'] == null
@@ -49,6 +52,7 @@ Future<Map<String, dynamic>> _$NotificationItemToSupabase(
'it_service_request_id': instance.itServiceRequestId,
'announcement_id': instance.announcementId,
'message_id': instance.messageId,
'day_sheet_id': instance.daySheetId,
'type': instance.type,
'created_at': instance.createdAt.toIso8601String(),
'read_at': instance.readAt?.toIso8601String(),
@@ -77,6 +81,9 @@ Future<NotificationItem> _$NotificationItemFromSqlite(
? null
: data['announcement_id'] as String?,
messageId: data['message_id'] == null ? null : data['message_id'] as int?,
daySheetId: data['day_sheet_id'] == null
? null
: data['day_sheet_id'] as String?,
type: data['type'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
readAt: data['read_at'] == null
@@ -103,6 +110,7 @@ Future<Map<String, dynamic>> _$NotificationItemToSqlite(
'it_service_request_id': instance.itServiceRequestId,
'announcement_id': instance.announcementId,
'message_id': instance.messageId,
'day_sheet_id': instance.daySheetId,
'type': instance.type,
'created_at': instance.createdAt.toIso8601String(),
'read_at': instance.readAt?.toIso8601String(),
@@ -160,6 +168,10 @@ class NotificationItemAdapter
association: false,
columnName: 'message_id',
),
'daySheetId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'day_sheet_id',
),
'type': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'type',
@@ -245,6 +257,12 @@ class NotificationItemAdapter
iterable: false,
type: int,
),
'daySheetId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'day_sheet_id',
iterable: false,
type: String,
),
'type': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'type',