From 1077b965d52074ef478d6bc3c68a0cbfe494efa4 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 10:44:38 +0200 Subject: [PATCH 01/27] remove pass vaidation on sign in --- .../mih_authentication/package_tools/mih_sign_in.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart index 7f7f9e56..baf50b96 100644 --- a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart +++ b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart @@ -306,7 +306,8 @@ class _MihSignInState extends State { passwordMode: true, autofillHints: const [AutofillHints.password], validator: (value) { - return MihValidationServices().validatePassword(value); + // return MihValidationServices().validatePassword(value); + return null; }, ), const SizedBox(height: 10), From 7cc03645889c5c591ef6cd03932939d4081e88c7 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 11:03:42 +0200 Subject: [PATCH 02/27] Auto nave to profile package on account creation --- .../package_tools/mih_personal_home.dart | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart index d92c4e97..be76afeb 100644 --- a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart +++ b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart @@ -213,6 +213,18 @@ class _MihPersonalHomeState extends State } } + void autoNavToProfile() { + WidgetsBinding.instance.addPostFrameCallback((_) { + Navigator.of(context).pushNamed( + '/mzansi-profile', + arguments: AppProfileUpdateArguments( + widget.signedInUser, + widget.propicFile, + ), + ); + }); + } + @override void dispose() { super.dispose(); @@ -229,17 +241,11 @@ class _MihPersonalHomeState extends State searchController.addListener(searchPackage); if (widget.isUserNew) { personalPackagesMap = setNerUserPersonalPackage(); + autoNavToProfile(); } else { personalPackagesMap = setPersonalPackagesMap(); } searchPackage(); - //Scrolling Banner message - // _marqueeController = AnimationController( - // vsync: this, - // duration: const Duration(seconds: 12), - // ); - // _scrollController = ScrollController(); - // WidgetsBinding.instance.addPostFrameCallback((_) => _startMarquee()); } @override From 6124d7a2a718d3fe415e92bd36fe9a2a850ba0a9 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 11:21:06 +0200 Subject: [PATCH 03/27] change working of "Your Purpose" to "Your Personal Mission" --- .../package_tiles/mzansi_setup_profile_tile.dart | 2 +- .../personal_profile/package_tools/mih_personal_profile.dart | 4 ++-- .../package_tools/mih_personal_profile_view.dart | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart index 45aa48d3..950858db 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart @@ -34,7 +34,7 @@ class _MzansiSetupProfileTileState extends State { ), ); }, - appName: "Setup Profile", + appName: "Set Up Profile", appIcon: Icon( MihIcons.profileSetup, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart index b335d65f..9b7ce3f4 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart @@ -302,7 +302,7 @@ class _MihPersonalProfileState extends State { controller: purposeController, multiLineInput: true, requiredText: true, - hintText: "Your Purpose", + hintText: "Your Personal Mission", validator: (value) { return MihValidationServices() .validateLength(purposeController.text, 256); @@ -513,7 +513,7 @@ class _MihPersonalProfileState extends State { child: Text( widget.arguments.signedInUser.purpose.isNotEmpty ? widget.arguments.signedInUser.purpose - : "No purpose added yet", + : "No Personal Mission added yet", textAlign: TextAlign.center, style: TextStyle( fontSize: 15, diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart index da26939c..edfccf9e 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart @@ -157,7 +157,7 @@ class _MihPersonalProfileViewState extends State { child: Text( widget.user.purpose.isNotEmpty ? widget.user.purpose - : "No purpose added yet", + : "No Personal Mission added yet", textAlign: TextAlign.center, style: TextStyle( fontSize: 15, From ef59345df743513f7a903c8c7e74b5c9ae5ce03e Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 11:33:46 +0200 Subject: [PATCH 04/27] Add no card message in Mzansi Wallet --- .../builder/build_loyalty_card_list.dart | 84 +++++++++++-------- 1 file changed, 50 insertions(+), 34 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index 7a1640d6..f7d07f9a 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -1,6 +1,7 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; @@ -502,11 +503,7 @@ class _BuildLoyaltyCardListState extends State { padding: EdgeInsets.only( left: getHorizontalPaddingSize(size), right: getHorizontalPaddingSize(size), - //bottom: height / 5, - //top: 20, ), - // physics: , - // shrinkWrap: true, itemCount: widget.cardList.length, gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( mainAxisSpacing: 0, @@ -526,39 +523,58 @@ class _BuildLoyaltyCardListState extends State { ); }, ); - // return ListView.separated( - // shrinkWrap: true, - // physics: const NeverScrollableScrollPhysics(), - // separatorBuilder: (BuildContext context, int index) { - // return Divider( - // color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), - // ); - // }, - // itemCount: widget.cardList.length, - // itemBuilder: (context, index) { - // return ListTile( - // title: MihCardDisplay( - // shopName: widget.cardList[index].shop_name, height: 200), - - // onTap: () { - // viewCardWindow(index); - // }, - // ); - // }, - // ); } else { return Padding( - padding: const EdgeInsets.only(top: 25.0), - child: SizedBox( - height: size.height, - child: const Align( - alignment: Alignment.topCenter, - child: Text( - "No Cards Available", - style: TextStyle(fontSize: 25, color: Colors.grey), - textAlign: TextAlign.center, + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), - ), + const SizedBox(height: 10), + Text( + "No Cards added yo your Mzansi Wallet.", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 25, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan(text: " to add your first loyalty card."), + ], + ), + ), + ), + ], ), ); } From deed8c8d8b6ccff58400ac3c95c63e7d8b012b01 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 11:51:53 +0200 Subject: [PATCH 05/27] auto nav to business side on business account activation --- .../mzansi_setup_business_profile_tile.dart | 2 +- .../package_tools/mih_personal_profile.dart | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart index 4e905377..790ac157 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart @@ -29,7 +29,7 @@ class _MzansiSetupBusinessProfileTileState arguments: widget.signedInUser, ); }, - appName: "Setup Business", + appName: "Set Up Business", appIcon: Icon( MihIcons.profileSetup, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart index 9b7ce3f4..ce3a7209 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart @@ -41,6 +41,7 @@ class _MihPersonalProfileState extends State { final ValueNotifier _counter = ValueNotifier(0); PlatformFile? proPic; late ImageProvider? propicPreview; + late bool originalProfileTypeIsBusiness; late bool businessUser; late String oldProPicName; late String env; @@ -125,13 +126,18 @@ class _MihPersonalProfileState extends State { context, ); if (responseCode == 200) { + bool stayOnPersonalSide = true; + if (originalProfileTypeIsBusiness == false && businessUser == true) { + stayOnPersonalSide = false; + } Navigator.of(context).pop(); Navigator.of(context).pop(); Navigator.of(context).pop(); Navigator.of(context).pushNamed( '/', arguments: AuthArguments( - true, + stayOnPersonalSide, + // true, false, ), ); @@ -423,6 +429,11 @@ class _MihPersonalProfileState extends State { usernameController.text = widget.arguments.signedInUser.username; purposeController.text = widget.arguments.signedInUser.purpose; businessUser = isBusinessUser(); + if (businessUser) { + originalProfileTypeIsBusiness = true; + } else { + originalProfileTypeIsBusiness = false; + } }); } From ce58fffe39bfe8703fda9544b8c5d0222e8fbf63 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 11:54:45 +0200 Subject: [PATCH 06/27] Remove Ask Mzansi when new user or business --- .../package_tools/mih_business_home.dart | 50 ++++++++++--------- .../package_tools/mih_personal_home.dart | 50 ++++++++++--------- 2 files changed, 54 insertions(+), 46 deletions(-) diff --git a/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart b/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart index ca33bd45..7db01937 100644 --- a/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart +++ b/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart @@ -230,29 +230,33 @@ class _MihBusinessHomeState extends State // ), // ), // const SizedBox(height: 20), - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: searchController, - hintText: "Ask Mzansi", - prefixIcon: Icons.search, - prefixAltIcon: MihIcons.mzansiAi, - fillColor: - MzansiInnovationHub.of(context)!.theme.secondaryColor(), - hintColor: MzansiInnovationHub.of(context)!.theme.primaryColor(), - onPrefixIconTap: () { - Navigator.of(context).pushNamed( - '/mzansi-ai', - arguments: MzansiAiArguments( - widget.signedInUser, - searchController.text.isEmpty - ? null - : searchController.text, - ), - ); - searchController.clear(); - }, - searchFocusNode: _searchFocusNode, + Visibility( + visible: !widget.isBusinessUserNew, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: searchController, + hintText: "Ask Mzansi", + prefixIcon: Icons.search, + prefixAltIcon: MihIcons.mzansiAi, + fillColor: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + hintColor: + MzansiInnovationHub.of(context)!.theme.primaryColor(), + onPrefixIconTap: () { + Navigator.of(context).pushNamed( + '/mzansi-ai', + arguments: MzansiAiArguments( + widget.signedInUser, + searchController.text.isEmpty + ? null + : searchController.text, + ), + ); + searchController.clear(); + }, + searchFocusNode: _searchFocusNode, + ), ), ), const SizedBox(height: 10), diff --git a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart index be76afeb..e83df4de 100644 --- a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart +++ b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart @@ -281,29 +281,33 @@ class _MihPersonalHomeState extends State // ), // ), // const SizedBox(height: 20), - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: searchController, - hintText: "Ask Mzansi", - prefixIcon: Icons.search, - prefixAltIcon: MihIcons.mzansiAi, - fillColor: - MzansiInnovationHub.of(context)!.theme.secondaryColor(), - hintColor: MzansiInnovationHub.of(context)!.theme.primaryColor(), - onPrefixIconTap: () { - Navigator.of(context).pushNamed( - '/mzansi-ai', - arguments: MzansiAiArguments( - widget.signedInUser, - searchController.text.isEmpty - ? null - : searchController.text, - ), - ); - searchController.clear(); - }, - searchFocusNode: _searchFocusNode, + Visibility( + visible: !widget.isUserNew, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: searchController, + hintText: "Ask Mzansi", + prefixIcon: Icons.search, + prefixAltIcon: MihIcons.mzansiAi, + fillColor: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + hintColor: + MzansiInnovationHub.of(context)!.theme.primaryColor(), + onPrefixIconTap: () { + Navigator.of(context).pushNamed( + '/mzansi-ai', + arguments: MzansiAiArguments( + widget.signedInUser, + searchController.text.isEmpty + ? null + : searchController.text, + ), + ); + searchController.clear(); + }, + searchFocusNode: _searchFocusNode, + ), ), ), const SizedBox(height: 20), From ff4fe0e6c4b55ebd2c892616c0e7786086572e0e Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 12:06:59 +0200 Subject: [PATCH 07/27] change field to make some optional --- .../profile_business_add.dart | 98 +++++++++++++------ 1 file changed, 66 insertions(+), 32 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart index 3dd67942..316b7614 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart @@ -14,7 +14,6 @@ import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_body.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_header.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_layout_builder.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; @@ -364,23 +363,6 @@ class _ProfileBusinessAddState extends State { }, ), const SizedBox(height: 10.0), - MihTextFormField( - fillColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - inputColor: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - controller: websiteController, - multiLineInput: false, - requiredText: false, - hintText: "Business Website", - validator: (value) { - return MihValidationServices() - .validateWebsite(value, false); - }, - ), - const SizedBox(height: 10.0), MihTextFormField( height: 250, fillColor: MzansiInnovationHub.of(context)! @@ -429,6 +411,23 @@ class _ProfileBusinessAddState extends State { ), ), const SizedBox(height: 10.0), + MihTextFormField( + fillColor: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + inputColor: MzansiInnovationHub.of(context)! + .theme + .primaryColor(), + controller: websiteController, + multiLineInput: false, + requiredText: false, + hintText: "Business Website", + validator: (value) { + return MihValidationServices() + .validateWebsite(value, false); + }, + ), + const SizedBox(height: 10.0), MihTextFormField( fillColor: MzansiInnovationHub.of(context)! @@ -439,10 +438,11 @@ class _ProfileBusinessAddState extends State { .primaryColor(), controller: regController, multiLineInput: false, - requiredText: true, + requiredText: false, hintText: "Registration No.", validator: (value) { - return MihValidationServices().isEmpty(value); + // return MihValidationServices().isEmpty(value); + return null; }, ), const SizedBox(height: 10.0), @@ -472,10 +472,11 @@ class _ProfileBusinessAddState extends State { .primaryColor(), controller: vatNoController, multiLineInput: false, - requiredText: true, + requiredText: false, hintText: "VAT Number", validator: (value) { - return MihValidationServices().isEmpty(value); + // return MihValidationServices().isEmpty(value); + return null; }, ), const SizedBox(height: 10.0), @@ -553,17 +554,32 @@ class _ProfileBusinessAddState extends State { .theme .secondaryColor()), const SizedBox(height: 10.0), - MihDropdownField( + MihTextFormField( + fillColor: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + inputColor: MzansiInnovationHub.of(context)! + .theme + .primaryColor(), controller: titleController, + multiLineInput: false, + requiredText: true, hintText: "Title", - dropdownOptions: const ["Doctor", "Assistant", "Other"], - editable: true, - enableSearch: true, validator: (value) { return MihValidationServices().isEmpty(value); }, - requiredText: true, ), + // MihDropdownField( + // controller: titleController, + // hintText: "Title", + // dropdownOptions: const ["Doctor", "Assistant", "Other"], + // editable: true, + // enableSearch: true, + // validator: (value) { + // return MihValidationServices().isEmpty(value); + // }, + // requiredText: true, + // ), const SizedBox(height: 10.0), MihTextFormField( fillColor: MzansiInnovationHub.of(context)! @@ -575,6 +591,7 @@ class _ProfileBusinessAddState extends State { controller: fnameController, multiLineInput: false, requiredText: true, + readOnly: true, hintText: "First Name", validator: (value) { return MihValidationServices().isEmpty(value); @@ -591,23 +608,40 @@ class _ProfileBusinessAddState extends State { controller: lnameController, multiLineInput: false, requiredText: true, + readOnly: true, hintText: "Surname", validator: (value) { return MihValidationServices().isEmpty(value); }, ), const SizedBox(height: 15.0), - MihDropdownField( + MihTextFormField( + fillColor: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + inputColor: MzansiInnovationHub.of(context)! + .theme + .primaryColor(), controller: accessController, + multiLineInput: false, + requiredText: true, + readOnly: true, hintText: "Access Type", - dropdownOptions: const ["Full", "Partial"], - editable: true, - enableSearch: true, validator: (value) { return MihValidationServices().isEmpty(value); }, - requiredText: true, ), + // MihDropdownField( + // controller: accessController, + // hintText: "Access Type", + // dropdownOptions: const ["Full", "Partial"], + // editable: false, + // enableSearch: true, + // validator: (value) { + // return MihValidationServices().isEmpty(value); + // }, + // requiredText: true, + // ), const SizedBox(height: 20.0), Center( child: MihButton( From c026d944a65d6b5b424700a7176b7e2d786e00aa Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 12:09:26 +0200 Subject: [PATCH 08/27] change field to make some optional pt2 --- .../package_tools/mih_business_details.dart | 52 +++++++------------ 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart index f74ae51f..73a5b163 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart @@ -284,17 +284,6 @@ class _MihBusinessDetailsState extends State { return MihValidationServices().isEmpty(value); }, ), - // MihDropdownField( - // controller: typeController, - // hintText: "Business Type", - // dropdownOptions: const ["Doctors Office", "Other"], - // editable: true, - // enableSearch: true, - // validator: (value) { - // return MihValidationServices().isEmpty(value); - // }, - // requiredText: true, - // ), const SizedBox(height: 10), MihTextFormField( fillColor: MzansiInnovationHub.of(context)! @@ -329,23 +318,6 @@ class _MihBusinessDetailsState extends State { }, ), const SizedBox(height: 10), - MihTextFormField( - fillColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - inputColor: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - controller: websiteController, - multiLineInput: false, - requiredText: false, - hintText: "Business Website", - validator: (value) { - return MihValidationServices() - .validateWebsite(value, false); - }, - ), - const SizedBox(height: 10), MihTextFormField( height: 250, fillColor: MzansiInnovationHub.of(context)! @@ -394,6 +366,23 @@ class _MihBusinessDetailsState extends State { ), ), const SizedBox(height: 10.0), + MihTextFormField( + fillColor: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + inputColor: MzansiInnovationHub.of(context)! + .theme + .primaryColor(), + controller: websiteController, + multiLineInput: false, + requiredText: false, + hintText: "Business Website", + validator: (value) { + return MihValidationServices() + .validateWebsite(value, false); + }, + ), + const SizedBox(height: 10), MihTextFormField( fillColor: MzansiInnovationHub.of(context)! .theme @@ -403,7 +392,7 @@ class _MihBusinessDetailsState extends State { .primaryColor(), controller: regController, multiLineInput: false, - requiredText: true, + requiredText: false, hintText: "Registration No.", validator: (value) { return MihValidationServices().isEmpty(value); @@ -419,8 +408,7 @@ class _MihBusinessDetailsState extends State { .primaryColor(), controller: practiceNoController, multiLineInput: false, - requiredText: - typeController.text == "Doctors Office", + requiredText: false, hintText: "Practice Number", validator: (validateValue) { return null; @@ -436,7 +424,7 @@ class _MihBusinessDetailsState extends State { .primaryColor(), controller: vatNoController, multiLineInput: false, - requiredText: true, + requiredText: false, hintText: "VAT Number", validator: (value) { return MihValidationServices().isEmpty(value); From 79154d6bb43c223c3782f48087cab369788ff9a4 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 5 Aug 2025 12:19:30 +0200 Subject: [PATCH 09/27] bring back I dont know iumage for sig error --- .../assets/images/i-dont-know-dark.png | Bin 0 -> 6002 bytes .../assets/images/i-dont-know-light.png | Bin 0 -> 20187 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Frontend/lib/mih_components/mih_package_components/assets/images/i-dont-know-dark.png create mode 100644 Frontend/lib/mih_components/mih_package_components/assets/images/i-dont-know-light.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/i-dont-know-dark.png b/Frontend/lib/mih_components/mih_package_components/assets/images/i-dont-know-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5cff94257df633d4beb44f1514c99bcae750b GIT binary patch literal 6002 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 Date: Tue, 5 Aug 2025 12:19:47 +0200 Subject: [PATCH 10/27] change drop down title to free text --- .../package_tools/mih_my_business_user.dart | 25 ++++--------------- 1 file changed, 5 insertions(+), 20 deletions(-) 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 43e55009..2cd4579c 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 @@ -7,7 +7,6 @@ import 'package:mzansi_innovation_hub/mih_services/mih_my_business_user_services import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.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_package_alert.dart'; @@ -39,7 +38,6 @@ class _MihMyBusinessUserState extends State { PlatformFile? userPicFile; PlatformFile? userSignatureFile; final fileNameController = TextEditingController(); - final titleDropdownController = TextEditingController(); final titleTextController = TextEditingController(); final fnameController = TextEditingController(); final lnameController = TextEditingController(); @@ -49,7 +47,7 @@ class _MihMyBusinessUserState extends State { late String env; bool isFormFilled() { - if (titleDropdownController.text.isEmpty) { + if (titleTextController.text.isEmpty) { return false; } else { return true; @@ -93,7 +91,7 @@ class _MihMyBusinessUserState extends State { int statusCode = await MihMyBusinessUserServices().updateBusinessUser( widget.arguments.signedInUser.app_id, widget.arguments.businessUser!.business_id, - titleDropdownController.text, + titleTextController.text, accessController.text, signtureController.text, context, @@ -171,7 +169,6 @@ class _MihMyBusinessUserState extends State { void dispose() { super.dispose(); fileNameController.dispose(); - titleDropdownController.dispose(); titleTextController.dispose(); fnameController.dispose(); lnameController.dispose(); @@ -189,7 +186,6 @@ class _MihMyBusinessUserState extends State { widget.arguments.signedInUser.pro_pic_path.split("/").last; signtureController.text = widget.arguments.businessUser!.sig_path.split("/").last; - titleDropdownController.text = widget.arguments.businessUser!.title; titleTextController.text = widget.arguments.businessUser!.title; fnameController.text = widget.arguments.signedInUser.fname; lnameController.text = widget.arguments.signedInUser.lname; @@ -252,18 +248,6 @@ class _MihMyBusinessUserState extends State { ), ), const SizedBox(height: 20), - MihDropdownField( - controller: titleDropdownController, - hintText: "Title", - dropdownOptions: const ["Doctor", "Assistant", "Other"], - editable: true, - enableSearch: true, - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - requiredText: true, - ), - const SizedBox(height: 10), MihTextFormField( fillColor: MzansiInnovationHub.of(context)!.theme.secondaryColor(), @@ -272,7 +256,8 @@ class _MihMyBusinessUserState extends State { controller: titleTextController, multiLineInput: false, requiredText: true, - hintText: "Other Title", + readOnly: false, + hintText: "Title", validator: (value) { return MihValidationServices().isEmpty(value); }, @@ -329,7 +314,7 @@ class _MihMyBusinessUserState extends State { child: const Text( "Signature:", style: TextStyle( - fontSize: 15, + fontSize: 18, fontWeight: FontWeight.bold, ), ), From e2af1d72c64ae8283d4a64a233e945cce42ec44a Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Wed, 6 Aug 2025 11:02:15 +0200 Subject: [PATCH 11/27] add country code picker package --- Frontend/pubspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Frontend/pubspec.yaml b/Frontend/pubspec.yaml index c793ee20..73a50178 100644 --- a/Frontend/pubspec.yaml +++ b/Frontend/pubspec.yaml @@ -46,6 +46,7 @@ dependencies: google_mobile_ads: ^6.0.0 redacted: ^1.0.13 custom_rating_bar: ^3.0.0 + country_code_picker: ^3.3.0 dev_dependencies: flutter_test: From 010d5dedc1f1bd6edf63c23ecc41662200a9a312 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Wed, 6 Aug 2025 11:02:31 +0200 Subject: [PATCH 12/27] test country code picker --- .../Example/package_tools/package_tool_one.dart | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart b/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart index 85006f32..94a2fb7b 100644 --- a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart +++ b/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart @@ -1,3 +1,4 @@ +import 'package:country_code_picker/country_code_picker.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; @@ -185,6 +186,20 @@ class _PackageToolOneState extends State { ], ), const SizedBox(height: 20), + CountryCodePicker( + padding: EdgeInsetsGeometry.all(0), + onChanged: (selectedCode) { + debugPrint("Selected Country Code: $selectedCode"); + }, + initialSelection: '+27', + showDropDownButton: false, + pickerStyle: PickerStyle.bottomSheet, + dialogBackgroundColor: + MzansiInnovationHub.of(context)!.theme.primaryColor(), + barrierColor: + MzansiInnovationHub.of(context)!.theme.primaryColor(), + ), + const SizedBox(height: 10), Center( child: MihButton( onPressed: () { @@ -305,7 +320,7 @@ class _PackageToolOneState extends State { "registration_no", "logo_name", "logo_path", - "contact_no", + "+27812345679", "bus_email", "app_id", "gps_location", From f241bbc784904767fd312845e66e6daf3c01cfd8 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Wed, 6 Aug 2025 11:03:19 +0200 Subject: [PATCH 13/27] use country copde picker and set contatc no field to number only --- .../components/mih_business_info_card.dart | 3 +- .../package_tools/mih_business_details.dart | 163 +++++++++++++----- .../profile_business_add.dart | 96 ++++++++--- 3 files changed, 193 insertions(+), 69 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart index 6ef8bbdc..3ca50400 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart @@ -40,7 +40,8 @@ class _MihBusinessCardState extends State { } Future _makePhoneCall(String phoneNumber) async { - final Uri url = Uri(scheme: 'tel', path: phoneNumber); + String formattedNumber = phoneNumber.replaceAll("-", ""); + final Uri url = Uri(scheme: 'tel', path: formattedNumber); if (await canLaunchUrl(url)) { await launchUrl(url); } else { diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart index 73a5b163..db5e6c5f 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart @@ -1,3 +1,4 @@ +import 'package:country_code_picker/country_code_picker.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; @@ -44,6 +45,7 @@ class _MihBusinessDetailsState extends State { final typeController = TextEditingController(); final practiceNoController = TextEditingController(); final vatNoController = TextEditingController(); + final countryCodeController = TextEditingController(); final contactController = TextEditingController(); final emailController = TextEditingController(); final locationController = TextEditingController(); @@ -65,7 +67,8 @@ class _MihBusinessDetailsState extends State { practiceNoController.text, vatNoController.text, emailController.text, - contactController.text, + getNumberWithCountryCode(), + // contactController.text, locationController.text, fileNameController.text, websiteController.text, @@ -196,6 +199,34 @@ class _MihBusinessDetailsState extends State { } } + void setContactNumberControllers() { + if (widget.arguments.business!.contact_no[0] == "+") { + List contactDetails = + widget.arguments.business!.contact_no.split("-"); + setState(() { + countryCodeController.text = contactDetails[0]; + contactController.text = contactDetails[1]; + }); + } else { + setState(() { + countryCodeController.text = "+27"; + contactController.text = widget.arguments.business!.contact_no; + }); + } + } + + String getNumberWithCountryCode() { + String numberWithoutBeginingZero = ""; + if (contactController.text[0] == "0") { + numberWithoutBeginingZero = contactController.text + .replaceAll(" ", "") + .substring(1, contactController.text.length); + } else { + numberWithoutBeginingZero = contactController.text.replaceAll("-", " "); + } + return "${countryCodeController.text}-$numberWithoutBeginingZero"; + } + void editBizProfileWindow(double width) { showDialog( context: context, @@ -204,6 +235,7 @@ class _MihBusinessDetailsState extends State { windowTitle: 'Edit Profile', onWindowTapClose: () { Navigator.of(context).pop(); + resetControllers(); }, windowBody: MihSingleChildScroll( child: Padding( @@ -302,20 +334,61 @@ class _MihBusinessDetailsState extends State { }, ), const SizedBox(height: 10), - MihTextFormField( - fillColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - inputColor: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - controller: contactController, - multiLineInput: false, - requiredText: true, - hintText: "Contact Number", - validator: (value) { - return MihValidationServices().isEmpty(value); - }, + Container( + width: 300, + alignment: Alignment.topLeft, + child: const Text( + "Contact Number:", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + CountryCodePicker( + padding: EdgeInsetsGeometry.all(0), + onChanged: (selectedCode) { + setState(() { + countryCodeController.text = + selectedCode.toString(); + }); + debugPrint( + "Selected Country Code: ${countryCodeController.text}"); + }, + initialSelection: countryCodeController.text, + showDropDownButton: false, + pickerStyle: PickerStyle.bottomSheet, + dialogBackgroundColor: + MzansiInnovationHub.of(context)! + .theme + .primaryColor(), + barrierColor: MzansiInnovationHub.of(context)! + .theme + .primaryColor(), + ), + Expanded( + child: MihTextFormField( + fillColor: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + inputColor: MzansiInnovationHub.of(context)! + .theme + .primaryColor(), + controller: contactController, + numberMode: true, + multiLineInput: false, + requiredText: true, + hintText: null, + validator: (value) { + return MihValidationServices() + .isEmpty(value); + }, + ), + ), + ], ), const SizedBox(height: 10), MihTextFormField( @@ -395,7 +468,8 @@ class _MihBusinessDetailsState extends State { requiredText: false, hintText: "Registration No.", validator: (value) { - return MihValidationServices().isEmpty(value); + // return MihValidationServices().isEmpty(value); + return null; }, ), const SizedBox(height: 10), @@ -427,7 +501,8 @@ class _MihBusinessDetailsState extends State { requiredText: false, hintText: "VAT Number", validator: (value) { - return MihValidationServices().isEmpty(value); + // return MihValidationServices().isEmpty(value); + return null; }, ), const SizedBox(height: 10), @@ -535,6 +610,34 @@ class _MihBusinessDetailsState extends State { } } + void resetControllers() { + setState(() { + fileNameController.text = + widget.arguments.business!.logo_path.split("/").last; + regController.text = widget.arguments.business!.registration_no; + nameController.text = widget.arguments.business!.Name; + typeController.text = widget.arguments.business!.type; + practiceNoController.text = widget.arguments.business!.practice_no; + vatNoController.text = widget.arguments.business!.vat_no; + emailController.text = widget.arguments.business!.bus_email; + locationController.text = widget.arguments.business!.gps_location; + websiteController.text = widget.arguments.business!.website; + ratingController.text = widget.arguments.business!.rating; + missionVisionController.text = widget.arguments.business!.mission_vision; + }); + setContactNumberControllers(); + if (AppEnviroment.getEnv() == "Prod") { + env = "Prod"; + } else { + env = "Dev"; + } + missionVisionController.addListener(() { + setState(() { + _counter.value = missionVisionController.text.characters.length; + }); + }); + } + @override void dispose() { super.dispose(); @@ -556,31 +659,7 @@ class _MihBusinessDetailsState extends State { @override void initState() { super.initState(); - setState(() { - fileNameController.text = - widget.arguments.business!.logo_path.split("/").last; - regController.text = widget.arguments.business!.registration_no; - nameController.text = widget.arguments.business!.Name; - typeController.text = widget.arguments.business!.type; - practiceNoController.text = widget.arguments.business!.practice_no; - vatNoController.text = widget.arguments.business!.vat_no; - contactController.text = widget.arguments.business!.contact_no; - emailController.text = widget.arguments.business!.bus_email; - locationController.text = widget.arguments.business!.gps_location; - websiteController.text = widget.arguments.business!.website; - ratingController.text = widget.arguments.business!.rating; - missionVisionController.text = widget.arguments.business!.mission_vision; - }); - if (AppEnviroment.getEnv() == "Prod") { - env = "Prod"; - } else { - env = "Dev"; - } - missionVisionController.addListener(() { - setState(() { - _counter.value = missionVisionController.text.characters.length; - }); - }); + resetControllers(); } @override diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart index 316b7614..90997c3a 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:country_code_picker/country_code_picker.dart'; import 'package:http/http.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; @@ -51,6 +52,7 @@ class _ProfileBusinessAddState extends State { final titleController = TextEditingController(); final signtureController = TextEditingController(); final accessController = TextEditingController(); + final countryCodeController = TextEditingController(); final contactController = TextEditingController(); final emailController = TextEditingController(); final locationController = TextEditingController(); @@ -124,7 +126,8 @@ class _ProfileBusinessAddState extends State { practiceNoController.text, vatNoController.text, emailController.text, - contactController.text, + getNumberWithCountryCode(), + // "${countryCodeController.text}-${contactController.text}", locationController.text, logonameController.text, websiteController.text, @@ -141,6 +144,18 @@ class _ProfileBusinessAddState extends State { } } + String getNumberWithCountryCode() { + String numberWithoutBeginingZero = ""; + if (contactController.text[0] == "0") { + numberWithoutBeginingZero = contactController.text + .replaceAll(" ", "") + .substring(1, contactController.text.length); + } else { + numberWithoutBeginingZero = contactController.text.replaceAll("-", " "); + } + return "${countryCodeController.text}-$numberWithoutBeginingZero"; + } + void internetConnectionPopUp() { showDialog( context: context, @@ -319,17 +334,6 @@ class _ProfileBusinessAddState extends State { return MihValidationServices().isEmpty(value); }, ), - // MihDropdownField( - // controller: typeController, - // hintText: "Business Type", - // dropdownOptions: const ["Doctors Office", "Other"], - // editable: true, - // enableSearch: true, - // validator: (value) { - // return MihValidationServices().isEmpty(value); - // }, - // requiredText: true, - // ), const SizedBox(height: 10.0), MihTextFormField( fillColor: MzansiInnovationHub.of(context)! @@ -347,20 +351,60 @@ class _ProfileBusinessAddState extends State { }, ), const SizedBox(height: 10.0), - MihTextFormField( - fillColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - inputColor: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - controller: contactController, - multiLineInput: false, - requiredText: true, - hintText: "Contact Number", - validator: (value) { - return MihValidationServices().isEmpty(value); - }, + Container( + width: 300, + alignment: Alignment.topLeft, + child: const Text( + "Contact Number:", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + CountryCodePicker( + padding: EdgeInsetsGeometry.all(0), + onChanged: (selectedCode) { + setState(() { + countryCodeController.text = + selectedCode.toString(); + }); + debugPrint( + "Selected Country Code: ${countryCodeController.text}"); + }, + initialSelection: '+27', + showDropDownButton: false, + pickerStyle: PickerStyle.bottomSheet, + dialogBackgroundColor: + MzansiInnovationHub.of(context)! + .theme + .primaryColor(), + barrierColor: MzansiInnovationHub.of(context)! + .theme + .primaryColor(), + ), + Expanded( + child: MihTextFormField( + fillColor: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + inputColor: MzansiInnovationHub.of(context)! + .theme + .primaryColor(), + controller: contactController, + numberMode: true, + multiLineInput: false, + requiredText: true, + hintText: null, + validator: (value) { + return MihValidationServices().isEmpty(value); + }, + ), + ), + ], ), const SizedBox(height: 10.0), MihTextFormField( From 526fb64335c23fa71bc42b25ac19da477b824ca9 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Wed, 6 Aug 2025 11:42:39 +0200 Subject: [PATCH 14/27] remove second edit profile buttons --- .../package_tools/mih_business_details.dart | 56 +++++++++---------- .../package_tools/mih_personal_profile.dart | 56 +++++++++---------- 2 files changed, 54 insertions(+), 58 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart index db5e6c5f..6c0dd053 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart @@ -1,9 +1,7 @@ import 'package:country_code_picker/country_code_picker.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart'; @@ -800,33 +798,33 @@ class _MihBusinessDetailsState extends State { ), ), ), - Positioned( - right: 5, - bottom: 10, - child: MihFloatingMenu( - animatedIcon: AnimatedIcons.menu_close, - children: [ - SpeedDialChild( - child: Icon( - Icons.edit, - color: MzansiInnovationHub.of(context)!.theme.primaryColor(), - ), - label: "Edit Profile", - labelBackgroundColor: - MzansiInnovationHub.of(context)!.theme.successColor(), - labelStyle: TextStyle( - color: MzansiInnovationHub.of(context)!.theme.primaryColor(), - fontWeight: FontWeight.bold, - ), - backgroundColor: - MzansiInnovationHub.of(context)!.theme.successColor(), - onTap: () { - editBizProfileWindow(width); - }, - ) - ], - ), - ), + // Positioned( + // right: 5, + // bottom: 10, + // child: MihFloatingMenu( + // animatedIcon: AnimatedIcons.menu_close, + // children: [ + // SpeedDialChild( + // child: Icon( + // Icons.edit, + // color: MzansiInnovationHub.of(context)!.theme.primaryColor(), + // ), + // label: "Edit Profile", + // labelBackgroundColor: + // MzansiInnovationHub.of(context)!.theme.successColor(), + // labelStyle: TextStyle( + // color: MzansiInnovationHub.of(context)!.theme.primaryColor(), + // fontWeight: FontWeight.bold, + // ), + // backgroundColor: + // MzansiInnovationHub.of(context)!.theme.successColor(), + // onTap: () { + // editBizProfileWindow(width); + // }, + // ) + // ], + // ), + // ), ], ); } diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart index ce3a7209..ce17f9ce 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart @@ -1,6 +1,4 @@ -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; @@ -564,33 +562,33 @@ class _MihPersonalProfileState extends State { ), ), ), - Positioned( - right: 5, - bottom: 10, - child: MihFloatingMenu( - animatedIcon: AnimatedIcons.menu_close, - children: [ - SpeedDialChild( - child: Icon( - Icons.edit, - color: MzansiInnovationHub.of(context)!.theme.primaryColor(), - ), - label: "Edit Profile", - labelBackgroundColor: - MzansiInnovationHub.of(context)!.theme.successColor(), - labelStyle: TextStyle( - color: MzansiInnovationHub.of(context)!.theme.primaryColor(), - fontWeight: FontWeight.bold, - ), - backgroundColor: - MzansiInnovationHub.of(context)!.theme.successColor(), - onTap: () { - editProfileWindow(width); - }, - ) - ], - ), - ), + // Positioned( + // right: 5, + // bottom: 10, + // child: MihFloatingMenu( + // animatedIcon: AnimatedIcons.menu_close, + // children: [ + // SpeedDialChild( + // child: Icon( + // Icons.edit, + // color: MzansiInnovationHub.of(context)!.theme.primaryColor(), + // ), + // label: "Edit Profile", + // labelBackgroundColor: + // MzansiInnovationHub.of(context)!.theme.successColor(), + // labelStyle: TextStyle( + // color: MzansiInnovationHub.of(context)!.theme.primaryColor(), + // fontWeight: FontWeight.bold, + // ), + // backgroundColor: + // MzansiInnovationHub.of(context)!.theme.successColor(), + // onTap: () { + // editProfileWindow(width); + // }, + // ) + // ], + // ), + // ), ], ); } From 8316f972e54bc16ee88e9d0f69d4a1744811bcb1 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Wed, 6 Aug 2025 19:33:29 +0200 Subject: [PATCH 15/27] fix country code bug --- .../mzansi_profile/business_profile/profile_business_add.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart index 90997c3a..2bd8596f 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/profile_business_add.dart @@ -375,7 +375,7 @@ class _ProfileBusinessAddState extends State { debugPrint( "Selected Country Code: ${countryCodeController.text}"); }, - initialSelection: '+27', + initialSelection: countryCodeController.text, showDropDownButton: false, pickerStyle: PickerStyle.bottomSheet, dialogBackgroundColor: @@ -752,6 +752,7 @@ class _ProfileBusinessAddState extends State { fnameController.text = widget.signedInUser.fname; lnameController.text = widget.signedInUser.lname; accessController.text = "Full"; + countryCodeController.text = "+27"; }); if (AppEnviroment.getEnv() == "Prod") { env = "Prod"; From 1caf8aaf7bbb6dedd1d53043007efdfb82dbf2a1 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 10:30:24 +0200 Subject: [PATCH 16/27] Mzansi Wallet No data message enhanced --- .../builder/build_loyalty_card_list.dart | 162 ++++++++++++------ .../package_tools/mih_card_favourites.dart | 1 + .../package_tools/mih_cards.dart | 1 + 3 files changed, 116 insertions(+), 48 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index f7d07f9a..39d11d80 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -22,6 +22,7 @@ class BuildLoyaltyCardList extends StatefulWidget { final List cardList; final int navIndex; final MihBannerAd? bannerAd; + final bool favouritesMode; final void Function()? onCardViewClose; const BuildLoyaltyCardList({ @@ -29,6 +30,7 @@ class BuildLoyaltyCardList extends StatefulWidget { required this.signedInUser, required this.cardList, required this.navIndex, + required this.favouritesMode, this.bannerAd, this.onCardViewClose, }); @@ -524,59 +526,123 @@ class _BuildLoyaltyCardListState extends State { }, ); } else { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.iDontKnow, - size: 165, - color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), - ), - const SizedBox(height: 10), - Text( - "No Cards added yo your Mzansi Wallet.", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, + if (!widget.favouritesMode) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), - ), - Center( - child: RichText( + const SizedBox(height: 10), + Text( + "No Cards added to your Mzansi Wallet.", textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: - MzansiInnovationHub.of(context)!.theme.secondaryColor(), - ), - children: [ - TextSpan(text: "Press "), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - Icons.menu, - size: 25, - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - ), - TextSpan(text: " to add your first loyalty card."), - ], + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), ), - ), - ], - ), - ); + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan(text: " to add your first loyalty card."), + ], + ), + ), + ), + ], + ), + ); + } else { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "No Favourite Cards in your Mzansi Wallet.", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan( + text: + " when viewing loyalty card to add it to your favorites."), + ], + ), + ), + ), + ], + ), + ); + } } } } diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart index 97f909a4..b14351de 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart @@ -63,6 +63,7 @@ class _MihCardFavouritesState extends State { signedInUser: widget.signedInUser, navIndex: 0, bannerAd: _bannerAd, + favouritesMode: true, onCardViewClose: () { setState(() { _bannerAd = MihBannerAd(); diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart index d2c03791..cb340a33 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart @@ -372,6 +372,7 @@ class _MihCardsState extends State { signedInUser: widget.signedInUser, navIndex: 0, bannerAd: _bannerAd, + favouritesMode: false, onCardViewClose: () { setState(() { _bannerAd = MihBannerAd(); From 3cf3bb98ba5022e8b134fb6912690039bcaae321 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 10:44:55 +0200 Subject: [PATCH 17/27] Mzansi Directory No data message enhanced --- .../mih_favourite_businesses.dart | 243 ++++++++++++------ .../package_tools/mih_search_mzansi.dart | 204 ++++++++++++--- 2 files changed, 332 insertions(+), 115 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart index fb018a73..6ce6950a 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/bookmarked_business.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.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_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; @@ -139,63 +140,97 @@ class _MihFavouriteBusinessesState extends State { // Display message if no results after search if (businesses.isEmpty && businessSearchController.text.isNotEmpty) { - return Column( - children: [ - const SizedBox(height: 50), - Icon( - Icons - .search_off_rounded, // A different icon for "no results" - size: 150, - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 10.0), - child: SizedBox( - width: 500, - child: Text( - "No businesses found for '${businessSearchController.text}'", // Specific message for no search results + return Padding( + padding: + const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.businessProfile, + size: 165, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "No Businesses added to your Favourites", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Use the Mzansi Search"), + // WidgetSpan( + // alignment: + // PlaceholderAlignment.middle, + // child: Icon( + // Icons.search, + // size: 20, + // color: + // MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + TextSpan( + text: + " to find Businesses of Mzansi"), + ], ), ), ), - ), - ], - ); - } else if (businesses.isEmpty) { - // Initial empty state - return Column( - children: [ - const SizedBox(height: 50), - Icon( - Icons.business_center_rounded, - size: 150, - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 10.0), - child: SizedBox( - width: 500, - child: Text( - "No favourites yet, use Mzansi Search to find and bookmark businesses you like", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - ], + ], + ), ); + // return Column( + // children: [ + // const SizedBox(height: 50), + // Icon( + // Icons.business_center_rounded, + // size: 150, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // Padding( + // padding: const EdgeInsets.symmetric( + // horizontal: 10.0), + // child: SizedBox( + // width: 500, + // child: Text( + // "No favourites yet, use Mzansi Search to find and bookmark businesses you like", + // textAlign: TextAlign.center, + // style: TextStyle( + // fontSize: 18, + // fontWeight: FontWeight.bold, + // ), + // ), + // ), + // ), + // ], + // ); } return BuildFavouriteBusinessesList( favouriteBusinesses: @@ -206,32 +241,94 @@ class _MihFavouriteBusinessesState extends State { ); } else { // This block handles the case where there are no bookmarked businesses initially - return Column( - children: [ - const SizedBox(height: 50), - Icon( - Icons.business_center_rounded, - size: 150, - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: SizedBox( - width: 500, - child: Text( - "No favourites yet, use Mzansi Search to find and bookmark businesses you like", + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.businessProfile, + size: 165, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "No Businesses added to your Favourites", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Use the Mzansi Search"), + // WidgetSpan( + // alignment: + // PlaceholderAlignment.middle, + // child: Icon( + // Icons.search, + // size: 20, + // color: + // MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + TextSpan( + text: " to find Businesses of Mzansi"), + ], ), ), ), - ), - ], + ], + ), ); + // return Column( + // children: [ + // const SizedBox(height: 50), + // Icon( + // Icons.business_center_rounded, + // size: 150, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // Padding( + // padding: const EdgeInsets.symmetric(horizontal: 10.0), + // child: SizedBox( + // width: 500, + // child: Text( + // "No favourites yet, use Mzansi Search to find and bookmark businesses you like", + // textAlign: TextAlign.center, + // style: TextStyle( + // fontSize: 18, + // fontWeight: FontWeight.bold, + // ), + // ), + // ), + // ), + // ], + // ); } } else if (snapshot.hasError) { return Center( diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart index 714f20a8..cb8a2806 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart @@ -282,31 +282,89 @@ class _MihSearchMzansiState extends State { ], ); } else if (!snapshot.hasData) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.personalProfile, - size: 165, - color: - MzansiInnovationHub.of(context)!.theme.secondaryColor(), - ), - const SizedBox(height: 10), - Text( - "People Of Mzansi!", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.personalProfile, + size: 165, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), - ), - ], + const SizedBox(height: 10), + Text( + "Search for People Of Mzansi!", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.swap_horiz_rounded, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan(text: " to search for Businesses of Mzansi"), + ], + ), + ), + ), + ], + ), ); + // return Column( + // mainAxisAlignment: MainAxisAlignment.center, + // crossAxisAlignment: CrossAxisAlignment.center, + // children: [ + // const SizedBox(height: 50), + // Icon( + // MihIcons.personalProfile, + // size: 165, + // color: + // MzansiInnovationHub.of(context)!.theme.secondaryColor(), + // ), + // const SizedBox(height: 10), + // Text( + // "People Of Mzansi!", + // textAlign: TextAlign.center, + // overflow: TextOverflow.visible, + // style: TextStyle( + // fontSize: 25, + // fontWeight: FontWeight.bold, + // color: + // MzansiInnovationHub.of(context)!.theme.secondaryColor(), + // ), + // ), + // ], + // ); } else if (snapshot.connectionState == ConnectionState.done && snapshot.hasData && snapshot.requireData!.isEmpty) { @@ -400,30 +458,92 @@ class _MihSearchMzansiState extends State { ], ); } else if (!snapshot.hasData) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.businessProfile, - size: 165, - color: - MzansiInnovationHub.of(context)!.theme.secondaryColor(), - ), - const SizedBox(height: 10), - Text( - "Businesses Of Mzansi!", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.personalProfile, + size: 165, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), - ), - ], + const SizedBox(height: 10), + Text( + "Search for Business Of Mzansi!", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.swap_horiz_rounded, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan(text: " to search for People of Mzansi"), + ], + ), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.filter_list_rounded, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan(text: " to filter business types"), + ], + ), + ), + ), + ], + ), ); } else { return Center( From 488da572697f84815e38decfb254c4094fabb48f Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 10:53:16 +0200 Subject: [PATCH 18/27] Mzansi Calendar No data message enhanced --- .../calendar/package_tools/appointments.dart | 81 ++++++++++++++++--- 1 file changed, 70 insertions(+), 11 deletions(-) diff --git a/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart b/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart index e2ea3fa9..5077edce 100644 --- a/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart +++ b/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart @@ -1,4 +1,5 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; @@ -83,21 +84,79 @@ class _PatientAccessRequestState extends State { } return Expanded( child: Padding( - padding: const EdgeInsets.only(top: 35.0), - child: Align( - alignment: Alignment.center, - child: Text( - "No Appointments for $selectedDay", - style: TextStyle( - fontSize: 25, - color: MzansiInnovationHub.of(context)!.theme.messageTextColor(), + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.calendar, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), - textAlign: TextAlign.center, - softWrap: true, - ), + const SizedBox(height: 10), + Text( + "No Appointments for $selectedDay", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan( + text: + " to add an appointment or select a different date"), + ], + ), + ), + ), + ], ), ), ); + // return Expanded( + // child: Padding( + // padding: const EdgeInsets.only(top: 35.0), + // child: Align( + // alignment: Alignment.center, + // child: Text( + // "No Appointments for $selectedDay", + // style: TextStyle( + // fontSize: 25, + // color: MzansiInnovationHub.of(context)!.theme.messageTextColor(), + // ), + // textAlign: TextAlign.center, + // softWrap: true, + // ), + // ), + // ), + // ); } void addAppointmentWindow(double width) { From ff8da712bb310baa1452b1b260e71c6d6f34fda1 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 11:03:53 +0200 Subject: [PATCH 19/27] Mzansi AI No data message enhanced --- .../mzansi_ai/package_tools/ai_chat.dart | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart b/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart index 67dfa582..a453116c 100644 --- a/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart +++ b/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_numeric_stepper.dart'; @@ -653,6 +654,7 @@ class _AiChatState extends State { }, child: Chat( messages: _messages, + emptyState: noMessagescDisplay(), // onAttachmentPressed: _handleAttachmentPressed, // onMessageTap: _handleMessageTap, // onPreviewDataFetched: _handlePreviewDataFetched, @@ -794,4 +796,63 @@ class _AiChatState extends State { ], ); } + + Widget? noMessagescDisplay() { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.mzansiAi, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "Mzansi AI is here to help", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan( + text: + "Send us a message and we'll try our best to assist you"), + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: Icon( + // Icons.menu, + // size: 20, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + // TextSpan(text: " to add your first loyalty card."), + ], + ), + ), + ), + ], + ), + ); + } } From dc4b82091f2b80699364321b8df8833702d41ff3 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 11:08:17 +0200 Subject: [PATCH 20/27] Access Controls No data message enhanced --- .../package_tools/mih_access_requests.dart | 75 +++++++++++++++++-- 1 file changed, 68 insertions(+), 7 deletions(-) diff --git a/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart b/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart index 5eb6cfb1..97d0bf67 100644 --- a/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart +++ b/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart @@ -1,3 +1,4 @@ +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; @@ -186,17 +187,77 @@ class _MihAccessRequestState extends State { patientAccessList: accessRequestList, ); } else { - return Center( - child: Text( - "No Request have been made.", - style: TextStyle( - fontSize: 25, + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.accessControl, + size: 165, color: MzansiInnovationHub.of(context)! .theme - .messageTextColor()), - textAlign: TextAlign.center, + .secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "No Access has been granted to your MIH Profile", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + // const SizedBox(height: 10), + // Center( + // child: RichText( + // textAlign: TextAlign.center, + // text: TextSpan( + // style: TextStyle( + // fontSize: 20, + // fontWeight: FontWeight.normal, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // children: [ + // TextSpan(text: "Press "), + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: Icon( + // Icons.menu, + // size: 20, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + // TextSpan( + // text: " to add your first loyalty card."), + // ], + // ), + // ), + // ), + ], ), ); + // return Center( + // child: Text( + // "No Request have been made.", + // style: TextStyle( + // fontSize: 25, + // color: MzansiInnovationHub.of(context)! + // .theme + // .messageTextColor()), + // textAlign: TextAlign.center, + // ), + // ); } // return Expanded( From 4755e5b6bd9ff4007750c0a4250954d09f85d98f Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 11:14:07 +0200 Subject: [PATCH 21/27] fix icons and remove . --- .../package_tools/mih_search_mzansi.dart | 4 ++-- .../mzansi_setup_business_profile_tile.dart | 2 +- .../builder/build_loyalty_card_list.dart | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart index cb8a2806..81a1fde9 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart @@ -211,7 +211,7 @@ class _MihSearchMzansiState extends State { Expanded( child: MihDropdownField( controller: businessTypeController, - hintText: "Business Type Filter", + hintText: "Business Type", dropdownOptions: options, requiredText: true, editable: true, @@ -466,7 +466,7 @@ class _MihSearchMzansiState extends State { children: [ const SizedBox(height: 50), Icon( - MihIcons.personalProfile, + MihIcons.businessProfile, size: 165, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart index 790ac157..35aa1798 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart @@ -31,7 +31,7 @@ class _MzansiSetupBusinessProfileTileState }, appName: "Set Up Business", appIcon: Icon( - MihIcons.profileSetup, + MihIcons.businessSetup, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), iconSize: widget.packageSize, diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index 39d11d80..ea3e904f 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -535,13 +535,13 @@ class _BuildLoyaltyCardListState extends State { children: [ const SizedBox(height: 50), Icon( - MihIcons.iDontKnow, + MihIcons.mzansiWallet, size: 165, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), const SizedBox(height: 10), Text( - "No Cards added to your Mzansi Wallet.", + "No Cards added to your Mzansi Wallet", textAlign: TextAlign.center, overflow: TextOverflow.visible, style: TextStyle( @@ -575,7 +575,7 @@ class _BuildLoyaltyCardListState extends State { .secondaryColor(), ), ), - TextSpan(text: " to add your first loyalty card."), + TextSpan(text: " to add your first loyalty card"), ], ), ), @@ -592,13 +592,13 @@ class _BuildLoyaltyCardListState extends State { children: [ const SizedBox(height: 50), Icon( - MihIcons.iDontKnow, + MihIcons.mzansiWallet, size: 165, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), const SizedBox(height: 10), Text( - "No Favourite Cards in your Mzansi Wallet.", + "No Favourite Cards in your Mzansi Wallet", textAlign: TextAlign.center, overflow: TextOverflow.visible, style: TextStyle( @@ -634,7 +634,7 @@ class _BuildLoyaltyCardListState extends State { ), TextSpan( text: - " when viewing loyalty card to add it to your favorites."), + " when viewing loyalty card to add it to your favorites"), ], ), ), From 82f4044eac427e32a3f15856abf0f55d38af3f55 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 11:24:14 +0200 Subject: [PATCH 22/27] Mzansi Business Profile No data message enhanced --- .../package_tools/mih_business_reviews.dart | 109 +++++++++++++++--- .../mih_business_user_search.dart | 69 +++++++++-- 2 files changed, 154 insertions(+), 24 deletions(-) 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 12683c97..96bc0fc0 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 @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; 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_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart'; @@ -60,25 +61,99 @@ class _MihBusinessReviewsState extends State { List reviews = asyncSnapshot.data!; print("Reviews: ${reviews.length}"); if (reviews.isEmpty) { - return Column( - children: [ - const SizedBox(height: 50), - Icon( - Icons.star_rate_rounded, - size: 150, - color: - MzansiInnovationHub.of(context)!.theme.secondaryColor(), - ), - Text( - "No reviews yet, be the first the review\n${widget.business.Name}", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + // crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Stack( + alignment: AlignmentDirectional.center, + children: [ + Padding( + padding: const EdgeInsets.only(top: 10.0), + child: Icon( + MihIcons.mihRing, + size: 165, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + Icon( + Icons.star_rate_rounded, + size: 150, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ], ), - ), - ], + const SizedBox(height: 10), + Text( + "No reviews yet, be the first the review ${widget.business.Name}", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + // const SizedBox(height: 10), + // Center( + // child: RichText( + // textAlign: TextAlign.center, + // text: TextSpan( + // style: TextStyle( + // fontSize: 20, + // fontWeight: FontWeight.normal, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // children: [ + // TextSpan(text: "Press "), + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: Icon( + // Icons.menu, + // size: 20, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + // TextSpan(text: " to add your first loyalty card"), + // ], + // ), + // ), + // ), + ], + ), ); + // return Column( + // children: [ + // const SizedBox(height: 50), + // Icon( + // Icons.star_rate_rounded, + // size: 150, + // color: + // MzansiInnovationHub.of(context)!.theme.secondaryColor(), + // ), + // Text( + // "No reviews yet, be the first the review\n${widget.business.Name}", + // textAlign: TextAlign.center, + // style: TextStyle( + // fontSize: 18, + // fontWeight: FontWeight.bold, + // ), + // ), + // ], + // ); } else { int descriptionDisplayCOunt = 75; return ListView.separated( 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 49cfbeb8..ebb72810 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 @@ -1,4 +1,5 @@ import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.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_search_bar.dart'; @@ -61,15 +62,69 @@ class _MihBusinessUserSearchState extends State { arguments: widget.arguments, ); } - return Center( - child: Text( - "Enter Username or Email to search", - style: TextStyle( - fontSize: 25, - color: MzansiInnovationHub.of(context)!.theme.messageTextColor()), - textAlign: TextAlign.center, + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.personalProfile, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "Search for a Member of Mzansi to add to your team", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + // const SizedBox(height: 10), + // Center( + // child: RichText( + // textAlign: TextAlign.center, + // text: TextSpan( + // style: TextStyle( + // fontSize: 20, + // fontWeight: FontWeight.normal, + // color: + // MzansiInnovationHub.of(context)!.theme.secondaryColor(), + // ), + // children: [ + // TextSpan(text: "Press "), + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: Icon( + // Icons.menu, + // size: 20, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + // TextSpan(text: " to add your first loyalty card"), + // ], + // ), + // ), + // ), + ], ), ); + // return Center( + // child: Text( + // "Enter Username or Email to search", + // style: TextStyle( + // fontSize: 25, + // color: MzansiInnovationHub.of(context)!.theme.messageTextColor()), + // textAlign: TextAlign.center, + // ), + // ); } @override From acb1b72c9a9e03f8841b34e9bfee6148ca4d63cd Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 11:55:04 +0200 Subject: [PATCH 23/27] user seach in bus prof --- .../mih_business_user_search.dart | 57 ++++++++++--------- 1 file changed, 29 insertions(+), 28 deletions(-) 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 ebb72810..8fef1ace 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 @@ -85,34 +85,35 @@ class _MihBusinessUserSearchState extends State { color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), ), - // const SizedBox(height: 10), - // Center( - // child: RichText( - // textAlign: TextAlign.center, - // text: TextSpan( - // style: TextStyle( - // fontSize: 20, - // fontWeight: FontWeight.normal, - // color: - // MzansiInnovationHub.of(context)!.theme.secondaryColor(), - // ), - // children: [ - // TextSpan(text: "Press "), - // WidgetSpan( - // alignment: PlaceholderAlignment.middle, - // child: Icon( - // Icons.menu, - // size: 20, - // color: MzansiInnovationHub.of(context)! - // .theme - // .secondaryColor(), - // ), - // ), - // TextSpan(text: " to add your first loyalty card"), - // ], - // ), - // ), - // ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan( + text: "You can search using their Username or Email"), + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: Icon( + // Icons.menu, + // size: 20, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + // TextSpan(text: " to add your first loyalty card"), + ], + ), + ), + ), ], ), ); From f9a74aeb21fb33a32e342612e896643f1c72499c Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 11:55:22 +0200 Subject: [PATCH 24/27] Patient Manager No data message enhanced --- .../package_tools/mih_patient_search.dart | 75 ++++++++++++++--- .../package_tools/my_patient_list.dart | 74 ++++++++++++++--- .../package_tools/waiting_room.dart | 81 ++++++++++++++++--- 3 files changed, 201 insertions(+), 29 deletions(-) diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart index 7f362826..5883e8cd 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart @@ -1,4 +1,5 @@ import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_service_calls.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; @@ -140,18 +141,74 @@ class _MihPatientSearchState extends State { ); } else { return Padding( - padding: const EdgeInsets.only(top: 35.0), - child: Center( - child: Text( - "Enter ID or Medical Aid No. of Patient", - style: TextStyle( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.patientProfile, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "Search for a Patient of Mzansi to add to your Patient List", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( fontSize: 25, - color: - MzansiInnovationHub.of(context)!.theme.messageTextColor()), - textAlign: TextAlign.center, - ), + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan( + text: + "You can search using their teamtient ID or Medical Aid No."), + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: Icon( + // Icons.menu, + // size: 20, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + // TextSpan(text: " to add your first loyalty card"), + ], + ), + ), + ), + ], ), ); + // return Padding( + // padding: const EdgeInsets.only(top: 35.0), + // child: Center( + // child: Text( + // "Enter ID or Medical Aid No. of Patient", + // style: TextStyle( + // fontSize: 25, + // color: + // MzansiInnovationHub.of(context)!.theme.messageTextColor()), + // textAlign: TextAlign.center, + // ), + // ), + // ); } } diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart index b5898c15..08ab3295 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart @@ -1,4 +1,5 @@ import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_service_calls.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; @@ -11,7 +12,6 @@ import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.d import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_profile/pat_manager/list_builders/build_my_patient_list_list.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; class MyPatientList extends StatefulWidget { final AppUser signedInUser; @@ -115,17 +115,73 @@ class _MyPatientListState extends State { ); } return Padding( - padding: const EdgeInsets.only(top: 35.0), - child: Center( - child: Text( - "No Patients matching search", - style: TextStyle( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.patientProfile, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "You dont have access to any Patients Profile", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( fontSize: 25, - color: MzansiInnovationHub.of(context)!.theme.messageTextColor()), - textAlign: TextAlign.center, - ), + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.search, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan( + text: + " to use Patient Search to request access to their profile."), + ], + ), + ), + ), + ], ), ); + // return Padding( + // padding: const EdgeInsets.only(top: 35.0), + // child: Center( + // child: Text( + // "No Patients matching search", + // style: TextStyle( + // fontSize: 25, + // color: MzansiInnovationHub.of(context)!.theme.messageTextColor()), + // textAlign: TextAlign.center, + // ), + // ), + // ); } List filterAccessResults( diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/waiting_room.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/waiting_room.dart index 8affdaee..4e931554 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/waiting_room.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/waiting_room.dart @@ -1,5 +1,6 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; @@ -170,21 +171,79 @@ class _WaitingRoomState extends State { } return Expanded( child: Padding( - padding: const EdgeInsets.only(top: 35.0), - child: Align( - alignment: Alignment.center, - child: Text( - "No Appointments for $selectedDay", - style: TextStyle( - fontSize: 25, - color: MzansiInnovationHub.of(context)!.theme.messageTextColor(), + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.calendar, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), - textAlign: TextAlign.center, - softWrap: true, - ), + const SizedBox(height: 10), + Text( + "No Appointments for $selectedDay", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan( + text: + " to add an appointment or select a different date"), + ], + ), + ), + ), + ], ), ), ); + // return Expanded( + // child: Padding( + // padding: const EdgeInsets.only(top: 35.0), + // child: Align( + // alignment: Alignment.center, + // child: Text( + // "No Appointments for $selectedDay", + // style: TextStyle( + // fontSize: 25, + // color: MzansiInnovationHub.of(context)!.theme.messageTextColor(), + // ), + // textAlign: TextAlign.center, + // softWrap: true, + // ), + // ), + // ), + // ); } void appointmentTypeSelection(double width) { From 0da4df8a93e54fa416214dd67ee99d2fc5ed8d48 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 12:11:26 +0200 Subject: [PATCH 25/27] Patient Profile No data message enhanced --- .../build_claim_statement_files_list.dart | 74 +++++++++++++++-- .../list_builders/build_files_list.dart | 80 ++++++++++++++++-- .../list_builders/build_notes_list.dart | 81 +++++++++++++++++-- 3 files changed, 220 insertions(+), 15 deletions(-) diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_claim_statement_files_list.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_claim_statement_files_list.dart index 858ba93e..b5a1dfdb 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_claim_statement_files_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_claim_statement_files_list.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:fl_downloader/fl_downloader.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_claim_statement_generation_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; @@ -349,11 +350,74 @@ class _BuildClaimStatementFileListState }, ); } else { - return const Center( - child: Text( - "No Documents Available", - style: TextStyle(fontSize: 25, color: Colors.grey), - textAlign: TextAlign.center, + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + // crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Stack( + alignment: AlignmentDirectional.center, + children: [ + Icon( + MihIcons.mihRing, + size: 165, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + Icon( + Icons.file_open_outlined, + size: 110, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ], + ), + const SizedBox(height: 10), + Text( + "No Claims or Statements have been added to this profile.", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Visibility( + visible: widget.business != null, + child: Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan(text: " to generate the first document"), + ], + ), + ), + ), + ), + ], ), ); } diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_files_list.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_files_list.dart index c24ea631..89c76db8 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_files_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_files_list.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'package:fl_downloader/fl_downloader.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; @@ -400,13 +401,82 @@ class _BuildFilesListState extends State { }, ); } else { - return const Center( - child: Text( - "No Documents Available", - style: TextStyle(fontSize: 25, color: Colors.grey), - textAlign: TextAlign.center, + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + // crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Stack( + alignment: AlignmentDirectional.center, + children: [ + Icon( + MihIcons.mihRing, + size: 165, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + Icon( + Icons.file_present, + size: 110, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ], + ), + const SizedBox(height: 10), + Text( + "No Documents have been added to this profile.", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan(text: " to add "), + widget.business != null + ? TextSpan(text: " or generate a the first document") + : TextSpan(text: " the first document"), + ], + ), + ), + ), + ], ), ); + // return const Center( + // child: Text( + // "No Documents Available", + // style: TextStyle(fontSize: 25, color: Colors.grey), + // textAlign: TextAlign.center, + // ), + // ); } } } diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_notes_list.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_notes_list.dart index da33b4e8..6a131386 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_notes_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_profile/list_builders/build_notes_list.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; @@ -281,13 +282,83 @@ class _BuildNotesListState extends State { }, ); } else { - return const Center( - child: Text( - "No Notes Available", - style: TextStyle(fontSize: 25, color: Colors.grey), - textAlign: TextAlign.center, + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + // crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Stack( + alignment: AlignmentDirectional.center, + children: [ + Icon( + MihIcons.mihRing, + size: 165, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + Icon( + Icons.article_outlined, + size: 110, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ], + ), + const SizedBox(height: 10), + Text( + "No Notes have been added to this profile.", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + const SizedBox(height: 10), + Visibility( + visible: widget.business != null, + child: Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan(text: " to add the first note"), + ], + ), + ), + ), + ), + ], ), ); + // return const Center( + // child: Text( + // "No Notes Available", + // style: TextStyle(fontSize: 25, color: Colors.grey), + // textAlign: TextAlign.center, + // ), + // ); } } } From 9eee91bdb1c790066e4bb1a73b46a2cfec92c991 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 12:24:34 +0200 Subject: [PATCH 26/27] refine your search message --- .../mih_business_user_search.dart | 99 ++++++++++------- .../package_tools/mih_patient_search.dart | 32 ++++-- .../package_tools/my_patient_list.dart | 100 +++++++++++------- 3 files changed, 146 insertions(+), 85 deletions(-) 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 8fef1ace..04a46c1e 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 @@ -25,7 +25,7 @@ class _MihBusinessUserSearchState extends State { final TextEditingController searchController = TextEditingController(); late Future> userSearchResults; final FocusNode _searchFocusNode = FocusNode(); - + bool hasSearchedBefore = false; String userSearch = ""; String errorCode = ""; String errorBody = ""; @@ -50,6 +50,7 @@ class _MihBusinessUserSearchState extends State { if (searchController.text != "") { setState(() { userSearch = searchController.text; + hasSearchedBefore = true; userSearchResults = fetchUsers(userSearch); }); } @@ -62,21 +63,18 @@ class _MihBusinessUserSearchState extends State { arguments: widget.arguments, ); } - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, + if (hasSearchedBefore && userSearch.isNotEmpty) { + return Column( children: [ const SizedBox(height: 50), Icon( - MihIcons.personalProfile, + MihIcons.iDontKnow, size: 165, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), const SizedBox(height: 10), Text( - "Search for a Member of Mzansi to add to your team", + "Let's Try Refining Your Search", textAlign: TextAlign.center, overflow: TextOverflow.visible, style: TextStyle( @@ -85,38 +83,65 @@ class _MihBusinessUserSearchState extends State { color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), ), - const SizedBox(height: 10), - Center( - child: RichText( + ], + ); + } else { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.personalProfile, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "Search for a Member of Mzansi to add to your team", textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: - MzansiInnovationHub.of(context)!.theme.secondaryColor(), - ), - children: [ - TextSpan( - text: "You can search using their Username or Email"), - // WidgetSpan( - // alignment: PlaceholderAlignment.middle, - // child: Icon( - // Icons.menu, - // size: 20, - // color: MzansiInnovationHub.of(context)! - // .theme - // .secondaryColor(), - // ), - // ), - // TextSpan(text: " to add your first loyalty card"), - ], + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), ), - ), - ], - ), - ); + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan( + text: "You can search using their Username or Email"), + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: Icon( + // Icons.menu, + // size: 20, + // color: MzansiInnovationHub.of(context)! + // .theme + // .secondaryColor(), + // ), + // ), + // TextSpan(text: " to add your first loyalty card"), + ], + ), + ), + ), + ], + ), + ); + } // return Center( // child: Text( // "Enter Username or Email to search", diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart index 5883e8cd..fa5f9ff3 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart @@ -36,6 +36,7 @@ class _MihPatientSearchState extends State { TextEditingController _mihPatientSearchController = TextEditingController(); final FocusNode _focusNode = FocusNode(); final FocusNode _searchFocusNode = FocusNode(); + bool hasSearchedBefore = false; String _mihPatientSearchString = ""; String baseUrl = AppEnviroment.baseApiUrl; late Future> _mihPatientSearchResults; @@ -126,18 +127,26 @@ class _MihPatientSearchState extends State { personalSelected: widget.personalSelected, ); } else if (patientsList.isEmpty && searchString != "") { - return Padding( - padding: const EdgeInsets.only(top: 35.0), - child: Center( - child: Text( - "No ID or Medical Aid No. matches a Patient", - style: TextStyle( - fontSize: 25, - color: - MzansiInnovationHub.of(context)!.theme.messageTextColor()), - textAlign: TextAlign.center, + return Column( + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), - ), + const SizedBox(height: 10), + Text( + "Let's Try Refining Your Search", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + ], ); } else { return Padding( @@ -218,6 +227,7 @@ class _MihPatientSearchState extends State { _mihPatientSearchString = _mihPatientSearchController.text; _mihPatientSearchResults = MIHApiCalls.fetchPatients(_mihPatientSearchString); + hasSearchedBefore = true; }); } } diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart index 08ab3295..a908e555 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart @@ -35,6 +35,7 @@ class _MyPatientListState extends State { late Future> _myPatientList; TextEditingController _myPatientSearchController = TextEditingController(); final FocusNode _searchFocusNode = FocusNode(); + bool hasSearchedBefore = false; String _myPatientIdSearchString = ""; String baseUrl = AppEnviroment.baseApiUrl; @@ -114,21 +115,18 @@ class _MyPatientListState extends State { businessUser: widget.businessUser, ); } - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, + if (hasSearchedBefore && _myPatientIdSearchString.isNotEmpty) { + return Column( children: [ const SizedBox(height: 50), Icon( - MihIcons.patientProfile, + MihIcons.iDontKnow, size: 165, color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), const SizedBox(height: 10), Text( - "You dont have access to any Patients Profile", + "Let's Try Refining Your Search", textAlign: TextAlign.center, overflow: TextOverflow.visible, style: TextStyle( @@ -137,39 +135,66 @@ class _MyPatientListState extends State { color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), ), - const SizedBox(height: 10), - Center( - child: RichText( + ], + ); + } else { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.patientProfile, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "You dont have access to any Patients Profile", textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: - MzansiInnovationHub.of(context)!.theme.secondaryColor(), - ), - children: [ - TextSpan(text: "Press "), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - Icons.search, - size: 20, - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - ), - TextSpan( - text: - " to use Patient Search to request access to their profile."), - ], + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), ), ), - ), - ], - ), - ); + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.search, + size: 20, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + TextSpan( + text: + " to use Patient Search to request access to their profile."), + ], + ), + ), + ), + ], + ), + ); + } // return Padding( // padding: const EdgeInsets.only(top: 35.0), // child: Center( @@ -199,6 +224,7 @@ class _MyPatientListState extends State { setState(() { _myPatientList = MIHApiCalls.getPatientAccessListOfBusiness( widget.business!.business_id); + hasSearchedBefore = true; }); } From 4c0c762101430b2596dca60c009fead2e5bb66d2 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 7 Aug 2025 12:49:37 +0200 Subject: [PATCH 27/27] fix when there is data and you are serching --- .../mih_favourite_businesses.dart | 133 +++--------------- .../builder/build_loyalty_card_list.dart | 26 ++++ .../package_tools/mih_card_favourites.dart | 1 + .../package_tools/mih_cards.dart | 1 + 4 files changed, 49 insertions(+), 112 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart index 6ce6950a..9f71b4ae 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart @@ -140,97 +140,31 @@ class _MihFavouriteBusinessesState extends State { // Display message if no results after search if (businesses.isEmpty && businessSearchController.text.isNotEmpty) { - return Padding( - padding: - const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.businessProfile, - size: 165, + return Column( + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, + color: MzansiInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "Let's Try Refining Your Search", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, color: MzansiInnovationHub.of(context)! .theme .secondaryColor(), ), - const SizedBox(height: 10), - Text( - "No Businesses added to your Favourites", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - ), - const SizedBox(height: 10), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - children: [ - TextSpan(text: "Use the Mzansi Search"), - // WidgetSpan( - // alignment: - // PlaceholderAlignment.middle, - // child: Icon( - // Icons.search, - // size: 20, - // color: - // MzansiInnovationHub.of(context)! - // .theme - // .secondaryColor(), - // ), - // ), - TextSpan( - text: - " to find Businesses of Mzansi"), - ], - ), - ), - ), - ], - ), + ), + ], ); - // return Column( - // children: [ - // const SizedBox(height: 50), - // Icon( - // Icons.business_center_rounded, - // size: 150, - // color: MzansiInnovationHub.of(context)! - // .theme - // .secondaryColor(), - // ), - // Padding( - // padding: const EdgeInsets.symmetric( - // horizontal: 10.0), - // child: SizedBox( - // width: 500, - // child: Text( - // "No favourites yet, use Mzansi Search to find and bookmark businesses you like", - // textAlign: TextAlign.center, - // style: TextStyle( - // fontSize: 18, - // fontWeight: FontWeight.bold, - // ), - // ), - // ), - // ), - // ], - // ); } return BuildFavouriteBusinessesList( favouriteBusinesses: @@ -241,6 +175,7 @@ class _MihFavouriteBusinessesState extends State { ); } else { // This block handles the case where there are no bookmarked businesses initially + return Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), child: Column( @@ -303,32 +238,6 @@ class _MihFavouriteBusinessesState extends State { ], ), ); - // return Column( - // children: [ - // const SizedBox(height: 50), - // Icon( - // Icons.business_center_rounded, - // size: 150, - // color: MzansiInnovationHub.of(context)! - // .theme - // .secondaryColor(), - // ), - // Padding( - // padding: const EdgeInsets.symmetric(horizontal: 10.0), - // child: SizedBox( - // width: 500, - // child: Text( - // "No favourites yet, use Mzansi Search to find and bookmark businesses you like", - // textAlign: TextAlign.center, - // style: TextStyle( - // fontSize: 18, - // fontWeight: FontWeight.bold, - // ), - // ), - // ), - // ), - // ], - // ); } } else if (snapshot.hasError) { return Center( diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index ea3e904f..f0e62836 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -23,6 +23,7 @@ class BuildLoyaltyCardList extends StatefulWidget { final int navIndex; final MihBannerAd? bannerAd; final bool favouritesMode; + final TextEditingController searchText; final void Function()? onCardViewClose; const BuildLoyaltyCardList({ @@ -31,6 +32,7 @@ class BuildLoyaltyCardList extends StatefulWidget { required this.cardList, required this.navIndex, required this.favouritesMode, + required this.searchText, this.bannerAd, this.onCardViewClose, }); @@ -527,6 +529,30 @@ class _BuildLoyaltyCardListState extends State { ); } else { if (!widget.favouritesMode) { + if (widget.searchText.text.isNotEmpty) { + return Column( + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, + color: MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + const SizedBox(height: 10), + Text( + "Let's Try Refining Your Search", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: + MzansiInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + ], + ); + } return Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), child: Column( diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart index b14351de..3b8e582d 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart @@ -64,6 +64,7 @@ class _MihCardFavouritesState extends State { navIndex: 0, bannerAd: _bannerAd, favouritesMode: true, + searchText: TextEditingController(), onCardViewClose: () { setState(() { _bannerAd = MihBannerAd(); diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart index cb340a33..0bc622e9 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart @@ -373,6 +373,7 @@ class _MihCardsState extends State { navIndex: 0, bannerAd: _bannerAd, favouritesMode: false, + searchText: cardSearchController, onCardViewClose: () { setState(() { _bannerAd = MihBannerAd();