From 76d24a8e2bdc2f9d7afb5123bb4f5c01111bfe0b Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 4 Nov 2025 10:15:34 +0200 Subject: [PATCH] BUG: Business Profile Tool Transitions --- Frontend/lib/mih_config/mih_go_router.dart | 9 +-- ...ness_profile.dart => busines_profile.dart} | 58 ++++++++++--------- .../package_tools/mih_business_qr_code.dart | 29 ++++++---- .../package_tools/mih_business_reviews.dart | 30 ++++++---- .../mih_business_user_search.dart | 9 ++- .../package_tools/mih_my_business_team.dart | 33 ++--------- .../package_tools/mih_my_business_user.dart | 24 ++++---- .../mzansi_wallet/mih_wallet.dart | 1 - 8 files changed, 93 insertions(+), 100 deletions(-) rename Frontend/lib/mih_packages/mzansi_profile/business_profile/{mzansi_business_profile.dart => busines_profile.dart} (82%) diff --git a/Frontend/lib/mih_config/mih_go_router.dart b/Frontend/lib/mih_config/mih_go_router.dart index 71de50cc..685ce86b 100644 --- a/Frontend/lib/mih_config/mih_go_router.dart +++ b/Frontend/lib/mih_config/mih_go_router.dart @@ -17,7 +17,7 @@ import 'package:mzansi_innovation_hub/mih_packages/mih_home/mih_route_error.dart import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/mih_mine_sweeper.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_ai/mzansi_ai.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/mzansi_directory.dart'; -import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart'; +import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/busines_profile.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart'; @@ -190,9 +190,10 @@ class MihGoRouter { }); return const SizedBox.shrink(); } - return MzansiBusinessProfile( - key: UniqueKey(), - ); + return BusinesProfile(); + // return MzansiBusinessProfile( + // key: UniqueKey(), + // ); }, ), GoRoute( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart similarity index 82% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart rename to Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart index 69dd98ea..fbf3cbb7 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart @@ -1,34 +1,45 @@ +import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart'; -import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_business_employee_services.dart'; import 'package:provider/provider.dart'; -class MzansiBusinessProfile extends StatefulWidget { - const MzansiBusinessProfile({ - super.key, - }); +class BusinesProfile extends StatefulWidget { + const BusinesProfile({super.key}); @override - State createState() => _MzansiBusinessProfileState(); + State createState() => _BusinesProfileState(); } -class _MzansiBusinessProfileState extends State { +class _BusinesProfileState extends State { + Future initialiseBusinessData() async { + MzansiProfileProvider profileProvider = + context.read(); + await MihBusinessEmployeeServices() + .fetchEmployees(profileProvider, context); + } + + @override + void initState() { + super.initState(); + initialiseBusinessData(); + } + @override Widget build(BuildContext context) { return MihPackage( appActionButton: getAction(), appTools: getTools(), appBody: getToolBody(), - appToolTitles: getToolTitle(), selectedbodyIndex: context.watch().businessIndex, onIndexChange: (newIndex) { context.read().setBusinessIndex(newIndex); @@ -45,7 +56,6 @@ class _MzansiBusinessProfileState extends State { 'mihHome', ); FocusScope.of(context).unfocus(); - context.read().setBusinessIndex(0); }, ); } @@ -79,22 +89,6 @@ class _MzansiBusinessProfileState extends State { ); } - List getToolBody() { - List toolBodies = [ - MihBusinessDetails(), - MihMyBusinessUser(), - MihMyBusinessTeam(), - MihBusinessUserSearch(), - MihBusinessReviews( - business: context.watch().business!), - MihBusinessQrCode( - business: context.watch().business!, - // startUpSearch: "", - ), - ]; - return toolBodies; - } - List getToolTitle() { List toolTitles = [ "Profile", @@ -106,4 +100,16 @@ class _MzansiBusinessProfileState extends State { ]; return toolTitles; } + + List getToolBody() { + List toolBodies = [ + MihBusinessDetails(), + MihMyBusinessUser(), + MihMyBusinessTeam(), + MihBusinessUserSearch(), + MihBusinessReviews(business: null), + MihBusinessQrCode(business: null), + ]; + return toolBodies; + } } diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart index 268c768f..109de674 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart @@ -14,22 +14,22 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; +import 'package:provider/provider.dart'; import 'package:screenshot/screenshot.dart'; import 'package:share_plus/share_plus.dart'; import 'package:supertokens_flutter/supertokens.dart'; class MihBusinessQrCode extends StatefulWidget { - final Business business; - // final String? startUpSearch; + final Business? business; const MihBusinessQrCode({ super.key, required this.business, - // required this.startUpSearch, }); @override @@ -38,6 +38,7 @@ class MihBusinessQrCode extends StatefulWidget { class _MihBusinessQrCodeState extends State { late Future futureImageUrl; + late Business business; PlatformFile? file; late String qrCodedata; int qrSize = 500; @@ -66,14 +67,14 @@ class _MihBusinessQrCodeState extends State { .substring(2, 8); // KenLogger.warning(bgColor); String encodedData = - Uri.encodeComponent("$qrCodedata${widget.business.business_id}"); + Uri.encodeComponent("$qrCodedata${business.business_id}"); return "https://api.qrserver.com/v1/create-qr-code/?data=$encodedData&size=${qrSize}x${qrSize}&bgcolor=$bgColor&color=$color"; } Future saveImage(Uint8List imageBytes) async { final String filename = - "${widget.business.Name}_QR_Code_${DateTime.now().millisecondsSinceEpoch}.png"; + "${business.Name}_QR_Code_${DateTime.now().millisecondsSinceEpoch}.png"; if (kIsWeb) { await FileSaver.instance.saveFile( name: filename, @@ -241,7 +242,7 @@ class _MihBusinessQrCodeState extends State { ), FittedBox( child: Text( - widget.business.Name, + business.Name, style: TextStyle( fontSize: 35, fontWeight: FontWeight.bold, @@ -253,7 +254,7 @@ class _MihBusinessQrCodeState extends State { ), FittedBox( child: Text( - widget.business.type, + business.type, style: TextStyle( fontSize: 20, fontWeight: FontWeight.w600, @@ -335,9 +336,15 @@ class _MihBusinessQrCodeState extends State { @override void initState() { super.initState(); + MzansiProfileProvider profileProvider = + context.read(); + if (widget.business != null) { + business = widget.business!; + } else { + business = profileProvider.business!; + } _checkUserSession(); - futureImageUrl = - MihFileApi.getMinioFileUrl(widget.business.logo_path, context); + futureImageUrl = MihFileApi.getMinioFileUrl(business.logo_path, context); qrCodedata = "${AppEnviroment.baseAppUrl}/business-profile/view?business_id="; } @@ -418,8 +425,8 @@ class _MihBusinessQrCodeState extends State { onTap: () { shareMIHLink( context, - "Check out ${widget.business.Name} on the MIH app", - "$qrCodedata${widget.business.business_id}", + "Check out ${business.Name} on the MIH app", + "$qrCodedata${business.business_id}", ); }, ), diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart index 42f9f06a..f2f34dbd 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart @@ -5,12 +5,14 @@ import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart'; +import 'package:provider/provider.dart'; class MihBusinessReviews extends StatefulWidget { - final Business business; + final Business? business; const MihBusinessReviews({ super.key, required this.business, @@ -21,15 +23,19 @@ class MihBusinessReviews extends StatefulWidget { } class _MihBusinessReviewsState extends State { - // late Future> _reviews; + late Business business; - // @override - // void initState() { - // super.initState(); - // _reviews = MihMzansiDirectoryServices().getAllReviewsofBusiness( - // widget.businessId, - // ); - // } + @override + void initState() { + super.initState(); + MzansiProfileProvider profileProvider = + context.read(); + if (widget.business != null) { + business = widget.business!; + } else { + business = profileProvider.business!; + } + } void onReviewTap(BusinessReview? businessReview, double width) { // showDialog(context: context, builder: (context)=> ) @@ -37,7 +43,7 @@ class _MihBusinessReviewsState extends State { context: context, builder: (context) { return MihReviewBusinessWindow( - business: widget.business, + business: business, businessReview: businessReview, screenWidth: width, readOnly: true, @@ -52,7 +58,7 @@ class _MihBusinessReviewsState extends State { double screenWidth = MediaQuery.of(context).size.width; return FutureBuilder( future: MihMzansiDirectoryServices().getAllReviewsofBusiness( - widget.business.business_id, + business.business_id, ), builder: (context, asyncSnapshot) { if (asyncSnapshot.connectionState == ConnectionState.waiting) { @@ -93,7 +99,7 @@ class _MihBusinessReviewsState extends State { ), const SizedBox(height: 10), Text( - "No reviews yet, be the first the review ${widget.business.Name}", + "No reviews yet, be the first the review ${business.Name}", textAlign: TextAlign.center, overflow: TextOverflow.visible, style: TextStyle( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart index c2bc32fb..b614dffb 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart @@ -36,11 +36,9 @@ class _MihBusinessUserSearchState extends State { void submitUserForm(MzansiProfileProvider profileProvider) { if (searchController.text != "") { - setState(() { - userSearch = searchController.text; - hasSearchedBefore = true; - userSearchResults = fetchUsers(profileProvider, userSearch); - }); + userSearch = searchController.text; + hasSearchedBefore = true; + userSearchResults = fetchUsers(profileProvider, userSearch); } } @@ -192,6 +190,7 @@ class _MihBusinessUserSearchState extends State { searchController.clear(); userSearch = ""; }); + profileProvider.setUserearchResults(userSearchResults: []); }, searchFocusNode: _searchFocusNode, ), diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart index 3dc774a9..4583f888 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart @@ -7,7 +7,6 @@ import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_employee.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_business_employee_services.dart'; import 'package:provider/provider.dart'; class MihMyBusinessTeam extends StatefulWidget { @@ -23,32 +22,11 @@ class _MihMyBusinessTeamState extends State { String errorCode = ""; String errorBody = ""; - void getEmployeeData(MzansiProfileProvider mzansiProfileProvider) { - WidgetsBinding.instance.addPostFrameCallback((_) async { - await MihBusinessEmployeeServices() - .fetchEmployees(mzansiProfileProvider, context); - }); - } - // Future fetchEmployees( - // MzansiProfileProvider mzansiProfileProvider) async { - // //print("Patien manager page: $endpoint"); - // final response = await http.get(Uri.parse( - // "${AppEnviroment.baseApiUrl}/business-user/employees/${mzansiProfileProvider.businessUser!.business_id}")); - // errorCode = response.statusCode.toString(); - // errorBody = response.body; - // if (response.statusCode == 200) { - // //print("Here1"); - // Iterable l = jsonDecode(response.body); - // //print("Here2"); - // List employeeList = List.from( - // l.map((model) => BusinessEmployee.fromJson(model))); - // mzansiProfileProvider.setEmployeeList(employeeList: employeeList); - // //print("Here3"); - // //print(patientQueue); - // // return patientQueue; - // } else { - // throw Exception('failed to load employees'); - // } + // void getEmployeeData(MzansiProfileProvider mzansiProfileProvider) { + // WidgetsBinding.instance.addPostFrameCallback((_) async { + // await MihBusinessEmployeeServices() + // .fetchEmployees(mzansiProfileProvider, context); + // }); // } Widget displayEmployeeList(List employeeList) { @@ -89,7 +67,6 @@ class _MihMyBusinessTeamState extends State { builder: (BuildContext context, MzansiProfileProvider mzansiProfileProvider, Widget? child) { if (mzansiProfileProvider.employeeList == null) { - getEmployeeData(mzansiProfileProvider); return Center( child: Mihloadingcircle(), ); diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart index 8bc78d59..29049149 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart @@ -218,19 +218,17 @@ class _MihMyBusinessUserState extends State { void setControllers() { MzansiProfileProvider mzansiProfileProvider = context.read(); - setState(() { - fileNameController.text = - mzansiProfileProvider.user!.pro_pic_path.split("/").last; - signtureController.text = - mzansiProfileProvider.businessUser!.sig_path.split("/").last; - KenLogger.success("title: ${mzansiProfileProvider.businessUser!.title}"); - KenLogger.success( - "sig url: ${mzansiProfileProvider.businessUser!.sig_path}"); - titleTextController.text = mzansiProfileProvider.businessUser!.title; - fnameController.text = mzansiProfileProvider.user!.fname; - lnameController.text = mzansiProfileProvider.user!.lname; - accessController.text = mzansiProfileProvider.businessUser!.access; - }); + fileNameController.text = + mzansiProfileProvider.user!.pro_pic_path.split("/").last; + signtureController.text = + mzansiProfileProvider.businessUser!.sig_path.split("/").last; + KenLogger.success("title: ${mzansiProfileProvider.businessUser!.title}"); + KenLogger.success( + "sig url: ${mzansiProfileProvider.businessUser!.sig_path}"); + titleTextController.text = mzansiProfileProvider.businessUser!.title; + fnameController.text = mzansiProfileProvider.user!.fname; + lnameController.text = mzansiProfileProvider.user!.lname; + accessController.text = mzansiProfileProvider.businessUser!.access; if (AppEnviroment.getEnv() == "Prod") { env = "Prod"; } else { diff --git a/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart b/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart index 1d56e1db..91ffcd41 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart @@ -94,7 +94,6 @@ class _MihWalletState extends State { temp[const Icon(Icons.favorite)] = () { context.read().setToolIndex(1); }; - return MihPackageTools( tools: temp, selcetedIndex: context.watch().toolIndex,