From e2e49089807b41d073abf1bf06e4e2ccf71a1978 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 11 Mar 2025 10:54:44 +0200 Subject: [PATCH 1/7] Redesign Access Package --- .../access_review/mih_access.dart | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Frontend/lib/mih_packages/access_review/mih_access.dart diff --git a/Frontend/lib/mih_packages/access_review/mih_access.dart b/Frontend/lib/mih_packages/access_review/mih_access.dart new file mode 100644 index 00000000..a988d593 --- /dev/null +++ b/Frontend/lib/mih_packages/access_review/mih_access.dart @@ -0,0 +1,68 @@ +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/access_review/patient_access_review.dart'; +import 'package:flutter/material.dart'; + +class MihAccess extends StatefulWidget { + final AppUser signedInUser; + const MihAccess({ + super.key, + required this.signedInUser, + }); + + @override + State createState() => _MihAccessState(); +} + +class _MihAccessState extends State { + int _selcetedIndex = 0; + @override + Widget build(BuildContext context) { + return MihApp( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + selectedbodyIndex: _selcetedIndex, + onIndexChange: (newValue) { + setState(() { + _selcetedIndex = newValue; + }); + print("Index: $_selcetedIndex"); + }, + ); + } + + MihAppAction getAction() { + return MihAppAction( + icon: const Icon(Icons.arrow_back), + iconSize: 35, + onTap: () { + Navigator.of(context).pop(); + }, + ); + } + + MihAppTools getTools() { + Map temp = {}; + temp[const Icon(Icons.people)] = () { + setState(() { + _selcetedIndex = 0; + }); + }; + return MihAppTools( + tools: temp, + selcetedIndex: _selcetedIndex, + ); + } + + List getToolBody() { + List toolBodies = [ + MihAccessRequest( + signedInUser: widget.signedInUser, + ), + ]; + return toolBodies; + } +} From afc9573ed3fa3650791d5c43bdc83dca1276ed87 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 11 Mar 2025 10:54:57 +0200 Subject: [PATCH 2/7] remove space --- Frontend/lib/mih_packages/about_mih/about_mih.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/Frontend/lib/mih_packages/about_mih/about_mih.dart b/Frontend/lib/mih_packages/about_mih/about_mih.dart index 5944a259..474c0e5a 100644 --- a/Frontend/lib/mih_packages/about_mih/about_mih.dart +++ b/Frontend/lib/mih_packages/about_mih/about_mih.dart @@ -71,7 +71,6 @@ class _AboutMihState extends State { _selcetedIndex = 2; }); }; - return MihAppTools( tools: temp, selcetedIndex: _selcetedIndex, From b7a0d691f504bd3ea7a4baf90bd451fa60d81a9a Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 11 Mar 2025 10:55:13 +0200 Subject: [PATCH 3/7] Updatre Tile Name to MIH Access --- Frontend/lib/mih_packages/mih_home/mih_home.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Frontend/lib/mih_packages/mih_home/mih_home.dart b/Frontend/lib/mih_packages/mih_home/mih_home.dart index f12a6d47..93d66744 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_home.dart +++ b/Frontend/lib/mih_packages/mih_home/mih_home.dart @@ -307,7 +307,7 @@ class _MIHHomeState extends State { arguments: widget.signedInUser, ); }, - tileName: "Access", + tileName: "MIH Access", tileIcon: Center( child: FaIcon( FontAwesomeIcons.userCheck, From f9dd5e3e867803a6a9bf787e28f9db32ca52ff45 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 11 Mar 2025 10:59:04 +0200 Subject: [PATCH 4/7] update route to /mih-access --- Frontend/lib/mih_apis/mih_api_calls.dart | 6 +++--- Frontend/lib/mih_apis/mih_notification_apis.dart | 4 ++-- Frontend/lib/mih_packages/mih_home/mih_home.dart | 4 ++-- .../builder/build_patient_access_list.dart | 2 +- .../patient_profile/builder/build_patient_list.dart | 2 +- .../builder/build_patient_queue_list.dart | 6 +++--- .../list_builders/build_mih_patient_search_list.dart | 2 +- Frontend/lib/mih_router/routeGenerator.dart | 10 ++++++---- 8 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Frontend/lib/mih_apis/mih_api_calls.dart b/Frontend/lib/mih_apis/mih_api_calls.dart index e8020fce..06d277f1 100644 --- a/Frontend/lib/mih_apis/mih_api_calls.dart +++ b/Frontend/lib/mih_apis/mih_api_calls.dart @@ -258,7 +258,7 @@ class MIHApiCalls { /// AppUser signedInUser, /// BuildContext context, /// - /// Returns void (on success 200 navigate to /access-review ). + /// Returns void (on success 200 navigate to /mih-access ). static Future updatePatientAccessAPICall( String business_id, String business_name, @@ -290,7 +290,7 @@ class MIHApiCalls { Navigator.of(context).pop(); Navigator.of(context).pop(); Navigator.of(context).pushNamed( - '/access-review', + '/mih-access', arguments: signedInUser, ); String message = ""; @@ -314,7 +314,7 @@ class MIHApiCalls { /// String app_id, /// BuildContext context, /// - /// Returns void (on success 200 navigate to /access-review ). + /// Returns void (on success 200 navigate to /mih-access ). static Future reapplyPatientAccessAPICall( String business_id, String app_id, diff --git a/Frontend/lib/mih_apis/mih_notification_apis.dart b/Frontend/lib/mih_apis/mih_notification_apis.dart index ab84d871..ffeafaa3 100644 --- a/Frontend/lib/mih_apis/mih_notification_apis.dart +++ b/Frontend/lib/mih_apis/mih_notification_apis.dart @@ -36,7 +36,7 @@ class MihNotificationApis { "notification_type": "Forever Access Request", "notification_message": "A new Forever Access Request has been sent by $business_name in order to access your Patient Profile. Please review request.", - "action_path": "/access-review", + "action_path": "/mih-access", }), ); if (response.statusCode == 201) { @@ -83,7 +83,7 @@ class MihNotificationApis { "notification_type": "Re-applying for Access", "notification_message": "${args.business!.Name} is re-applying for access to your Patient Profile. Please review request.", - "action_path": "/access-review", + "action_path": "/mih-access", }), ); if (response.statusCode == 201) { diff --git a/Frontend/lib/mih_packages/mih_home/mih_home.dart b/Frontend/lib/mih_packages/mih_home/mih_home.dart index 93d66744..72e60154 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_home.dart +++ b/Frontend/lib/mih_packages/mih_home/mih_home.dart @@ -303,7 +303,7 @@ class _MIHHomeState extends State { videoID: "", onTap: () { Navigator.of(context).pushNamed( - '/access-review', + '/mih-access', arguments: widget.signedInUser, ); }, @@ -383,7 +383,7 @@ class _MIHHomeState extends State { // tileList.add(MIHTile( // onTap: () { // Navigator.of(context).pushNamed( - // '/access-review', + // '/mih-access', // arguments: widget.signedInUser, // ); // }, diff --git a/Frontend/lib/mih_packages/patient_profile/builder/build_patient_access_list.dart b/Frontend/lib/mih_packages/patient_profile/builder/build_patient_access_list.dart index cb87a3d9..250839fd 100644 --- a/Frontend/lib/mih_packages/patient_profile/builder/build_patient_access_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/builder/build_patient_access_list.dart @@ -99,7 +99,7 @@ class _BuildPatientsListState extends State { "notification_type": "New Appointment Booked", "notification_message": "A new Appointment has been booked by ${widget.arguments.business!.Name} for the ${dateController.text} ${timeController.text}. Please approve the Access Review request.", - "action_path": "/access-review", + "action_path": "/mih-access", }), ); if (response.statusCode == 201) { diff --git a/Frontend/lib/mih_packages/patient_profile/builder/build_patient_list.dart b/Frontend/lib/mih_packages/patient_profile/builder/build_patient_list.dart index 0631d825..03d3ccb6 100644 --- a/Frontend/lib/mih_packages/patient_profile/builder/build_patient_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/builder/build_patient_list.dart @@ -139,7 +139,7 @@ class _BuildPatientsListState extends State { "notification_type": "New Appointment Booked", "notification_message": "A new Appointment has been booked by ${widget.arguments.business!.Name} for the ${dateController.text} ${timeController.text}. Please approve the Access Review request.", - "action_path": "/access-review", + "action_path": "/mih-access", }), ); if (response.statusCode == 201) { diff --git a/Frontend/lib/mih_packages/patient_profile/builder/build_patient_queue_list.dart b/Frontend/lib/mih_packages/patient_profile/builder/build_patient_queue_list.dart index e3ba97dc..bdd795bd 100644 --- a/Frontend/lib/mih_packages/patient_profile/builder/build_patient_queue_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/builder/build_patient_queue_list.dart @@ -325,7 +325,7 @@ class _BuildPatientsListState extends State { "notification_type": "Appointment Cancelled", "notification_message": "Your appointment with ${widget.business!.Name} for the ${widget.patientQueue[index].date_time.replaceAll("T", " ")} has been cancelled.", - "action_path": "/access-review", + "action_path": "/mih-access", }), ); if (response.statusCode == 201) { @@ -361,7 +361,7 @@ class _BuildPatientsListState extends State { "notification_type": "Rescheduled Appointment", "notification_message": "Your appointment with ${widget.business!.Name} for the ${widget.patientQueue[index].date_time.replaceAll("T", " ").substring(0, widget.patientQueue[index].date_time.length - 3)} has been rescheduled to the ${dateController.text} ${timeController.text}.", - "action_path": "/access-review", + "action_path": "/mih-access", }), ); if (response.statusCode == 201) { @@ -397,7 +397,7 @@ class _BuildPatientsListState extends State { // "notification_type": "Access Extension Request", // "notification_message": // "${widget.business!.Name} - access expiry date extension for appointment: ${widget.patientQueue[index].date_time.split("T")[0]}. Expiry Date: from ${widget.patientQueue[index].revoke_date.split("T")[0]} to ${revokeDate.split(" ")[0]}.", - // "action_path": "/access-review", + // "action_path": "/mih-access", // }), // ); // if (response.statusCode == 201) { diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/list_builders/build_mih_patient_search_list.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/list_builders/build_mih_patient_search_list.dart index 43b54599..623f14b5 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_manager/list_builders/build_mih_patient_search_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_manager/list_builders/build_mih_patient_search_list.dart @@ -100,7 +100,7 @@ class _BuildPatientsListState extends State { "notification_type": "New Appointment Booked", "notification_message": "A new Appointment has been booked by ${widget.business!.Name} for the ${dateController.text} ${timeController.text}. Please approve the Access Review request.", - "action_path": "/access-review", + "action_path": "/mih-access", }), ); if (response.statusCode == 201) { diff --git a/Frontend/lib/mih_router/routeGenerator.dart b/Frontend/lib/mih_router/routeGenerator.dart index 8b2c1b77..d47fc6e1 100644 --- a/Frontend/lib/mih_router/routeGenerator.dart +++ b/Frontend/lib/mih_router/routeGenerator.dart @@ -2,6 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/test/package_te import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/about_mih.dart'; import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/mih_policy_tos_ext/mih_privacy_polocy_external.dart'; import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/mih_policy_tos_ext/mih_terms_of_service_external.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/access_review/mih_access.dart'; import 'package:Mzansi_Innovation_Hub/mih_packages/calculator/mih_calculator.dart'; import 'package:Mzansi_Innovation_Hub/mih_packages/calendar/mzansi_calendar.dart'; import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_ai/mzansi_ai.dart'; @@ -23,8 +24,6 @@ import '../mih_packages/authentication/forgot_password.dart'; import '../mih_packages/authentication/reset_password.dart'; import '../mih_packages/patient_profile/full_screen_file.dart'; import '../mih_packages/manage_business/manage_business_profile.dart'; -import '../mih_packages/access_review/patient_access_review.dart'; - import '../mih_packages/patient_profile/patient_view.dart'; import '../mih_packages/manage_business/profile_business_add.dart'; import '../mih_packages/manage_business/business_details.dart'; @@ -214,14 +213,17 @@ class RouteGenerator { //=============================================================== // Access Review Page - case '/access-review': + case '/mih-access': if (args is AppUser) { //print("route generator: $args"); return MaterialPageRoute( settings: settings, - builder: (_) => PatientAccessRequest( + builder: (_) => MihAccess( signedInUser: args, ), + // PatientAccessRequest( + // signedInUser: args, + // ), ); } return _errorRoute(); From 1fdccbb31765dcf50a57bb828820db27d33f8d35 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 11 Mar 2025 10:59:19 +0200 Subject: [PATCH 5/7] create new app tool --- ...s_review.dart => mih_access_requests.dart} | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) rename Frontend/lib/mih_packages/access_review/{patient_access_review.dart => mih_access_requests.dart} (90%) diff --git a/Frontend/lib/mih_packages/access_review/patient_access_review.dart b/Frontend/lib/mih_packages/access_review/mih_access_requests.dart similarity index 90% rename from Frontend/lib/mih_packages/access_review/patient_access_review.dart rename to Frontend/lib/mih_packages/access_review/mih_access_requests.dart index 29009aae..0b22fc4c 100644 --- a/Frontend/lib/mih_packages/access_review/patient_access_review.dart +++ b/Frontend/lib/mih_packages/access_review/mih_access_requests.dart @@ -1,31 +1,30 @@ +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih-app_tool_body.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import '../../main.dart'; import '../../mih_apis/mih_api_calls.dart'; import '../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; import '../../mih_components/mih_layout/mih_action.dart'; -import '../../mih_components/mih_layout/mih_body.dart'; import '../../mih_components/mih_layout/mih_header.dart'; -import '../../mih_components/mih_layout/mih_layout_builder.dart'; import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import '../../mih_env/env.dart'; import '../../mih_objects/app_user.dart'; import '../../mih_objects/patient_access.dart'; import 'builder/build_business_access_list.dart'; -class PatientAccessRequest extends StatefulWidget { +class MihAccessRequest extends StatefulWidget { final AppUser signedInUser; - const PatientAccessRequest({ + const MihAccessRequest({ super.key, required this.signedInUser, }); @override - State createState() => _PatientAccessRequestState(); + State createState() => _MihAccessRequestState(); } -class _PatientAccessRequestState extends State { +class _MihAccessRequestState extends State { TextEditingController filterController = TextEditingController(); String baseUrl = AppEnviroment.baseApiUrl; @@ -127,10 +126,16 @@ class _PatientAccessRequestState extends State { ); } - MIHBody getBody() { - return MIHBody( - borderOn: true, - bodyItems: [ + Widget getBody() { + return Column( + children: [ + const Text( + "Access List", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), const SizedBox(height: 10), Row( mainAxisAlignment: MainAxisAlignment.center, @@ -235,16 +240,9 @@ class _PatientAccessRequestState extends State { @override Widget build(BuildContext context) { - return MIHLayoutBuilder( - actionButton: getActionButton(), - header: getHeader(), - secondaryActionButton: null, - body: getBody(), - actionDrawer: null, - secondaryActionDrawer: null, - bottomNavBar: null, - pullDownToRefresh: false, - onPullDown: () async {}, + return MihAppToolBody( + borderOn: true, + bodyItem: getBody(), ); } } From 02dc125b0abeeb8a16a30488ef12b69b2c933e6d Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 11 Mar 2025 10:59:26 +0200 Subject: [PATCH 6/7] access --- Frontend/lib/mih_packages/access_review/mih_access.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Frontend/lib/mih_packages/access_review/mih_access.dart b/Frontend/lib/mih_packages/access_review/mih_access.dart index a988d593..f3021278 100644 --- a/Frontend/lib/mih_packages/access_review/mih_access.dart +++ b/Frontend/lib/mih_packages/access_review/mih_access.dart @@ -2,7 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/access_review/patient_access_review.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/access_review/mih_access_requests.dart'; import 'package:flutter/material.dart'; class MihAccess extends StatefulWidget { From 21b6154239880f6efeb2d430716deb27db46a893 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 11 Mar 2025 11:06:01 +0200 Subject: [PATCH 7/7] add scrolling --- .../access_review/mih_access_requests.dart | 155 +++++++++--------- 1 file changed, 79 insertions(+), 76 deletions(-) diff --git a/Frontend/lib/mih_packages/access_review/mih_access_requests.dart b/Frontend/lib/mih_packages/access_review/mih_access_requests.dart index 0b22fc4c..cef27373 100644 --- a/Frontend/lib/mih_packages/access_review/mih_access_requests.dart +++ b/Frontend/lib/mih_packages/access_review/mih_access_requests.dart @@ -127,96 +127,99 @@ class _MihAccessRequestState extends State { } Widget getBody() { - return Column( - children: [ - const Text( - "Access List", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 25, + return SingleChildScrollView( + child: Column( + children: [ + const Text( + "Access List", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), ), - ), - const SizedBox(height: 10), - Row( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - Flexible( - child: MIHDropdownField( - controller: filterController, - hintText: "Access Types", - dropdownOptions: const [ - "All", - "Approved", - "Pending", - "Declined", - "Cancelled" - ], - required: true, - editable: true, - enableSearch: false, + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + child: MIHDropdownField( + controller: filterController, + hintText: "Access Types", + dropdownOptions: const [ + "All", + "Approved", + "Pending", + "Declined", + "Cancelled" + ], + required: true, + editable: true, + enableSearch: false, + ), ), - ), - IconButton( - onPressed: () { - setState(() { - forceRefresh = true; - }); - refreshList(); - }, - icon: const Icon( - Icons.refresh, + IconButton( + onPressed: () { + setState(() { + forceRefresh = true; + }); + refreshList(); + }, + icon: const Icon( + Icons.refresh, + ), ), - ), - ], - ), - const SizedBox(height: 10), - FutureBuilder( - future: accessList, - builder: (context, snapshot) { - //print("patient Queue List ${snapshot.hasData}"); - if (snapshot.connectionState == ConnectionState.waiting) { - return const Mihloadingcircle(); - } else if (snapshot.connectionState == ConnectionState.done) { - List accessRequestList; - accessRequestList = filterSearchResults(snapshot.requireData); - if (accessRequestList.isNotEmpty) { - return BuildBusinessAccessList( - signedInUser: widget.signedInUser, - patientAccessList: accessRequestList, - ); + ], + ), + const SizedBox(height: 10), + FutureBuilder( + future: accessList, + builder: (context, snapshot) { + //print("patient Queue List ${snapshot.hasData}"); + if (snapshot.connectionState == ConnectionState.waiting) { + return const Mihloadingcircle(); + } else if (snapshot.connectionState == ConnectionState.done) { + List accessRequestList; + accessRequestList = filterSearchResults(snapshot.requireData); + if (accessRequestList.isNotEmpty) { + return BuildBusinessAccessList( + signedInUser: widget.signedInUser, + patientAccessList: accessRequestList, + ); + } else { + return Center( + child: Text( + "No Request have been made.", + style: TextStyle( + fontSize: 25, + color: MzanziInnovationHub.of(context)! + .theme + .messageTextColor()), + textAlign: TextAlign.center, + ), + ); + } + + // return Expanded( + // child: displayAccessRequestList(accessRequestList), + // ); } else { return Center( child: Text( - "No Request have been made.", + "$errorCode: Error pulling Patients Data\n$baseUrl/queue/patients/\n$errorBody", style: TextStyle( fontSize: 25, color: MzanziInnovationHub.of(context)! .theme - .messageTextColor()), + .errorColor()), textAlign: TextAlign.center, ), ); } - - // return Expanded( - // child: displayAccessRequestList(accessRequestList), - // ); - } else { - return Center( - child: Text( - "$errorCode: Error pulling Patients Data\n$baseUrl/queue/patients/\n$errorBody", - style: TextStyle( - fontSize: 25, - color: - MzanziInnovationHub.of(context)!.theme.errorColor()), - textAlign: TextAlign.center, - ), - ); - } - }, - ), - ], + }, + ), + ], + ), ); }