From 98381800fca4f456e1263a949e6ce82f91910381 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Wed, 30 Jul 2025 13:37:56 +0200 Subject: [PATCH] search business bookmarks --- .../build_favourite_businesses_list.dart | 36 +++++++++++++- .../mih_favourite_businesses.dart | 47 ++++++++++++++++--- 2 files changed, 74 insertions(+), 9 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart b/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart index 096e90ff..5dcad383 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart @@ -9,10 +9,12 @@ import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services class BuildFavouriteBusinessesList extends StatefulWidget { final List favouriteBusinesses; final String? myLocation; + final String? searchQuery; const BuildFavouriteBusinessesList({ super.key, required this.favouriteBusinesses, required this.myLocation, + required this.searchQuery, }); @override @@ -22,6 +24,28 @@ class BuildFavouriteBusinessesList extends StatefulWidget { class _BuildFavouriteBusinessesListState extends State { + List businesses = []; + + List getListOfBusinesses() { + List businesses = []; + for (var item in widget.favouriteBusinesses) { + MihBusinessDetailsServices() + .getBusinessDetailsByBusinessId(item.business_id) + .then((business) { + if (business != null) { + businesses.add(business); + } + }); + } + return businesses; + } + + @override + void initState() { + super.initState(); + businesses = getListOfBusinesses(); + } + @override Widget build(BuildContext context) { return ListView.separated( @@ -42,7 +66,14 @@ class _BuildFavouriteBusinessesListState future: businessDetails, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { - return const Center(child: CircularProgressIndicator()); + return Row( + children: [ + Padding( + padding: const EdgeInsets.only(left: 25.0), + child: CircularProgressIndicator(), + ), + ], + ); } else if (snapshot.hasError) { return Center( child: Text( @@ -80,7 +111,8 @@ class _BuildFavouriteBusinessesListState ), ); } else { - return const Center(child: Text('No business found')); + print(snapshot.data); + return SizedBox(); } }, ); 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 a8327f01..86a1c261 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 @@ -25,16 +25,44 @@ class _MihFavouriteBusinessesState extends State { TextEditingController(); final FocusNode searchFocusNode = FocusNode(); late Future> boookmarkedBusinessListFuture; - + List listBookmarkedBusinesses = []; + final ValueNotifier> searchBookmarkedBusinesses = + ValueNotifier([]); Future> getAllBookmarkedBusinessesForUser() async { String user_id = await SuperTokens.getUserId(); return MihMzansiDirectoryServices().getAllUserBookmarkedBusiness(user_id); } + void searchBookmarkedBusinessByName() { + if (businessSearchController.text.isEmpty) { + searchBookmarkedBusinesses.value = listBookmarkedBusinesses; + } else { + List temp = []; + for (var item in listBookmarkedBusinesses) { + if (item.business_name + .toLowerCase() + .contains(businessSearchController.text.toLowerCase())) { + temp.add(item); + } + } + searchBookmarkedBusinesses.value = temp; + } + } + + @override + void dispose() { + super.dispose(); + businessSearchController.removeListener(searchBookmarkedBusinessByName); + businessSearchController.dispose(); + searchFocusNode.dispose(); + searchBookmarkedBusinesses.dispose(); + } + @override void initState() { super.initState(); boookmarkedBusinessListFuture = getAllBookmarkedBusinessesForUser(); + businessSearchController.addListener(searchBookmarkedBusinessByName); } @override @@ -74,12 +102,17 @@ class _MihFavouriteBusinessesState extends State { ); } else if (snapshot.connectionState == ConnectionState.done) { if (snapshot.hasData && snapshot.data!.isNotEmpty) { - List bookmarkedBusinesses = - snapshot.data!; - return BuildFavouriteBusinessesList( - favouriteBusinesses: bookmarkedBusinesses, - myLocation: widget.myLocation, - ); + listBookmarkedBusinesses = snapshot.data!; + searchBookmarkedBusinessByName(); + return ValueListenableBuilder( + valueListenable: searchBookmarkedBusinesses, + builder: (context, value, child) { + return BuildFavouriteBusinessesList( + favouriteBusinesses: value, + myLocation: widget.myLocation, + searchQuery: businessSearchController.text, + ); + }); } else { return Column( children: [