diff --git a/assets/lang/ar.json b/assets/lang/ar.json index a13c65d..5af5bea 100644 --- a/assets/lang/ar.json +++ b/assets/lang/ar.json @@ -146,7 +146,11 @@ "chatWithDoctor": "الدردشة مع الطبيب", "chatsDescription": "عرض وإدارة الدردشات الخاصة بك.", - "noReminders": "لا توجد تذكيرات" + "noReminders": "لا توجد تذكيرات", + + "missed": "فائت", + "today": "اليوم", + "activation": "التفعيل" } diff --git a/assets/lang/en.json b/assets/lang/en.json index d327efd..a4c47f6 100644 --- a/assets/lang/en.json +++ b/assets/lang/en.json @@ -144,6 +144,10 @@ "chatWithDoctor": "Chat with Doctor", "chatsDescription": "View your chat with a doctor.", - "noReminders": "No Reminders" + "noReminders": "No Reminders", + + "missed": "Missed", + "today": "Today", + "activation": "Activation" } \ No newline at end of file diff --git a/lib/features/main/home/ui/widgets/reminder_list_tile.dart b/lib/features/main/home/ui/widgets/reminder_list_tile.dart index 420bbaa..eb8fdb6 100644 --- a/lib/features/main/home/ui/widgets/reminder_list_tile.dart +++ b/lib/features/main/home/ui/widgets/reminder_list_tile.dart @@ -74,7 +74,11 @@ class _ReminderListTileState extends State { ); } - Widget _buildTime(BuildContext context) { + Widget _buildTime( + BuildContext context, + {required String date, + String? time,} + ) { return Container( width: double.infinity, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), @@ -97,7 +101,7 @@ class _ReminderListTileState extends State { color: context.colorScheme.scrim, ), Text( - '${widget.reminder.date}', + date, style: AppTextStyle.labelLarge(context).copyWith( color: context.colorScheme.scrim, ), @@ -106,25 +110,27 @@ class _ReminderListTileState extends State { ), ), const SizedBox(width: 24.0), - Expanded( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - mainAxisSize: MainAxisSize.max, - children: [ - Icon( - FontAwesomeIcons.solidClock, - size: 22, - color: context.colorScheme.scrim, - ), - Text( - '${widget.reminder.getNextDoseTime()?.format('hh:mm a')}', - style: AppTextStyle.labelLarge(context).copyWith( - color: context.colorScheme.scrim, + time != null + ? Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + mainAxisSize: MainAxisSize.max, + children: [ + Icon( + FontAwesomeIcons.solidClock, + size: 22, + color: context.colorScheme.scrim, + ), + Text( + time, + style: AppTextStyle.labelLarge(context).copyWith( + color: context.colorScheme.scrim, + ), + ), + ], ), - ), - ], - ), - ), + ) + : const SizedBox.shrink(), ], ), ); @@ -167,7 +173,16 @@ class _ReminderListTileState extends State { children: [ _buildInfo(context), const SizedBox(height: 20.0), - _buildTime(context), + widget.reminder.isActivationReminder() + ? _buildTime( + context, + date: widget.reminder.activationDate, + ) + : _buildTime( + context, + date: widget.reminder.nextDoseDate, + time: widget.reminder.getNextDoseTime()?.format('hh:mm a'), + ), ], ), ), diff --git a/lib/features/main/home/ui/widgets/reminders_container.dart b/lib/features/main/home/ui/widgets/reminders_container.dart index 55c953d..9e79bbe 100644 --- a/lib/features/main/home/ui/widgets/reminders_container.dart +++ b/lib/features/main/home/ui/widgets/reminders_container.dart @@ -86,13 +86,13 @@ class _RemindersContainerState extends State controller: tabBarController, tabs: [ Tab( - text: AppLocalizations.of(context).translate('Missed'), + text: AppLocalizations.of(context).translate('missed'), ), Tab( - text: AppLocalizations.of(context).translate('Today'), + text: AppLocalizations.of(context).translate('today'), ), Tab( - text: AppLocalizations.of(context).translate('Coming'), + text: AppLocalizations.of(context).translate('activation'), ), ], splashBorderRadius: BorderRadius.circular(12), @@ -101,7 +101,7 @@ class _RemindersContainerState extends State tabAlignment: TabAlignment.center, indicatorSize: TabBarIndicatorSize.label, enableFeedback: false, - labelPadding: const EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), + labelPadding: const EdgeInsetsDirectional.fromSTEB(14, 0, 14, 0), labelStyle: AppTextStyle.titleLarge(context).copyWith( fontWeight: FontWeight.w900, ), @@ -118,11 +118,11 @@ class _RemindersContainerState extends State controller: tabBarController, children: [ _buildReminders(context, - bloc.filterReminders(widget.reminders, ReminderTime.previous)), + bloc.filterReminders(widget.reminders, ReminderType.previous)), _buildReminders(context, - bloc.filterReminders(widget.reminders, ReminderTime.today)), + bloc.filterReminders(widget.reminders, ReminderType.today)), _buildReminders(context, - bloc.filterReminders(widget.reminders, ReminderTime.coming)), + bloc.filterReminders(widget.reminders, ReminderType.activation)), ], ); } diff --git a/lib/features/main/reminders/data/models/reminder.dart b/lib/features/main/reminders/data/models/reminder.dart index 6ba1c15..44f5ce5 100644 --- a/lib/features/main/reminders/data/models/reminder.dart +++ b/lib/features/main/reminders/data/models/reminder.dart @@ -41,28 +41,38 @@ class Reminder { required this.prescriptionId, }); - bool isToday() { + bool isNextDoseToday() { return getNextDoseTime()?.day == DateTime.now().day && getNextDoseTime()?.month == DateTime.now().month && getNextDoseTime()?.year == DateTime.now().year; } - bool isBeforeToday() { + bool isNextDoseBeforeToday() { return getNextDoseTime() ?.isBefore(DateTime.now().subtract(const Duration(days: 1))) ?? false; } - bool isAfterToday() { + bool isNextDoseAfterToday() { return getNextDoseTime()?.isAfter(DateTime.now()) ?? false; } + bool isActivationReminder() { + return startDateActivate != null; + } + DateTime? getNextDoseTime() { return nextDoseTime != null ? DateTime.parse(nextDoseTime!).toLocal() : null; } + DateTime? getActivationTime() { + return startDateActivate != null + ? DateTime.parse(startDateActivate!).toLocal() + : null; + } + // ----------------- Drug Name ----------------- // get drugFirstName => drugName.split(' ').first; @@ -75,14 +85,24 @@ class Reminder { // ----------------- Date ----------------- // - get dayOfDate => getNextDoseTime()?.day; - get monthOfDate => getNextDoseTime()?.month; + get dayOfNextDoseTimeDate => getNextDoseTime()?.day; + get monthOfNextDoseTimeDate => getNextDoseTime()?.month; + + get nextDoseDate { + // Return the date in the format of 'dd MMM' + return "${dayOfNextDoseTimeDate.toString().padLeft(2, '0')}" + "/" + "${monthOfNextDoseTimeDate.toString().padLeft(2, '0')}"; + } + + get dayOfActivationTimeDate => getActivationTime()?.day; + get monthOfActivationTimeDate => getActivationTime()?.month; - get date { + get activationDate { // Return the date in the format of 'dd MMM' - return "${dayOfDate.toString().padLeft(2, '0')}" + return "${dayOfActivationTimeDate.toString().padLeft(2, '0')}" "/" - "${monthOfDate.toString().padLeft(2, '0')}"; + "${monthOfActivationTimeDate.toString().padLeft(2, '0')}"; } // ----------------- Time ----------------- // diff --git a/lib/features/main/reminders/data/repo/reminders_repo.dart b/lib/features/main/reminders/data/repo/reminders_repo.dart index 57b5fe1..f17a29e 100644 --- a/lib/features/main/reminders/data/repo/reminders_repo.dart +++ b/lib/features/main/reminders/data/repo/reminders_repo.dart @@ -6,11 +6,12 @@ import '../../../../../core/networking/api/api_result.dart'; import '../../../../../core/networking/api/api_service.dart'; import '../models/reminder.dart'; -enum ReminderTime { +enum ReminderType { all, previous, today, coming, + activation, } class RemindersRepo { @@ -20,8 +21,7 @@ class RemindersRepo { Future>> getRemindersList() async { try { - final reminders = - await _apiService.getReminderList(); + final reminders = await _apiService.getReminderList(); return ApiResult.success(reminders); } catch (error) { getIt().e(error); @@ -42,20 +42,26 @@ class RemindersRepo { } List filterReminders( - List reminders, ReminderTime filter) { + List reminders, ReminderType filter) { List filteredReminders = []; - if (filter == ReminderTime.all) { + if (filter == ReminderType.all) { filteredReminders = reminders; - } else if (filter == ReminderTime.previous) { + } else if (filter == ReminderType.previous) { + filteredReminders = reminders + .where((reminder) => reminder.isNextDoseBeforeToday()) + .toList(); + } else if (filter == ReminderType.today) { filteredReminders = - reminders.where((reminder) => reminder.isBeforeToday()).toList(); - } else if (filter == ReminderTime.today) { - filteredReminders = - reminders.where((reminder) => reminder.isToday()).toList(); - } else if (filter == ReminderTime.coming) { - filteredReminders = - reminders.where((reminder) => reminder.isAfterToday()).toList(); + reminders.where((reminder) => reminder.isNextDoseToday()).toList(); + } else if (filter == ReminderType.coming) { + filteredReminders = reminders + .where((reminder) => reminder.isNextDoseAfterToday()) + .toList(); + } else if (filter == ReminderType.activation) { + filteredReminders = reminders + .where((reminder) => reminder.isActivationReminder()) + .toList(); } return filteredReminders; diff --git a/lib/features/main/reminders/logic/reminders_cubit.dart b/lib/features/main/reminders/logic/reminders_cubit.dart index d1818f2..2a64daa 100644 --- a/lib/features/main/reminders/logic/reminders_cubit.dart +++ b/lib/features/main/reminders/logic/reminders_cubit.dart @@ -1,4 +1,5 @@ import 'package:bloc/bloc.dart'; +import 'package:logger/logger.dart'; import '../../../../core/helpers/errors.dart'; import '../data/models/reminder.dart'; import '../data/repo/reminders_repo.dart'; @@ -15,6 +16,7 @@ class RemindersCubit extends Cubit { // Get data final response = await _remindersRepo.getRemindersList(); + response.when( success: (data) { emit(RemindersState.remindersSuccess(data)); @@ -50,7 +52,7 @@ class RemindersCubit extends Cubit { } List filterReminders( - List reminders, ReminderTime filter) { + List reminders, ReminderType filter) { final filteredReminders = _remindersRepo.filterReminders(reminders, filter); return filteredReminders; }