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 0e877039..f37a6a83 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 @@ -33,28 +33,28 @@ class MihBusinessHome extends StatefulWidget { } class _MihBusinessHomeState extends State { - final FocusNode _focusNode = FocusNode(); final TextEditingController searchController = TextEditingController(); - String packageSearch = ""; - late List businessPackages; + late List> businessPackagesMap; + final ValueNotifier>> searchPackageName = + ValueNotifier([]); double packageSize = 200; - List setBusinessPackages() { - List temp = []; + List> setBusinessPackages() { + List> temp = []; //=============== Biz Profile =============== - temp.add( - MzansiBusinessProfileTile( + temp.add({ + "Business Profile": MzansiBusinessProfileTile( arguments: BusinessArguments( widget.signedInUser, widget.businessUser, widget.business, ), packageSize: packageSize, - ), - ); + ) + }); //=============== Pat Manager =============== - temp.add( - PatManagerTile( + temp.add({ + "Patient Manager": PatManagerTile( arguments: PatManagerArguments( widget.signedInUser, false, @@ -62,11 +62,11 @@ class _MihBusinessHomeState extends State { widget.businessUser, ), packageSize: packageSize, - ), - ); + ) + }); //=============== Calendar =============== - temp.add( - MzansiCalendarTile( + temp.add({ + "Calendar": MzansiCalendarTile( arguments: CalendarArguments( widget.signedInUser, false, @@ -74,26 +74,24 @@ class _MihBusinessHomeState extends State { widget.businessUser, ), packageSize: packageSize, - ), - ); + ) + }); //=============== Mzansi AI =============== - temp.add( - MzansiAiTile( + temp.add({ + "Mzansi AI": MzansiAiTile( signedInUser: widget.signedInUser, packageSize: packageSize, - ), - ); + ) + }); //=============== Calculator =============== - temp.add( - MihCalculatorTile( + temp.add({ + "Calculator": MihCalculatorTile( personalSelected: widget.personalSelected, packageSize: packageSize, - ), - ); + ) + }); //=============== About MIH =============== - temp.add( - AboutMihTile(packageSize: packageSize), - ); + temp.add({"About MIH": AboutMihTile(packageSize: packageSize)}); return temp; } @@ -114,16 +112,33 @@ class _MihBusinessHomeState extends State { } } + void searchPackage() { + if (searchController.text.isEmpty) { + searchPackageName.value = businessPackagesMap; + } else { + List> temp = []; + for (var item in businessPackagesMap) { + if (item.keys.first.toLowerCase().contains(searchController.text)) { + temp.add(item); + } + } + searchPackageName.value = temp; + } + } + @override void dispose() { super.dispose(); + searchController.removeListener(searchPackage); searchController.dispose(); } @override void initState() { super.initState(); - businessPackages = setBusinessPackages(); + searchController.addListener(searchPackage); + businessPackagesMap = setBusinessPackages(); + searchPackage(); } @override @@ -157,29 +172,15 @@ class _MihBusinessHomeState extends State { children: [ Flexible( flex: 4, - child: KeyboardListener( - focusNode: _focusNode, - autofocus: true, - onKeyEvent: (event) async { - if (event is KeyDownEvent && - event.logicalKey == LogicalKeyboardKey.enter) { - setState(() { - packageSearch = searchController.text; - }); - } - }, - child: SizedBox( - child: MIHSearchField( - controller: searchController, - hintText: "Search Mzansi Packages", - required: false, - editable: true, - onTap: () { - setState(() { - packageSearch = searchController.text; - }); - }, - ), + child: SizedBox( + child: MIHSearchField( + controller: searchController, + hintText: "Search Mzansi Packages", + required: false, + editable: true, + onTap: () { + setState(() {}); + }, ), ), ), @@ -189,7 +190,6 @@ class _MihBusinessHomeState extends State { //padding: const EdgeInsets.all(0), onPressed: () { setState(() { - packageSearch = ""; searchController.clear(); }); }, @@ -202,17 +202,28 @@ class _MihBusinessHomeState extends State { ], ), const SizedBox(height: 10), - GridView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - padding: getPadding(width, height), - // shrinkWrap: true, - itemCount: businessPackages.length, - gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: packageSize, - ), - itemBuilder: (context, index) { - return businessPackages[index]; + ValueListenableBuilder( + valueListenable: searchPackageName, + builder: (context, value, child) { + List filteredPackages = value + .where((package) => package.keys.first + .toLowerCase() + .contains(searchController.text.toLowerCase())) + .map((package) => package.values.first) + .toList(); + return GridView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: getPadding(width, height), + // shrinkWrap: true, + itemCount: filteredPackages.length, + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: packageSize, + ), + itemBuilder: (context, index) { + return filteredPackages[index]; + }, + ); }, ), ], 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 ae9eee38..bdd4b92e 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 @@ -38,32 +38,32 @@ class MihPersonalHome extends StatefulWidget { } class _MihPersonalHomeState extends State { - final FocusNode _focusNode = FocusNode(); final TextEditingController searchController = TextEditingController(); - String packageSearch = ""; - late List personalPackages; + late List> personalPackagesMap; + final ValueNotifier>> searchPackageName = + ValueNotifier([]); double packageSize = 200; - List setPersonalPackages() { - List temp = []; + List> setPersonalPackagesMap() { + List> temp = []; //=============== Mzansi Profile =============== - temp.add( - MzansiProfileTile( + temp.add({ + "Mzansi Profile": MzansiProfileTile( signedInUser: widget.signedInUser, propicFile: widget.propicFile, packageSize: packageSize, - ), - ); + ) + }); //=============== Mzansi Wallet =============== - temp.add( - MihWalletTile( + temp.add({ + "Mzansi Wallet": MihWalletTile( signedInUser: widget.signedInUser, packageSize: packageSize, - ), - ); + ) + }); //=============== Patient Profile =============== - temp.add( - PatientProfileTile( + temp.add({ + "Patient Profile": PatientProfileTile( arguments: PatientViewArguments( widget.signedInUser, null, @@ -72,18 +72,18 @@ class _MihPersonalHomeState extends State { "personal", ), packageSize: packageSize, - ), - ); + ) + }); //=============== Mzansi AI =============== - temp.add( - MzansiAiTile( + temp.add({ + "Mzansi AI": MzansiAiTile( signedInUser: widget.signedInUser, packageSize: packageSize, - ), - ); + ) + }); //=============== Calendar =============== - temp.add( - MzansiCalendarTile( + temp.add({ + "Calendar": MzansiCalendarTile( arguments: CalendarArguments( widget.signedInUser, true, @@ -91,26 +91,24 @@ class _MihPersonalHomeState extends State { widget.businessUser, ), packageSize: packageSize, - ), - ); + ) + }); //=============== Calculator =============== - temp.add( - MihCalculatorTile( + temp.add({ + "Calculator": MihCalculatorTile( personalSelected: widget.personalSelected, packageSize: packageSize, - ), - ); + ) + }); //=============== MIH Access =============== - temp.add( - MihAccessTile( + temp.add({ + "MIH Access": MihAccessTile( signedInUser: widget.signedInUser, packageSize: packageSize, - ), - ); + ) + }); //=============== About MIH =============== - temp.add( - AboutMihTile(packageSize: packageSize), - ); + temp.add({"About MIH": AboutMihTile(packageSize: packageSize)}); return temp; } @@ -131,16 +129,33 @@ class _MihPersonalHomeState extends State { } } + void searchPackage() { + if (searchController.text.isEmpty) { + searchPackageName.value = personalPackagesMap; + } else { + List> temp = []; + for (var item in personalPackagesMap) { + if (item.keys.first.toLowerCase().contains(searchController.text)) { + temp.add(item); + } + } + searchPackageName.value = temp; + } + } + @override void dispose() { super.dispose(); + searchController.removeListener(searchPackage); searchController.dispose(); } @override void initState() { super.initState(); - personalPackages = setPersonalPackages(); + searchController.addListener(searchPackage); + personalPackagesMap = setPersonalPackagesMap(); + searchPackage(); } @override @@ -175,29 +190,13 @@ class _MihPersonalHomeState extends State { children: [ Flexible( flex: 4, - child: KeyboardListener( - focusNode: _focusNode, - autofocus: true, - onKeyEvent: (event) async { - if (event is KeyDownEvent && - event.logicalKey == LogicalKeyboardKey.enter) { - setState(() { - packageSearch = searchController.text; - }); - } - }, - child: SizedBox( - child: MIHSearchField( - controller: searchController, - hintText: "Search Mzansi Packages", - required: false, - editable: true, - onTap: () { - setState(() { - packageSearch = searchController.text; - }); - }, - ), + child: SizedBox( + child: MIHSearchField( + controller: searchController, + hintText: "Search Mzansi Packages", + required: false, + editable: true, + onTap: () {}, ), ), ), @@ -207,7 +206,6 @@ class _MihPersonalHomeState extends State { //padding: const EdgeInsets.all(0), onPressed: () { setState(() { - packageSearch = ""; searchController.clear(); }); }, @@ -220,17 +218,29 @@ class _MihPersonalHomeState extends State { ], ), const SizedBox(height: 10), - GridView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - padding: getPadding(width, height), - // shrinkWrap: true, - itemCount: personalPackages.length, - gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: packageSize, - ), - itemBuilder: (context, index) { - return personalPackages[index]; + ValueListenableBuilder( + valueListenable: searchPackageName, + builder: (context, value, child) { + List filteredPackages = value + .where((package) => package.keys.first + .toLowerCase() + .contains(searchController.text.toLowerCase())) + .map((package) => package.values.first) + .toList(); + return GridView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: getPadding(width, height), + // shrinkWrap: true, + itemCount: filteredPackages.length, + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: packageSize, + ), + itemBuilder: (context, index) { + return filteredPackages[index]; + // return personalPackages[index]; + }, + ); }, ), ],