feat: Improve notification handling; enhance logging and ensure DocumentController registration before updates

This commit is contained in:
Vaibhav Surve 2025-09-18 15:16:53 +05:30
parent 1fafe77211
commit e6f028d129
3 changed files with 42 additions and 26 deletions

View File

@ -209,10 +209,11 @@ class NotificationActionHandler {
/// ---------------------- DOCUMENT HANDLER ---------------------- /// ---------------------- DOCUMENT HANDLER ----------------------
static void _handleDocumentModified(Map<String, dynamic> data) { static void _handleDocumentModified(Map<String, dynamic> data) {
late String entityTypeId; String entityTypeId;
late String entityId; String entityId;
String? documentId = data['DocumentId']; String? documentId = data['DocumentId'];
// Determine entity type and ID
if (data['Keyword'] == 'Employee_Document_Modified') { if (data['Keyword'] == 'Employee_Document_Modified') {
entityTypeId = Permissions.employeeEntity; entityTypeId = Permissions.employeeEntity;
entityId = data['EmployeeId'] ?? ''; entityId = data['EmployeeId'] ?? '';
@ -229,30 +230,43 @@ class NotificationActionHandler {
return; return;
} }
_safeControllerUpdate<DocumentController>( _logger.i(
onFound: (controller) async { "🔔 Document notification received: keyword=${data['Keyword']}, entityTypeId=$entityTypeId, entityId=$entityId, documentId=$documentId");
await controller.fetchDocuments(
entityTypeId: entityTypeId,
entityId: entityId,
reset: true,
);
},
notFoundMessage: '⚠️ DocumentController not found, cannot refresh list.',
successMessage: '✅ DocumentController refreshed from notification.',
);
if (documentId != null) { // Refresh Document List
if (Get.isRegistered<DocumentController>()) {
_safeControllerUpdate<DocumentController>(
onFound: (controller) async {
await controller.fetchDocuments(
entityTypeId: entityTypeId,
entityId: entityId,
reset: true,
);
},
notFoundMessage:
'⚠️ DocumentController not found, cannot refresh list.',
successMessage: '✅ DocumentController refreshed from notification.',
);
} else {
_logger.w('⚠️ DocumentController not registered, skipping list refresh.');
}
// Refresh Document Details (if open)
if (documentId != null && Get.isRegistered<DocumentDetailsController>()) {
_safeControllerUpdate<DocumentDetailsController>( _safeControllerUpdate<DocumentDetailsController>(
onFound: (controller) async { onFound: (controller) async {
if (controller.documentDetails.value?.data?.id == documentId) { // Refresh details regardless of current document
await controller.fetchDocumentDetails(documentId); await controller.fetchDocumentDetails(documentId);
_logger.i( _logger.i(
"✅ DocumentDetailsController refreshed for Document $documentId"); "✅ DocumentDetailsController refreshed for Document $documentId");
}
}, },
notFoundMessage: ' DocumentDetailsController not active, skipping.', notFoundMessage:
' DocumentDetailsController not active, skipping details refresh.',
successMessage: '✅ DocumentDetailsController checked for refresh.', successMessage: '✅ DocumentDetailsController checked for refresh.',
); );
} else if (documentId != null) {
_logger.w(
'⚠️ DocumentDetailsController not registered, cannot refresh document details.');
} }
} }
@ -313,7 +327,8 @@ class NotificationActionHandler {
break; break;
case 'task_updated': case 'task_updated':
await controller.fetchDashboardTasks( await controller.fetchDashboardTasks(
projectId: controller.projectController.selectedProjectId.value); projectId:
controller.projectController.selectedProjectId.value);
break; break;
case 'project_progress_update': case 'project_progress_update':
await controller.fetchProjectProgress(); await controller.fetchProjectProgress();

View File

@ -25,7 +25,8 @@ class DocumentDetailsPage extends StatefulWidget {
class _DocumentDetailsPageState extends State<DocumentDetailsPage> { class _DocumentDetailsPageState extends State<DocumentDetailsPage> {
final DocumentDetailsController controller = final DocumentDetailsController controller =
Get.put(DocumentDetailsController()); Get.find<DocumentDetailsController>();
final PermissionController permissionController = final PermissionController permissionController =
Get.find<PermissionController>(); Get.find<PermissionController>();
@override @override

View File

@ -17,9 +17,9 @@ import 'package:marco/helpers/widgets/custom_app_bar.dart';
import 'package:marco/helpers/widgets/my_confirmation_dialog.dart'; import 'package:marco/helpers/widgets/my_confirmation_dialog.dart';
import 'package:marco/helpers/widgets/my_snackbar.dart'; import 'package:marco/helpers/widgets/my_snackbar.dart';
import 'package:marco/controller/permission_controller.dart'; import 'package:marco/controller/permission_controller.dart';
import 'package:marco/controller/document/document_details_controller.dart';
import 'dart:convert'; import 'dart:convert';
class UserDocumentsPage extends StatefulWidget { class UserDocumentsPage extends StatefulWidget {
final String? entityId; final String? entityId;
final bool isEmployee; final bool isEmployee;
@ -38,7 +38,8 @@ class _UserDocumentsPageState extends State<UserDocumentsPage> {
final DocumentController docController = Get.put(DocumentController()); final DocumentController docController = Get.put(DocumentController());
final PermissionController permissionController = final PermissionController permissionController =
Get.find<PermissionController>(); Get.find<PermissionController>();
final DocumentDetailsController controller =
Get.put(DocumentDetailsController());
String get entityTypeId => widget.isEmployee String get entityTypeId => widget.isEmployee
? Permissions.employeeEntity ? Permissions.employeeEntity
: Permissions.projectEntity; : Permissions.projectEntity;
@ -586,8 +587,7 @@ class _UserDocumentsPageState extends State<UserDocumentsPage> {
isScrollControlled: true, isScrollControlled: true,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
builder: (_) => DocumentUploadBottomSheet( builder: (_) => DocumentUploadBottomSheet(
isEmployee: isEmployee: widget.isEmployee,
widget.isEmployee,
onSubmit: (data) async { onSubmit: (data) async {
final success = await uploadController.uploadDocument( final success = await uploadController.uploadDocument(
name: data["name"], name: data["name"],