diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index c66150e9..fb160d9c 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -18,6 +18,7 @@ class URLs { static const String chatHubUrlApi = "$chatHubUrl/api"; // new V2 apis static const String chatHubUrlChat = "$chatHubUrl/hubs/chat"; // new V2 apis static const String resetMessageCount = "$chatHubUrlApi/userChatHistory/AckMessages"; // new V2 apis + static const String unreadMessages = "$chatHubUrlApi/userChatHistory/unread-messages"; // new V2 apis static const String chatApiKey = "f53a98286f82798d588f67a7f0db19f7aebc839e"; // new V2 apis static String _host = host1; diff --git a/lib/dashboard_latest/widgets/app_bar_widget.dart b/lib/dashboard_latest/widgets/app_bar_widget.dart index 5134875a..44a15be6 100644 --- a/lib/dashboard_latest/widgets/app_bar_widget.dart +++ b/lib/dashboard_latest/widgets/app_bar_widget.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; @@ -10,6 +11,7 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/helper/utils.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/views/pages/user/notifications/notifications_page.dart'; +import 'package:test_sa/views/pages/user/notifications/unread_chat_list.dart'; import 'package:test_sa/views/widgets/dialogs/confirm_dialog.dart'; import '../../controllers/providers/api/user_provider.dart'; @@ -127,6 +129,12 @@ class AppBarWidget extends StatelessWidget { ); }), 16.width, + if (context.settingProvider.isUserFlowMedical) ...[ + Icon(Icons.mark_unread_chat_alt_outlined, color: context.isDark ? AppColor.neutral30 : AppColor.neutral20, size: 30).paddingOnly(top: 6, end: 0).onPress(() { + Navigator.of(context).push(CupertinoPageRoute(builder: (_) => UnReadChatList())); + }), + 8.width, + ], Stack( alignment: Alignment.topRight, children: [ diff --git a/lib/modules/cx_module/chat/chat_provider.dart b/lib/modules/cx_module/chat/chat_provider.dart index 8d56bcf2..0978e161 100644 --- a/lib/modules/cx_module/chat/chat_provider.dart +++ b/lib/modules/cx_module/chat/chat_provider.dart @@ -48,6 +48,7 @@ import 'package:test_sa/modules/cx_module/chat/model/chat_login_response_model.d import 'package:uuid/uuid.dart'; import 'package:flutter/material.dart' as Material; +import 'api_client.dart'; import 'chat_api_client.dart'; import 'model/chat_attachment_model.dart'; import 'model/chat_participant_model.dart'; @@ -454,6 +455,19 @@ class ChatProvider with ChangeNotifier, DiagnosticableTreeMixin { return result; } + Future getUnReadMessages(String employeeId) async { + Response response = await ApiClient().getJsonForResponse( + "${URLs.unreadMessages}?retrieveAll=true", + headers: {'x-api-key': URLs.chatApiKey, 'x-employee-number': employeeId}, + ); + if (response.statusCode == 200) { + List data = jsonDecode(response.body)["response"]; + return data.map((elemet) => ChatAttachment.fromJson(elemet)).toList(); + } else { + return []; + } + } + // void updateUserChatStatus(List? args) { // dynamic items = args!.toList(); // for (var cItem in items[0]) { @@ -616,7 +630,6 @@ class ChatProvider with ChangeNotifier, DiagnosticableTreeMixin { } } - Future onAckSeenAsync(List? parameters) async { try { if (parameters == null || parameters.isEmpty) { diff --git a/lib/views/pages/user/notifications/unread_chat_list.dart b/lib/views/pages/user/notifications/unread_chat_list.dart new file mode 100644 index 00000000..eae702c0 --- /dev/null +++ b/lib/views/pages/user/notifications/unread_chat_list.dart @@ -0,0 +1,153 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/modules/cx_module/chat/chat_provider.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; + +import '../../../widgets/loaders/no_data_found.dart'; + +class UnReadChatList extends StatelessWidget { + UnReadChatList({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const DefaultAppBar(title: "Unread Messages"), + body: FutureBuilder( + future: Provider.of(context, listen: false).getUnReadMessages(context.userProvider.user!.employeeId ?? context.userProvider.user!.username!), + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) return const CircularProgressIndicator(color: AppColor.primary10).center; + if (snapshot.data == null) return const NoDataFound().center; + + return SizedBox(); + + // List allAttachments = snapshot.data!.loanAttachments!; + // + // return Column( + // children: [ + // ListView( + // padding: const EdgeInsets.all(16), + // children: [ + // Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // Row( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // StatusLabel( + // label: snapshot.data!.loanStatusName!, + // textColor: AppColor.getRequestStatusTextColorByName(context, snapshot.data!.loanStatusName!), + // backgroundColor: AppColor.getRequestStatusColorByName(context, snapshot.data!.loanStatusName!), + // ), + // 1.width.expanded, + // Text( + // snapshot.data!.createdDate?.toServiceRequestCardFormat ?? "-", + // textAlign: TextAlign.end, + // style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), + // ), + // ], + // ), + // 12.height, + // ...requesterDetails(context, snapshot.data!), + // const Divider().defaultStyle(context), + // ...requestDetails(context, snapshot.data!), + // const Divider().defaultStyle(context), + // ...assetDetails(context, snapshot.data!), + // const Divider().defaultStyle(context), + // ...installationDetails(context, snapshot.data!), + // const Divider().defaultStyle(context), + // ...doctorDetails(context, snapshot.data!), + // const Divider().defaultStyle(context), + // ...vendorDetails(context, snapshot.data!), + // if (allAttachments.isNotEmpty) ...[ + // const Divider().defaultStyle(context), + // Text( + // "Attachments".addTranslation, + // style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + // ), + // FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList() ?? []), + // ], + // ], + // ).toShadowContainer(context, padding: 12), + // ], + // ).expanded, + // // @todo ask backend to add loanTypeValue, so we can show or hide the buttons + // if (snapshot.data?.loanTypeName == "Standard" && + // context.userProvider.isEngineer && + // (snapshot.data?.loanStatusValue == 4 || snapshot.data?.loanStatusValue == 5 || snapshot.data?.loanStatusValue == 8)) + // FooterActionButton.footerContainer( + // context: context, + // child: AppFilledButton( + // onPressed: () async { + // if (snapshot.data?.loanStatusValue == 4) { + // String comment = ""; + // context.showBottomSheet( + // Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // mainAxisSize: MainAxisSize.min, + // children: [ + // 'Estimated Date: ${snapshot.data?.installationEDD?.toAssetDetailsFormat ?? "-"}'.bodyText(context), + // 16.height, + // AppTextFormField( + // labelText: context.translation.comments, + // showSpeechToText: true, + // textInputType: TextInputType.multiline, + // labelStyle: AppTextStyles.textFieldLabelStyle, + // showWithoutDecoration: true, + // backgroundColor: context.isDarkNotListen ? AppColor.neutral20 : AppColor.neutral100, + // alignLabelWithHint: true, + // onChange: (text) { + // comment = text; + // }, + // ), + // 16.height, + // AppFilledButton( + // onPressed: () async { + // Utils.showLoading(context); + // LoanProvider loanProvider = Provider.of(context, listen: false); + // bool isSuccess = await loanProvider.loanWorkflowAction({ + // "userId": context.userProvider.user!.userID, + // "isFromMobile": true, + // "commentsFromMobile": comment, + // 'loanId': snapshot.data?.id, + // 'loanStatusId': snapshot.data?.loanStatusValue, + // }); + // Utils.hideLoading(context); + // if (isSuccess) { + // Navigator.pop(context, true); + // setState(() {}); + // } + // }, + // label: "Delivered"), + // ], + // ), + // title: "EDD & Comments", + // showCancelButton: true); + // return; + // } + // if (snapshot.data?.loanStatusValue == 5) { + // bool isSuccess = await Navigator.push(context, MaterialPageRoute(builder: (context) => InstallationFormView(loanData: snapshot.data))) ?? false; + // if (isSuccess) { + // setState(() {}); + // } + // return; + // } + // bool isSuccess = await Navigator.push(context, MaterialPageRoute(builder: (context) => PullOutDetailsPage(loanData: snapshot.data))) ?? false; + // if (isSuccess) { + // setState(() {}); + // } + // }, + // label: snapshot.data?.loanStatusValue == 4 + // ? "Delivered" + // : snapshot.data?.loanStatusValue == 5 + // ? 'Installation Report' + // : 'PullOut Report', + // ), + // ) + // ], + // ); + })); + } +}