136 lines
3.8 KiB
Dart
136 lines
3.8 KiB
Dart
// lib\app\modules\notification\controllers\notification_controller.dart
|
|
import 'package:get/get.dart';
|
|
|
|
class NotificationItem {
|
|
final String id;
|
|
final String title;
|
|
final String message;
|
|
final String room;
|
|
final String patientName;
|
|
final DateTime time;
|
|
final String deviceId;
|
|
final bool isRead;
|
|
|
|
NotificationItem({
|
|
required this.id,
|
|
required this.title,
|
|
required this.message,
|
|
required this.room,
|
|
required this.deviceId,
|
|
required this.patientName,
|
|
required this.time,
|
|
this.isRead = false,
|
|
});
|
|
|
|
NotificationItem copyWith({
|
|
String? id,
|
|
String? title,
|
|
String? message,
|
|
String? room,
|
|
String? patientName,
|
|
DateTime? time,
|
|
String? deviceId,
|
|
bool? isRead,
|
|
}) {
|
|
return NotificationItem(
|
|
id: id ?? this.id,
|
|
title: title ?? this.title,
|
|
message: message ?? this.message,
|
|
room: room ?? this.room,
|
|
deviceId: deviceId ?? this.deviceId,
|
|
patientName: patientName ?? this.patientName,
|
|
time: time ?? this.time,
|
|
isRead: isRead ?? this.isRead,
|
|
);
|
|
}
|
|
}
|
|
|
|
class NotificationController extends GetxController {
|
|
final selectedTab = 0.obs;
|
|
|
|
final _allNotifications = <NotificationItem>[
|
|
NotificationItem(
|
|
id: '1',
|
|
title: 'Peringatan!!',
|
|
message: 'Aliran infus telah terhenti. Segera periksa pasien dan ganti selang infus.',
|
|
room: 'MAWAR 002',
|
|
deviceId: 'SI001',
|
|
patientName: 'Mrs Shinta',
|
|
time: DateTime.now().subtract(const Duration(minutes: 5)),
|
|
isRead: false,
|
|
),
|
|
NotificationItem(
|
|
id: '2',
|
|
title: 'Peringatan!!',
|
|
message: 'Aliran infus telah terhenti. Segera periksa pasien dan ganti selang infus.',
|
|
room: 'MAWAR 003',
|
|
deviceId: 'SI002',
|
|
patientName: 'Mr Budi',
|
|
time: DateTime.now().subtract(const Duration(hours: 2)),
|
|
isRead: false,
|
|
),
|
|
NotificationItem(
|
|
id: '3',
|
|
title: 'Peringatan!!',
|
|
message: 'Aliran infus telah terhenti. Segera periksa pasien dan ganti selang infus.',
|
|
room: 'MAWAR 004',
|
|
deviceId: 'SI003',
|
|
patientName: 'Mrs Ani',
|
|
time: DateTime.now().subtract(const Duration(hours: 5)),
|
|
isRead: true,
|
|
),
|
|
NotificationItem(
|
|
id: '4',
|
|
title: 'Peringatan!!',
|
|
message: 'Aliran infus telah terhenti. Segera periksa pasien dan ganti selang infus.',
|
|
room: 'MAWAR 005',
|
|
deviceId: 'SI004',
|
|
patientName: 'Mr Doni',
|
|
time: DateTime.now().subtract(const Duration(days: 1)),
|
|
isRead: true,
|
|
),
|
|
].obs;
|
|
|
|
// Computed property untuk notifikasi yang difilter
|
|
List<NotificationItem> get notifications {
|
|
if (selectedTab.value == 0) {
|
|
// Tab "Baru" - notifikasi yang belum dibaca
|
|
return _allNotifications.where((notif) => !notif.isRead).toList();
|
|
} else {
|
|
// Tab "Sudah dibaca" - notifikasi yang sudah dibaca
|
|
return _allNotifications.where((notif) => notif.isRead).toList();
|
|
}
|
|
}
|
|
|
|
void changeTab(int index) {
|
|
selectedTab.value = index;
|
|
}
|
|
|
|
void deleteNotification(String id) {
|
|
_allNotifications.removeWhere((notif) => notif.id == id);
|
|
}
|
|
|
|
void markAsRead(String id) {
|
|
final index = _allNotifications.indexWhere((notif) => notif.id == id);
|
|
if (index != -1) {
|
|
_allNotifications[index] = _allNotifications[index].copyWith(isRead: true);
|
|
_allNotifications.refresh();
|
|
}
|
|
}
|
|
|
|
String getTimeAgo(DateTime time) {
|
|
final difference = DateTime.now().difference(time);
|
|
if (difference.inMinutes < 60) {
|
|
return '${difference.inMinutes}min ago';
|
|
} else if (difference.inHours < 24) {
|
|
return '${difference.inHours}h ago';
|
|
} else {
|
|
return '${difference.inDays}d ago';
|
|
}
|
|
}
|
|
|
|
// Method untuk menghitung jumlah notifikasi baru
|
|
int get unreadCount {
|
|
return _allNotifications.where((notif) => !notif.isRead).length;
|
|
}
|
|
} |