From 96daf77b45fab5c106710a4c38143a3921a20865 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Mon, 17 Nov 2025 10:45:57 +0200 Subject: [PATCH] QOL: Mzansi profile Personal get data on package open --- .../personal_profile/mzansi_profile.dart | 52 +++++++++++--- .../mih_business_details_services.dart | 5 +- .../mih_data_helper_services.dart | 67 +++++++++++++++++++ .../mih_my_business_user_services.dart | 7 +- .../mih_user_consent_services.dart | 9 +-- 5 files changed, 117 insertions(+), 23 deletions(-) create mode 100644 Frontend/lib/mih_services/mih_data_helper_services.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart index a03b4364..32be96aa 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart @@ -2,10 +2,12 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:provider/provider.dart'; class MzansiProfile extends StatefulWidget { @@ -18,16 +20,50 @@ class MzansiProfile extends StatefulWidget { } class _MzansiProfileState extends State { + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + setState(() { + _isLoadingInitialData = false; + }); + } + + @override + void initState() { + super.initState(); + _loadInitialData(); + } + @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: context.watch().personalIndex, - onIndexChange: (newIndex) { - context.read().setPersonalIndex(newIndex); + return Consumer( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: profileProvider.personalIndex, + onIndexChange: (newIndex) { + profileProvider.setPersonalIndex(newIndex); + }, + ); }, ); } diff --git a/Frontend/lib/mih_services/mih_business_details_services.dart b/Frontend/lib/mih_services/mih_business_details_services.dart index 6692dddc..b0d00423 100644 --- a/Frontend/lib/mih_services/mih_business_details_services.dart +++ b/Frontend/lib/mih_services/mih_business_details_services.dart @@ -8,7 +8,6 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:provider/provider.dart'; import 'package:supertokens_flutter/supertokens.dart'; import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:supertokens_flutter/http.dart' as http; @@ -80,7 +79,7 @@ class MihBusinessDetailsServices { } Future getBusinessDetailsByUser( - BuildContext context, + MzansiProfileProvider profileProvider, ) async { String app_id = await SuperTokens.getUserId(); var response = await http.get( @@ -93,7 +92,7 @@ class MihBusinessDetailsServices { String body = response.body; var jsonBody = jsonDecode(body); Business? business = Business.fromJson(jsonBody); - context.read().setBusiness(newBusiness: business); + profileProvider.setBusiness(newBusiness: business); return business; } else { return null; diff --git a/Frontend/lib/mih_services/mih_data_helper_services.dart b/Frontend/lib/mih_services/mih_data_helper_services.dart new file mode 100644 index 00000000..9553846f --- /dev/null +++ b/Frontend/lib/mih_services/mih_data_helper_services.dart @@ -0,0 +1,67 @@ +import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_my_business_user_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_user_consent_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; + +class MihDataHelperServices { + Future getUserData(MzansiProfileProvider profileProvider) async { + String url; + await MihUserServices().getMyUserDetails(profileProvider); + url = await MihFileApi.getMinioFileUrl( + profileProvider.user!.pro_pic_path, + ); + profileProvider.setUserProfilePicUrl(url); + } + + Future getUserConsentStatus( + MzansiProfileProvider profileProvider) async { + await MihUserConsentServices().getUserConsentStatus(profileProvider); + } + + Future getBusinessData(MzansiProfileProvider profileProvider) async { + AppUser? user = profileProvider.user; + String logoUrl; + String signatureUrl; + Business? responseBusiness = await MihBusinessDetailsServices() + .getBusinessDetailsByUser(profileProvider); + if (responseBusiness != null && user!.type == "business") { + logoUrl = await MihFileApi.getMinioFileUrl( + profileProvider.business!.logo_path, + ); + profileProvider.setBusinessProfilePicUrl(logoUrl); + await MihMyBusinessUserServices().getBusinessUser(profileProvider); + signatureUrl = await MihFileApi.getMinioFileUrl( + profileProvider.businessUser!.sig_path, + ); + profileProvider.setBusinessUserSignatureUrl(signatureUrl); + } + } + + Future loadUserDataOnly(MzansiProfileProvider profileProvider) async { + if (profileProvider.user == null) { + await getUserData(profileProvider); + } + if (profileProvider.userConsent == null) { + await getUserConsentStatus(profileProvider); + } + } + + Future loadUserDataWithBusinessesData( + MzansiProfileProvider profileProvider) async { + if (profileProvider.user == null) { + await getUserData(profileProvider); + } + if (profileProvider.userConsent == null) { + await getUserConsentStatus(profileProvider); + } + if (profileProvider.user != null && + profileProvider.user!.type == "business" && + profileProvider.business == null) { + await getBusinessData(profileProvider); + } + } +} diff --git a/Frontend/lib/mih_services/mih_my_business_user_services.dart b/Frontend/lib/mih_services/mih_my_business_user_services.dart index 597aa4f0..e69666c8 100644 --- a/Frontend/lib/mih_services/mih_my_business_user_services.dart +++ b/Frontend/lib/mih_services/mih_my_business_user_services.dart @@ -6,14 +6,13 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:provider/provider.dart'; import 'package:supertokens_flutter/supertokens.dart'; import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:supertokens_flutter/http.dart' as http; class MihMyBusinessUserServices { Future getBusinessUser( - BuildContext context, + MzansiProfileProvider profileProvider, ) async { String app_id = await SuperTokens.getUserId(); var response = await http.get( @@ -26,9 +25,7 @@ class MihMyBusinessUserServices { // KenLogger.success(response.body); BusinessUser? businessUser = BusinessUser.fromJson(jsonDecode(response.body)); - context - .read() - .setBusinessUser(newBusinessUser: businessUser); + profileProvider.setBusinessUser(newBusinessUser: businessUser); return businessUser; } else { return null; diff --git a/Frontend/lib/mih_services/mih_user_consent_services.dart b/Frontend/lib/mih_services/mih_user_consent_services.dart index f55424f6..6ee52f6e 100644 --- a/Frontend/lib/mih_services/mih_user_consent_services.dart +++ b/Frontend/lib/mih_services/mih_user_consent_services.dart @@ -4,13 +4,12 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/user_consent.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:provider/provider.dart'; import 'package:supertokens_flutter/http.dart' as http; import 'package:supertokens_flutter/supertokens.dart'; class MihUserConsentServices { Future getUserConsentStatus( - BuildContext context, + MzansiProfileProvider profileProvider, ) async { var app_id = await SuperTokens.getUserId(); final response = await http.get( @@ -18,12 +17,8 @@ class MihUserConsentServices { if (response.statusCode == 200) { Map userMap = jsonDecode(response.body); UserConsent userConsent = UserConsent.fromJson(userMap); - context.read().setUserConsent(userConsent); - // return userConsent; + profileProvider.setUserConsent(userConsent); } - // else { - // return null; - // } } Future insertUserConsentStatus(