diff --git a/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart b/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart index 8be3adbd..cc15d363 100644 --- a/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart +++ b/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'mih_app_drawer.dart'; +import '../../mih_packages/mih_home/components/mih_app_drawer.dart'; import 'mih_body.dart'; import 'mih_header.dart'; diff --git a/Frontend/lib/mih_components/mih_package/mih_app.dart b/Frontend/lib/mih_components/mih_package/mih_app.dart index ab9642b5..22a1c945 100644 --- a/Frontend/lib/mih_components/mih_package/mih_app.dart +++ b/Frontend/lib/mih_components/mih_package/mih_app.dart @@ -1,13 +1,14 @@ -import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mih_home/components/mih_app_drawer.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:flutter/material.dart'; // import 'package:flutter_swipe_detector/flutter_swipe_detector.dart'; // ignore: must_be_immutable class MihApp extends StatefulWidget { - final MihAppAction appActionButton; + final Widget appActionButton; final MihAppTools appTools; final List appBody; + final MIHAppDrawer? actionDrawer; int selectedbodyIndex; final Function(int) onIndexChange; MihApp({ @@ -15,6 +16,7 @@ class MihApp extends StatefulWidget { required this.appActionButton, required this.appTools, required this.appBody, + this.actionDrawer, required this.selectedbodyIndex, required this.onIndexChange, }); @@ -54,6 +56,7 @@ class _MihAppState extends State { Widget build(BuildContext context) { Size screenSize = MediaQuery.of(context).size; return Scaffold( + drawer: widget.actionDrawer, body: SafeArea( child: Container( width: screenSize.width, diff --git a/Frontend/lib/mih_components/mih_package/mih_app_tile.dart b/Frontend/lib/mih_components/mih_package/mih_app_tile.dart index 52ed41aa..a84c9b88 100644 --- a/Frontend/lib/mih_components/mih_package/mih_app_tile.dart +++ b/Frontend/lib/mih_components/mih_package/mih_app_tile.dart @@ -52,59 +52,71 @@ class _MihAppTileState extends State { @override Widget build(BuildContext context) { - double borderRadius = widget.iconSize * 0.25; - return SizedBox( - width: widget.iconSize, - child: Container( - alignment: Alignment.topCenter, - // color: Colors.black, - // constraints: BoxConstraints(), - child: Column( - children: [ - AnimatedContainer( - //alignment: Alignment.center, - width: widget.iconSize, - height: widget.iconSize, - duration: const Duration(seconds: 2), - child: Material( - color: widget.primaryColor, - // shadowColor: - // MzanziInnovationHub.of(context)!.theme.secondaryColor(), - // elevation: 5, - borderRadius: BorderRadius.circular(borderRadius), - child: InkWell( - borderRadius: BorderRadius.circular(borderRadius), - // ho - onTap: widget.onTap, - onLongPress: () { - displayHint(); - }, - // hoverDuration: , - splashColor: - MzanziInnovationHub.of(context)!.theme.highlightColor(), - highlightColor: - MzanziInnovationHub.of(context)!.theme.highlightColor(), - child: FittedBox(child: widget.appIcon), - ), - ), + double borderRadius = widget.iconSize * 0.15; + return Container( + alignment: Alignment.topCenter, + // color: Colors.black, + // width: widget.iconSize, + // height: widget.iconSize + widget.iconSize / 3, + child: Column( + children: [ + Flexible( + flex: 3, + child: LayoutBuilder( + builder: (context, constraints) { + double iconHeight = constraints.maxWidth; + return AnimatedContainer( + height: iconHeight, + duration: const Duration(seconds: 2), + child: Material( + color: widget.primaryColor, + // shadowColor: + // MzanziInnovationHub.of(context)!.theme.secondaryColor(), + // elevation: 5, + borderRadius: BorderRadius.circular(borderRadius), + child: InkWell( + borderRadius: BorderRadius.circular(borderRadius), + // ho + onTap: widget.onTap, + onLongPress: () { + displayHint(); + }, + // hoverDuration: , + splashColor: MzanziInnovationHub.of(context)! + .theme + .highlightColor(), + highlightColor: MzanziInnovationHub.of(context)! + .theme + .highlightColor(), + child: FittedBox(child: widget.appIcon), + ), + ), + ); + }, ), - const SizedBox(height: 10), - FittedBox( - child: Text( - widget.appName, - textAlign: TextAlign.center, - // softWrap: true, - // overflow: TextOverflow.visible, - style: TextStyle( - color: - MzanziInnovationHub.of(context)!.theme.secondaryColor(), - fontSize: 40.0, - fontWeight: FontWeight.bold, + ), + const SizedBox(height: 10), + Flexible( + flex: 1, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + widget.appName, + textAlign: TextAlign.center, + // softWrap: true, + // overflow: TextOverflow.visible, + style: TextStyle( + color: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + fontSize: 20.0, + fontWeight: FontWeight.bold, + ), ), - ), - ) - ], - ), + ], + ), + ) + ], ), ); } diff --git a/Frontend/lib/mih_packages/about_mih/about_mih.dart b/Frontend/lib/mih_packages/about_mih/about_mih.dart index 474c0e5a..33917c6b 100644 --- a/Frontend/lib/mih_packages/about_mih/about_mih.dart +++ b/Frontend/lib/mih_packages/about_mih/about_mih.dart @@ -1,9 +1,9 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/app_tools/mih_info.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/app_tools/mih_privacy_policy.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/app_tools/mih_terms_of_service.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/package_tools/mih_info.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/package_tools/mih_privacy_policy.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/package_tools/mih_terms_of_service.dart'; import 'package:flutter/material.dart'; class AboutMih extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart b/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart new file mode 100644 index 00000000..8923ba5d --- /dev/null +++ b/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart @@ -0,0 +1,46 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; + +class AboutMihTile extends StatefulWidget { + final double packageSize; + const AboutMihTile({ + super.key, + required this.packageSize, + }); + + @override + State createState() => _AboutMihTileState(); +} + +class _AboutMihTileState extends State { + @override + Widget build(BuildContext context) { + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/about', + arguments: 0, + ); + }, + appName: "About MIH", + appIcon: Container( + alignment: Alignment.center, + padding: const EdgeInsets.all(25), + child: FaIcon( + FontAwesomeIcons.circleInfo, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + size: widget.packageSize, + ), + ), + // Icon( + // Icons.info, + // color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + // ), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/about_mih/app_tools/mih_info.dart b/Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart similarity index 100% rename from Frontend/lib/mih_packages/about_mih/app_tools/mih_info.dart rename to Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart diff --git a/Frontend/lib/mih_packages/about_mih/app_tools/mih_privacy_policy.dart b/Frontend/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart similarity index 100% rename from Frontend/lib/mih_packages/about_mih/app_tools/mih_privacy_policy.dart rename to Frontend/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart diff --git a/Frontend/lib/mih_packages/about_mih/app_tools/mih_terms_of_service.dart b/Frontend/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart similarity index 100% rename from Frontend/lib/mih_packages/about_mih/app_tools/mih_terms_of_service.dart rename to Frontend/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart diff --git a/Frontend/lib/mih_packages/access_review/mih_access.dart b/Frontend/lib/mih_packages/access_review/mih_access.dart index 40100ca6..5ebdd805 100644 --- a/Frontend/lib/mih_packages/access_review/mih_access.dart +++ b/Frontend/lib/mih_packages/access_review/mih_access.dart @@ -2,7 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/access_review/app_tools/mih_access_requests.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/access_review/package_tools/mih_access_requests.dart'; import 'package:flutter/material.dart'; class MihAccess extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/access_review/package_tile/mih_access_tile.dart b/Frontend/lib/mih_packages/access_review/package_tile/mih_access_tile.dart new file mode 100644 index 00000000..9117d181 --- /dev/null +++ b/Frontend/lib/mih_packages/access_review/package_tile/mih_access_tile.dart @@ -0,0 +1,43 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:flutter/material.dart'; + +class MihAccessTile extends StatefulWidget { + final AppUser signedInUser; + final double packageSize; + + const MihAccessTile({ + super.key, + required this.signedInUser, + required this.packageSize, + }); + + @override + State createState() => _MihAccessTileState(); +} + +class _MihAccessTileState extends State { + @override + Widget build(BuildContext context) { + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/mih-access', + arguments: widget.signedInUser, + ); + }, + appName: "MIH Access", + appIcon: Container( + padding: const EdgeInsets.all(1), + child: Icon( + Icons.check_box, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/access_review/app_tools/mih_access_requests.dart b/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart similarity index 100% rename from Frontend/lib/mih_packages/access_review/app_tools/mih_access_requests.dart rename to Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart diff --git a/Frontend/lib/mih_packages/calculator/mih_calculator.dart b/Frontend/lib/mih_packages/calculator/mih_calculator.dart index 0a7d11ab..a660ed5e 100644 --- a/Frontend/lib/mih_packages/calculator/mih_calculator.dart +++ b/Frontend/lib/mih_packages/calculator/mih_calculator.dart @@ -1,8 +1,8 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/calculator/app_tools/simple_calc.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/calculator/app_tools/tip_calc.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calculator/package_tools/simple_calc.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calculator/package_tools/tip_calc.dart'; import 'package:flutter/material.dart'; class MIHCalculator extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart b/Frontend/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart new file mode 100644 index 00000000..27c972ab --- /dev/null +++ b/Frontend/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart @@ -0,0 +1,42 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:flutter/material.dart'; + +class MihCalculatorTile extends StatefulWidget { + final bool personalSelected; + final double packageSize; + + const MihCalculatorTile({ + super.key, + required this.personalSelected, + required this.packageSize, + }); + + @override + State createState() => _MihCalculatorTileState(); +} + +class _MihCalculatorTileState extends State { + @override + Widget build(BuildContext context) { + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/calculator', + arguments: widget.personalSelected, + ); + }, + appName: "Calculator", + appIcon: Container( + padding: const EdgeInsets.all(0), + child: Icon( + Icons.calculate, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/calculator/app_tools/simple_calc.dart b/Frontend/lib/mih_packages/calculator/package_tools/simple_calc.dart similarity index 100% rename from Frontend/lib/mih_packages/calculator/app_tools/simple_calc.dart rename to Frontend/lib/mih_packages/calculator/package_tools/simple_calc.dart diff --git a/Frontend/lib/mih_packages/calculator/app_tools/tip_calc.dart b/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart similarity index 100% rename from Frontend/lib/mih_packages/calculator/app_tools/tip_calc.dart rename to Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart diff --git a/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart b/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart index 6404d514..570e3acb 100644 --- a/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart +++ b/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart @@ -2,7 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/calendar/app_tools/appointments.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calendar/package_tools/appointments.dart'; import 'package:flutter/material.dart'; class MzansiCalendar extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart b/Frontend/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart new file mode 100644 index 00000000..905d230e --- /dev/null +++ b/Frontend/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart @@ -0,0 +1,43 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; +import 'package:flutter/material.dart'; + +class MzansiCalendarTile extends StatefulWidget { + final CalendarArguments arguments; + final double packageSize; + + const MzansiCalendarTile({ + super.key, + required this.arguments, + required this.packageSize, + }); + + @override + State createState() => _MzansiCalendarTileState(); +} + +class _MzansiCalendarTileState extends State { + @override + Widget build(BuildContext context) { + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/calendar', + arguments: widget.arguments, + ); + }, + appName: "Calendar", + appIcon: Container( + padding: const EdgeInsets.all(0.5), + child: Icon( + Icons.calendar_month, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/calendar/app_tools/appointments.dart b/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart similarity index 100% rename from Frontend/lib/mih_packages/calendar/app_tools/appointments.dart rename to Frontend/lib/mih_packages/calendar/package_tools/appointments.dart diff --git a/Frontend/lib/mih_components/mih_layout/mih_app_drawer.dart b/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart similarity index 98% rename from Frontend/lib/mih_components/mih_layout/mih_app_drawer.dart rename to Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart index 07d8e6eb..da5d5416 100644 --- a/Frontend/lib/mih_components/mih_layout/mih_app_drawer.dart +++ b/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import '../../main.dart'; -import '../../mih_objects/app_user.dart'; -import '../../mih_objects/arguments.dart'; +import '../../../main.dart'; +import '../../../mih_objects/app_user.dart'; +import '../../../mih_objects/arguments.dart'; import 'package:supertokens_flutter/supertokens.dart'; -import '../mih_profile_picture.dart'; +import '../../../mih_components/mih_profile_picture.dart'; class MIHAppDrawer extends StatefulWidget { final AppUser signedInUser; diff --git a/Frontend/lib/mih_packages/mih_home/mih_home.dart b/Frontend/lib/mih_packages/mih_home/mih_home.dart index 72e60154..93e5952e 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_home.dart +++ b/Frontend/lib/mih_packages/mih_home/mih_home.dart @@ -1,44 +1,19 @@ -import 'dart:async'; -import 'dart:convert'; -// import 'dart:convert'; - +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_profile_picture.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/business.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/business_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/notification.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/patients.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mih_home/components/mih_app_drawer.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mih_home/package_tools/mih_business_home.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mih_home/package_tools/mih_personal_home.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_swipe_detector/flutter_swipe_detector.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:google_nav_bar/google_nav_bar.dart'; -import '../../main.dart'; -import 'package:supertokens_flutter/http.dart' as http; -import "package:universal_html/html.dart" as html; - -import '../../mih_apis/mih_location_api.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_search_input.dart'; -import '../../mih_components/mih_layout/mih_action.dart'; -import '../../mih_components/mih_layout/mih_app_drawer.dart'; -import '../../mih_components/mih_layout/mih_body.dart'; -import '../../mih_components/mih_layout/mih_header.dart'; -import '../../mih_components/mih_layout/mih_layout_builder.dart'; -import '../../mih_components/mih_layout/mih_notification_drawer.dart'; -import '../../mih_components/mih_layout/mih_tile.dart'; -import '../../mih_components/mih_layout/mih_window.dart'; -import '../../mih_components/mih_pop_up_messages/mih_delete_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../mih_components/mih_pop_up_messages/mih_notification_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_warning_message.dart'; -import '../../mih_components/mih_profile_picture.dart'; -import '../../mih_env/env.dart'; -import '../../mih_objects/app_user.dart'; -import '../../mih_objects/arguments.dart'; -import '../../mih_objects/business.dart'; -import '../../mih_objects/business_user.dart'; -import '../../mih_objects/notification.dart'; -import '../test/test.dart'; // ignore: must_be_immutable -class MIHHome extends StatefulWidget { +class MihHome extends StatefulWidget { final AppUser signedInUser; final BusinessUser? businessUser; final Business? business; @@ -50,7 +25,7 @@ class MIHHome extends StatefulWidget { final bool isBusinessUserNew; final bool isDevActive; bool personalSelected; - MIHHome({ + MihHome({ super.key, required this.signedInUser, required this.businessUser, @@ -66,898 +41,53 @@ class MIHHome extends StatefulWidget { }); @override - State createState() => _MIHHomeState(); + State createState() => _MihHomeState(); } -class _MIHHomeState extends State { +class _MihHomeState extends State { final proPicController = TextEditingController(); - final TextEditingController searchController = TextEditingController(); - final FocusNode _focusNode = FocusNode(); - late List persHTList = []; - late List busHTList = []; - late List> pbswitch; - late List notifiList; - late bool businessUserSwitch; - int _selectedIndex = 0; - String appSearch = ""; - int amount = 10; - final baseAPI = AppEnviroment.baseApiUrl; - // final MobileScannerController scannerController = MobileScannerController( - // // required options for the scanner - // ); + int _selcetedIndex = 0; + late bool _personalSelected; - void setAppsNewPersonal(List tileList) { - ImageProvider logo = MzanziInnovationHub.of(context)!.theme.logoImage(); - - if (widget.signedInUser.fname == "") { - tileList.add(MIHTile( - videoID: "jFV3NN65DtQ", - onTap: () { - Navigator.of(context).pushNamed('/user-profile', - arguments: AppProfileUpdateArguments( - widget.signedInUser, widget.propicFile)); - }, - tileName: "Setup Profie", - tileIcon: Padding( - padding: const EdgeInsets.all(15.0), - child: Image(image: logo), - ), - p: getPrim(), - s: getSec(), - )); - } + @override + void dispose() { + super.dispose(); } - void setAppsNewBusiness(List tileList) { - tileList.add(MIHTile( - videoID: "Nfp4pVBZL78", - onTap: () { - Navigator.of(context).pushNamed( - '/business-profile/set-up', - arguments: widget.signedInUser, - ); - }, - tileName: "Setup Business", - tileIcon: Icon( - Icons.add_business_outlined, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); + @override + void initState() { + super.initState(); + _personalSelected = widget.personalSelected; } - void setAppsPersonal(List tileList) { - ImageProvider logo = MzanziInnovationHub.of(context)!.theme.logoImage(); - ImageProvider aiLogo = MzanziInnovationHub.of(context)!.theme.aiLogoImage(); - tileList.add(MIHTile( - videoID: "P2bM9eosJ_A", - onTap: () { - Navigator.of(context).pushNamed( - '/user-profile', - arguments: - AppProfileUpdateArguments(widget.signedInUser, widget.propicFile), - ); - }, - tileName: "Mzansi Profile", - tileIcon: Padding( - padding: const EdgeInsets.all(15.0), - child: Image(image: logo), - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - videoID: "6l8h0sjt08k", - onTap: () { - Navigator.of(context).pushNamed( - '/mzansi-wallet', - arguments: widget.signedInUser, - ); - }, - tileName: "Mzansi Wallet", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.wallet, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.info_outline, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - // print("Pat Prof: ${widget.patient}"); - if (widget.patient != null) { - tileList.add(MIHTile( - videoID: "NUDdoWrbXNc", - onTap: () { - Navigator.of(context).pushNamed('/patient-profile', - arguments: PatientViewArguments( - widget.signedInUser, null, null, null, "personal")); - }, - tileName: "Patient Profile", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.bookMedical, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.medication, - // color: getSec(), - // size: 200, - // ), - p: getPrim(), - s: getSec(), - )); - } else { - tileList.add(MIHTile( - videoID: "NUDdoWrbXNc", - onTap: () { - Navigator.of(context).pushNamed('/patient-profile/set-up', - arguments: widget.signedInUser); - }, - tileName: "Set Up Patient", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.bookMedical, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.medication, - // color: getSec(), - // size: 200, - // ), - p: getPrim(), - s: getSec(), - )); - } - tileList.add(MIHTile( - videoID: "dYuLqZWzMnM", - onTap: () { - Navigator.of(context).pushNamed( - '/mzansi-ai', - arguments: widget.signedInUser, - ); - }, - tileName: "Mzansi AI", - tileIcon: Center( - child: SizedBox( - width: 225, - child: Image(image: aiLogo), - ), - ), - // Icon( - // Icons.medication, - // color: getSec(), - // size: 200, - // ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - videoID: "nfzhJFY_W4Y", - onTap: () { - Navigator.of(context).pushNamed( - '/calendar', - arguments: CalendarArguments( - widget.signedInUser, - true, - widget.business, - null, - ), - ); - }, - tileName: "Calendar", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.calendarDays, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.calendar_month, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - videoID: "woQ5hND5EaU", - onTap: () { - Navigator.of(context).pushNamed( - '/calculator', - arguments: widget.personalSelected, - ); - }, - tileName: "Calculator", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.calculator, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.info_outline, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - videoID: "", - onTap: () { - Navigator.of(context).pushNamed( - '/mih-access', - arguments: widget.signedInUser, - ); - }, - tileName: "MIH Access", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.userCheck, - color: getSec(), - size: 170, - ), - ), - // Icon( - // Icons.check_box_outlined, - // color: getSec(), - // size: 200, - // ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - videoID: "hbKhlmY_56U", - onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 0, - ); - }, - tileName: "About MIH", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.circleInfo, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.info_outline, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - } - - void setAppsBusiness(List tileList) { - ImageProvider aiLogo = MzanziInnovationHub.of(context)!.theme.aiLogoImage(); - tileList.add(MIHTile( - videoID: "NWyJZq2ZYOM", - onTap: () { - Navigator.of(context).pushNamed( - '/business-profile/manage', - arguments: BusinessArguments( - widget.signedInUser, - widget.businessUser, - widget.business, - ), - ); - }, - tileName: "Biz Profile", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.buildingUser, - color: getSec(), - size: 165, - ), - ), - // Icon( - // Icons.business, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - // tileList.add(MIHTile( - // onTap: () { - // Navigator.of(context).pushNamed( - // '/mih-access', - // arguments: widget.signedInUser, - // ); - // }, - // tileName: "Access", - // tileIcon: Icon( - // Icons.check_box_outlined, - // color: getSec(), - // size: 200, - // ), - // p: getPrim(), - // s: getSec(), - // )); - tileList.add(MIHTile( - videoID: "D6q2qIavoiY", - onTap: () { - Navigator.of(context).pushNamed( - '/patient-manager', - arguments: PatManagerArguments( - widget.signedInUser, - widget.personalSelected, - widget.business, - widget.businessUser, - ), - ); - }, - tileName: "Pat Manager", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.bookMedical, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.medication, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - videoID: "nfzhJFY_W4Y", - onTap: () { - Navigator.of(context).pushNamed( - '/calendar', - arguments: CalendarArguments( - widget.signedInUser, - false, - widget.business, - widget.businessUser, - ), - ); - }, - tileName: "Calendar", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.calendarDays, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.calendar_month, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - videoID: "dYuLqZWzMnM", - onTap: () { - Navigator.of(context).pushNamed( - '/mzansi-ai', - arguments: widget.signedInUser, - ); - }, - tileName: "Mzansi AI", - tileIcon: Center( - child: SizedBox( - width: 225, - child: Image(image: aiLogo), - ), - ), - // Icon( - // Icons.medication, - // color: getSec(), - // size: 200, - // ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - videoID: "woQ5hND5EaU", - onTap: () { - Navigator.of(context).pushNamed( - '/calculator', - arguments: widget.personalSelected, - ); - }, - tileName: "Calculator", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.calculator, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.info_outline, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - videoID: "hbKhlmY_56U", - onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 0, - ); - }, - tileName: "About MIH", - tileIcon: Center( - child: FaIcon( - FontAwesomeIcons.circleInfo, - color: getSec(), - size: 200, - ), - ), - // Icon( - // Icons.info_outline, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - } - - void setAppsDev(List tileList) { - if (AppEnviroment.getEnv() == "Dev") { - tileList.add(MIHTile( - videoID: "", - onTap: () { - Navigator.of(context).pushNamed( - '/package-dev', - //arguments: widget.signedInUser, - ); - }, - tileName: "Package - Dev", - tileIcon: Center( - child: Icon( - Icons.warning, - color: getSec(), - size: 230, - ), - ), - // Icon( - // Icons.info_outline, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - videoID: "", - onTap: () { - Navigator.of(context).pushNamed( - '/terms-of-service', - //arguments: widget.signedInUser, - ); - }, - tileName: "TOS - Dev", - tileIcon: Center( - child: Icon( - Icons.design_services, - color: getSec(), - size: 230, - ), - ), - // Icon( - // Icons.info_outline, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - videoID: "", - onTap: () { - Navigator.of(context).pushNamed( - '/privacy-policy', - //arguments: widget.signedInUser, - ); - }, - tileName: "Policy - Dev", - tileIcon: Center( - child: Icon( - Icons.policy, - color: getSec(), - size: 230, - ), - ), - // Icon( - // Icons.info_outline, - // color: getSec(), - // size: 230, - // ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - TextEditingController cardNumberController = TextEditingController(); - Navigator.of(context).pushNamed( - '/scanner', - arguments: cardNumberController, - ); - print(cardNumberController.text); - }, - tileName: "Scanner - Dev", - tileIcon: Icon( - Icons.camera_alt_outlined, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - showDialog( - barrierColor: const Color(0x01000000), - context: context, - builder: (context) { - return const MIHTest(); - }, - ); - }, - tileName: "video - Dev", - tileIcon: Icon( - Icons.video_file, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - showDialog( - barrierColor: const Color(0x01000000), - context: context, - builder: (context) { - return Builder(builder: (context) { - return MIHNotificationMessage( - arguments: NotificationArguments( - "Testing", - "Testing the new MIH Notification", - () { - Navigator.of(context).pop(); - //Scaffold.of(context).openEndDrawer(); - }, - ), - ); - }); - }, - ); - }, - tileName: "Notify - Dev", - tileIcon: Icon( - Icons.notifications, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - showDialog( - context: context, - builder: (context) { - return const Mihloadingcircle(); - }, - ); - }, - tileName: "Loading - Dev", - tileIcon: Icon( - Icons.change_circle, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - Navigator.of(context).pushNamed( - '/business-profile/set-up', - arguments: widget.signedInUser, - ); - }, - tileName: "Setup Bus - Dev", - tileIcon: Icon( - Icons.add_business_outlined, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - Navigator.of(context).pushNamed('/patient-profile/set-up', - arguments: widget.signedInUser); - }, - tileName: "Add Pat - Dev", - tileIcon: Icon( - Icons.add_circle_outline, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - onTap: () { - showDialog( - context: context, - builder: (context) { - // return const MIHWarningMessage(warningType: "No Access"); - return const MIHWarningMessage(warningType: "Expired Access"); - }, - ); - }, - tileName: "Warn - Dev", - tileIcon: Icon( - Icons.warning_amber_rounded, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - showDialog( - context: context, - builder: (context) { - // return const MIHErrorMessage(errorType: "Input Error"); - // return const MIHErrorMessage(errorType: "Password Requirements"); - // return const MIHErrorMessage(errorType: "Invalid Username"); - // return const MIHErrorMessage(errorType: "Invalid Email"); - // return const MIHErrorMessage(errorType: "User Exists"); - // return const MIHErrorMessage(errorType: "Password Match"); - // return const MIHErrorMessage(errorType: "Invalid Credentials"); - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - }, - tileName: "Error - Dev", - tileIcon: Icon( - Icons.error_outline_outlined, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - showDialog( - context: context, - builder: (context) { - return const MIHSuccessMessage( - successType: "Success", - successMessage: - "Congratulations! Your account has been created successfully. You are log in and can start exploring.\n\nPlease note: more apps will appear once you update your profile."); - }, - ); - }, - tileName: "Success - Dev", - tileIcon: Icon( - Icons.check_circle_outline_outlined, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - - tileList.add(MIHTile( - onTap: () { - showDialog( - context: context, - builder: (context) { - // return MIHDeleteMessage(deleteType: "Note", onTap: () {}); - return MIHDeleteMessage(deleteType: "File", onTap: () {}); - }, - ); - }, - tileName: "Delete - Dev", - tileIcon: Icon( - Icons.delete_forever_outlined, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - showDialog( - barrierDismissible: false, - context: context, - builder: (context) { - // return const MIHErrorMessage(errorType: "Input Error"); - // return const MIHErrorMessage(errorType: "Password Requirements"); - // return const MIHErrorMessage(errorType: "Invalid Username"); - // return const MIHErrorMessage(errorType: "Invalid Email"); - // return const MIHErrorMessage(errorType: "User Exists"); - // return const MIHErrorMessage(errorType: "Password Match"); - // return const MIHErrorMessage(errorType: "Invalid Credentials"); - return MIHWindow( - fullscreen: false, - windowTitle: - "Test Window title that is too large for mobile devices", - windowBody: const [ - SizedBox( - height: 250, - ) - ], - windowTools: [ - IconButton( - onPressed: () { - //deleteFilePopUp(filePath, fileID); - }, - icon: Icon( - Icons.delete, - size: 35, - color: MzanziInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - ), - IconButton( - onPressed: () { - //deleteFilePopUp(filePath, fileID); - }, - icon: Icon( - Icons.wallet, - size: 35, - color: MzanziInnovationHub.of(context)! - .theme - .secondaryColor(), - ), - ), - ], - onWindowTapClose: () { - Navigator.pop(context); - }, - ); - }, - ); - }, - tileName: "Window - Dev", - tileIcon: Icon( - Icons.window, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - MIHLocationAPI().getGPSPosition(context).then((position) { - if (position != null) { - print(position); - print( - "Distance: ${MIHLocationAPI().getDistanceInMeaters(position, position)}m"); - } + @override + Widget build(BuildContext context) { + return MihApp( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + actionDrawer: getActionDrawer(), + selectedbodyIndex: _selcetedIndex, + onIndexChange: (newValue) { + setState(() { + _selcetedIndex = newValue; + }); + if (newValue == 0) { + setState(() { + _personalSelected = true; + }); + } else { + setState(() { + _personalSelected = false; }); - }, - tileName: "Location - Dev", - tileIcon: Icon( - Icons.location_pin, - color: getSec(), - size: 230, - ), - p: getPrim(), - s: getSec(), - )); - } - } - - List searchApp(List appList, String searchString) { - if (searchString == "") { - return appList; - } else { - List temp = []; - for (var item in appList) { - if (item.tileName.toLowerCase().contains(appSearch.toLowerCase())) { - temp.add(item); } - } - return temp; - } + }, + ); } - List> setApps( - List personalTileList, List businessTileList) { - if (widget.isUserNew) { - setAppsNewPersonal(personalTileList); - } else if (!widget.isBusinessUser) { - setAppsPersonal(personalTileList); - } else if (widget.isBusinessUserNew) { - setAppsPersonal(personalTileList); - setAppsNewBusiness(businessTileList); - } else { - setAppsPersonal(personalTileList); - setAppsBusiness(businessTileList); - } - if (widget.isDevActive) { - setAppsDev(personalTileList); - setAppsDev(businessTileList); - } - return [personalTileList, businessTileList]; - } - - Color getPrim() { - return MzanziInnovationHub.of(context)!.theme.secondaryColor(); - } - - Color getSec() { - return MzanziInnovationHub.of(context)!.theme.primaryColor(); - } - - bool isBusinessUser(AppUser signedInUser) { - if (signedInUser.type == "personal") { - return false; - } else { - return true; - } - } - - String getHeading(int index) { - if (index == 0) { - return "Personal Apps"; - } else { - return "Business Apps"; - } - } - - void onDragStart(DragStartDetails startDrag) { - Scaffold.of(context).openDrawer(); - print(startDrag.globalPosition.dx); - } - - Widget getActionButton() { + Widget getAction() { return Builder(builder: (context) { - return MIHAction( + return MihAppAction( icon: Padding( padding: const EdgeInsets.only(left: 5.0), child: MIHProfilePicture( @@ -971,148 +101,14 @@ class _MIHHomeState extends State { onChange: (newProPic) {}, ), ), - // const Icon(Icons.apps), iconSize: 45, onTap: () { - setState(() { - appSearch = ""; - searchController.clear(); - }); - //key.currentState.o Scaffold.of(context).openDrawer(); }, ); }); } - Widget getSecondaryActionButton() { - Widget notIIcon; - if (hasNewNotifications()) { - notIIcon = Stack( - children: [ - const Icon(Icons.notifications), - Positioned( - right: 0, - top: 0, - child: Icon( - Icons.circle, - size: 10, - color: MzanziInnovationHub.of(context)!.theme.errorColor(), - ), - ) - ], - ); - } else { - notIIcon = const Icon(Icons.notifications); - } - return Builder(builder: (context) { - return MIHAction( - icon: notIIcon, - iconSize: 35, - onTap: () { - setState(() { - appSearch = ""; - searchController.clear(); - }); - //key.currentState.o - Scaffold.of(context).openEndDrawer(); - }, - ); - }); - } - - MIHHeader getHeader() { - return const MIHHeader( - headerAlignment: MainAxisAlignment.center, - headerItems: [ - Text( - "MIH", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 20, - ), - ), - ], - ); - } - - MIHBody getBody(double width, double height) { - return MIHBody( - borderOn: false, - bodyItems: [ - const SizedBox(height: 10), - Row( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - Flexible( - flex: 4, - child: KeyboardListener( - focusNode: _focusNode, - autofocus: true, - onKeyEvent: (event) async { - if (event is KeyDownEvent && - event.logicalKey == LogicalKeyboardKey.enter) { - setState(() { - appSearch = searchController.text; - }); - } - }, - child: SizedBox( - child: MIHSearchField( - controller: searchController, - hintText: "Search Mzansi Packages", - required: false, - editable: true, - onTap: () { - setState(() { - appSearch = searchController.text; - }); - }, - ), - ), - ), - ), - Flexible( - flex: 1, - child: IconButton( - //padding: const EdgeInsets.all(0), - onPressed: () { - setState(() { - appSearch = ""; - searchController.clear(); - }); - }, - icon: const Icon( - Icons.filter_alt_off, - size: 30, - ), - ), - ), - ], - ), - const SizedBox(height: 10), - GridView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - padding: EdgeInsets.only( - left: width / 13, - right: width / 13, - bottom: height / 15, - //top: 20, - ), - // shrinkWrap: true, - itemCount: searchApp(pbswitch[_selectedIndex], appSearch).length, - gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: 15, maxCrossAxisExtent: 200), - itemBuilder: (context, index) { - return searchApp(pbswitch[_selectedIndex], appSearch)[index]; - }, - ), - ], - ); - } - MIHAppDrawer getActionDrawer() { return MIHAppDrawer( signedInUser: widget.signedInUser, @@ -1120,178 +116,47 @@ class _MIHHomeState extends State { ); } - MIHNotificationDrawer getSecondaryActionDrawer() { - return MIHNotificationDrawer( - signedInUser: widget.signedInUser, - notifications: widget.notifications, + MihAppTools getTools() { + Map temp = {}; + temp[const Icon(Icons.person)] = () { + setState(() { + _selcetedIndex = 0; + }); + }; + if (widget.isBusinessUser) { + temp[const Icon(Icons.business_center)] = () { + setState(() { + _selcetedIndex = 1; + }); + }; + } + return MihAppTools( + tools: temp, + selcetedIndex: _selcetedIndex, ); } - Widget getBottomNavBar() { - return Visibility( - visible: isBusinessUser(widget.signedInUser), - child: Padding( - padding: const EdgeInsets.only( - left: 10.0, right: 10.0, bottom: 10.0, top: 0), - child: GNav( - //hoverColor: Colors.lightBlueAccent, - color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), - iconSize: 35.0, - activeColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), - tabBackgroundColor: - MzanziInnovationHub.of(context)!.theme.secondaryColor(), - //gap: 20, - //padding: EdgeInsets.all(15), - tabs: [ - GButton( - icon: Icons.perm_identity, - text: "Personal", - onPressed: () { - setState(() { - widget.personalSelected = true; - _selectedIndex = 0; - }); - print("personal selected: ${widget.personalSelected}"); - }, - ), - GButton( - icon: Icons.business_center, - text: "Business", - onPressed: () { - setState(() { - widget.personalSelected = false; - _selectedIndex = 1; - }); - print("personal selected: ${widget.personalSelected}"); - }, - ), - ], - selectedIndex: _selectedIndex, - ), + List getToolBody() { + List toolBodies = []; + toolBodies.add( + MihPersonalHome( + signedInUser: widget.signedInUser, + personalSelected: _personalSelected, + business: widget.business, + businessUser: widget.businessUser, + propicFile: widget.propicFile, ), ); - } - - bool hasNewNotifications() { - //print(widget.notifications.toString()); - if (notifiList.map((item) => item.notification_read).contains("No")) { - //print("New Notification Available"); - - return true; - } else { - //print("No New Notification Available"); - return false; - } - } - - Future refreshNotifications() async { - if (MzanziInnovationHub.of(context)!.theme.getPlatform() == "Web") { - html.window.location.reload(); - } else { - var responseNotification = await http.get(Uri.parse( - "$baseAPI/notifications/${widget.signedInUser.app_id}?amount=$amount")); - List notifi; - if (responseNotification.statusCode == 200) { - String body = responseNotification.body; - // var decodedData = jsonDecode(body); - // MIHNotification notifications = MIHNotification.fromJson(decodedData); - - Iterable l = jsonDecode(body); - //print("Here2"); - List notifications = List.from( - l.map((model) => MIHNotification.fromJson(model))); - notifi = notifications; - } else { - notifi = []; - } - setState(() { - notifiList = notifi; - }); - notificationPopUp(); - } - } - - void notificationPopUp() { - if (hasNewNotifications()) { - showDialog( - barrierColor: const Color(0x01000000), - context: context, - builder: (context) { - return MIHNotificationMessage( - arguments: NotificationArguments( - "Unread Notifications", - "You have unread notifications waiting for you.", - () { - Navigator.of(context).pop(); - //Scaffold.of(context).openEndDrawer(); - }, - ), - ); - }, + if (widget.isBusinessUser) { + toolBodies.add( + MihBusinessHome( + signedInUser: widget.signedInUser, + personalSelected: _personalSelected, + businessUser: widget.businessUser, + business: widget.business, + ), ); } - } - - @override - void dispose() { - searchController.dispose(); - proPicController.dispose(); - _focusNode.dispose(); - super.dispose(); - } - - @override - void initState() { - super.initState(); - setState(() { - pbswitch = setApps(persHTList, busHTList); - businessUserSwitch = false; - notifiList = widget.notifications; - }); - if (!widget.personalSelected) { - setState(() { - _selectedIndex = 1; - }); - } - WidgetsBinding.instance.addPostFrameCallback((_) { - notificationPopUp(); - }); - } - - @override - Widget build(BuildContext context) { - final Size size = MediaQuery.sizeOf(context); - final double width = size.width; - final double height = size.height; - - return SwipeDetector( - onSwipeLeft: (offset) { - if (_selectedIndex == 0) { - setState(() { - _selectedIndex = 1; - }); - } - //print("swipe left"); - }, - onSwipeRight: (offset) { - if (_selectedIndex == 1) { - setState(() { - _selectedIndex = 0; - }); - } - //print("swipe right"); - }, - child: MIHLayoutBuilder( - actionButton: getActionButton(), - header: getHeader(), - secondaryActionButton: getSecondaryActionButton(), - body: getBody(width, height), - actionDrawer: getActionDrawer(), - secondaryActionDrawer: getSecondaryActionDrawer(), - bottomNavBar: getBottomNavBar(), - pullDownToRefresh: true, - onPullDown: refreshNotifications, - ), - ); + return toolBodies; } } diff --git a/Frontend/lib/mih_packages/mih_home/mih_home_legacy.dart b/Frontend/lib/mih_packages/mih_home/mih_home_legacy.dart new file mode 100644 index 00000000..b945be40 --- /dev/null +++ b/Frontend/lib/mih_packages/mih_home/mih_home_legacy.dart @@ -0,0 +1,1323 @@ +import 'dart:async'; +import 'dart:convert'; +// import 'dart:convert'; + +import 'package:Mzansi_Innovation_Hub/mih_objects/patients.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_swipe_detector/flutter_swipe_detector.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:google_nav_bar/google_nav_bar.dart'; +import '../../main.dart'; +import 'package:supertokens_flutter/http.dart' as http; +import "package:universal_html/html.dart" as html; + +import '../../mih_apis/mih_location_api.dart'; +import '../../mih_components/mih_inputs_and_buttons/mih_search_input.dart'; +import '../../mih_components/mih_layout/mih_action.dart'; +import 'components/mih_app_drawer.dart'; +import '../../mih_components/mih_layout/mih_body.dart'; +import '../../mih_components/mih_layout/mih_header.dart'; +import '../../mih_components/mih_layout/mih_layout_builder.dart'; +import '../../mih_components/mih_layout/mih_notification_drawer.dart'; +import '../../mih_components/mih_layout/mih_tile.dart'; +import '../../mih_components/mih_layout/mih_window.dart'; +import '../../mih_components/mih_pop_up_messages/mih_delete_message.dart'; +import '../../mih_components/mih_pop_up_messages/mih_error_message.dart'; +import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import '../../mih_components/mih_pop_up_messages/mih_notification_message.dart'; +import '../../mih_components/mih_pop_up_messages/mih_success_message.dart'; +import '../../mih_components/mih_pop_up_messages/mih_warning_message.dart'; +import '../../mih_components/mih_profile_picture.dart'; +import '../../mih_env/env.dart'; +import '../../mih_objects/app_user.dart'; +import '../../mih_objects/arguments.dart'; +import '../../mih_objects/business.dart'; +import '../../mih_objects/business_user.dart'; +import '../../mih_objects/notification.dart'; +import '../test/test.dart'; + +// ignore: must_be_immutable +class MIHHomeLegacy extends StatefulWidget { + final AppUser signedInUser; + final BusinessUser? businessUser; + final Business? business; + final Patient? patient; + final List notifications; + final ImageProvider? propicFile; + final bool isUserNew; + final bool isBusinessUser; + final bool isBusinessUserNew; + final bool isDevActive; + bool personalSelected; + MIHHomeLegacy({ + super.key, + required this.signedInUser, + required this.businessUser, + required this.business, + required this.patient, + required this.notifications, + required this.propicFile, + required this.isUserNew, + required this.isBusinessUser, + required this.isBusinessUserNew, + required this.isDevActive, + required this.personalSelected, + }); + + @override + State createState() => _MIHHomeLegacyState(); +} + +class _MIHHomeLegacyState extends State { + final proPicController = TextEditingController(); + final TextEditingController searchController = TextEditingController(); + final FocusNode _focusNode = FocusNode(); + late List persHTList = []; + late List busHTList = []; + late List> pbswitch; + late List notifiList; + late bool businessUserSwitch; + int _selectedIndex = 0; + String appSearch = ""; + int amount = 10; + final baseAPI = AppEnviroment.baseApiUrl; + // final MobileScannerController scannerController = MobileScannerController( + // // required options for the scanner + // ); + + void setAppsNewPersonal(List tileList) { + ImageProvider logo = MzanziInnovationHub.of(context)!.theme.logoImage(); + + if (widget.signedInUser.fname == "") { + tileList.add(MIHTile( + videoID: "jFV3NN65DtQ", + onTap: () { + Navigator.of(context).pushNamed('/user-profile', + arguments: AppProfileUpdateArguments( + widget.signedInUser, widget.propicFile)); + }, + tileName: "Setup Profie", + tileIcon: Padding( + padding: const EdgeInsets.all(15.0), + child: Image(image: logo), + ), + p: getPrim(), + s: getSec(), + )); + } + } + + void setAppsNewBusiness(List tileList) { + tileList.add(MIHTile( + videoID: "Nfp4pVBZL78", + onTap: () { + Navigator.of(context).pushNamed( + '/business-profile/set-up', + arguments: widget.signedInUser, + ); + }, + tileName: "Setup Business", + tileIcon: Icon( + Icons.add_business_outlined, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + } + + void setAppsPersonal(List tileList) { + ImageProvider logo = MzanziInnovationHub.of(context)!.theme.logoImage(); + ImageProvider aiLogo = MzanziInnovationHub.of(context)!.theme.aiLogoImage(); + tileList.add(MIHTile( + videoID: "P2bM9eosJ_A", + onTap: () { + Navigator.of(context).pushNamed( + '/mzansi-profile', + arguments: AppProfileUpdateArguments( + widget.signedInUser, + widget.propicFile, + ), + ); + }, + tileName: "Mzansi Profile", + tileIcon: Padding( + padding: const EdgeInsets.all(15.0), + child: Image(image: logo), + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + videoID: "6l8h0sjt08k", + onTap: () { + Navigator.of(context).pushNamed( + '/mzansi-wallet', + arguments: widget.signedInUser, + ); + }, + tileName: "Mzansi Wallet", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.wallet, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + // print("Pat Prof: ${widget.patient}"); + if (widget.patient != null) { + tileList.add(MIHTile( + videoID: "NUDdoWrbXNc", + onTap: () { + Navigator.of(context).pushNamed('/patient-profile', + arguments: PatientViewArguments( + widget.signedInUser, null, null, null, "personal")); + }, + tileName: "Patient Profile", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.bookMedical, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.medication, + // color: getSec(), + // size: 200, + // ), + p: getPrim(), + s: getSec(), + )); + } else { + tileList.add(MIHTile( + videoID: "NUDdoWrbXNc", + onTap: () { + Navigator.of(context).pushNamed('/patient-profile/set-up', + arguments: widget.signedInUser); + }, + tileName: "Set Up Patient", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.bookMedical, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.medication, + // color: getSec(), + // size: 200, + // ), + p: getPrim(), + s: getSec(), + )); + } + tileList.add(MIHTile( + videoID: "dYuLqZWzMnM", + onTap: () { + Navigator.of(context).pushNamed( + '/mzansi-ai', + arguments: widget.signedInUser, + ); + }, + tileName: "Mzansi AI", + tileIcon: Center( + child: SizedBox( + width: 225, + child: Image(image: aiLogo), + ), + ), + // Icon( + // Icons.medication, + // color: getSec(), + // size: 200, + // ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + videoID: "nfzhJFY_W4Y", + onTap: () { + Navigator.of(context).pushNamed( + '/calendar', + arguments: CalendarArguments( + widget.signedInUser, + true, + widget.business, + null, + ), + ); + }, + tileName: "Calendar", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.calendarDays, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.calendar_month, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + videoID: "woQ5hND5EaU", + onTap: () { + Navigator.of(context).pushNamed( + '/calculator', + arguments: widget.personalSelected, + ); + }, + tileName: "Calculator", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.calculator, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + videoID: "", + onTap: () { + Navigator.of(context).pushNamed( + '/mih-access', + arguments: widget.signedInUser, + ); + }, + tileName: "MIH Access", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.userCheck, + color: getSec(), + size: 170, + ), + ), + // Icon( + // Icons.check_box_outlined, + // color: getSec(), + // size: 200, + // ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + videoID: "hbKhlmY_56U", + onTap: () { + Navigator.of(context).pushNamed( + '/about', + arguments: 0, + ); + }, + tileName: "About MIH", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.circleInfo, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + } + + void setAppsBusiness(List tileList) { + ImageProvider aiLogo = MzanziInnovationHub.of(context)!.theme.aiLogoImage(); + tileList.add(MIHTile( + videoID: "NWyJZq2ZYOM", + onTap: () { + Navigator.of(context).pushNamed( + '/business-profile/manage', + arguments: BusinessArguments( + widget.signedInUser, + widget.businessUser, + widget.business, + ), + ); + }, + tileName: "Biz Profile", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.buildingUser, + color: getSec(), + size: 165, + ), + ), + // Icon( + // Icons.business, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + // tileList.add(MIHTile( + // onTap: () { + // Navigator.of(context).pushNamed( + // '/mih-access', + // arguments: widget.signedInUser, + // ); + // }, + // tileName: "Access", + // tileIcon: Icon( + // Icons.check_box_outlined, + // color: getSec(), + // size: 200, + // ), + // p: getPrim(), + // s: getSec(), + // )); + tileList.add(MIHTile( + videoID: "D6q2qIavoiY", + onTap: () { + Navigator.of(context).pushNamed( + '/patient-manager', + arguments: PatManagerArguments( + widget.signedInUser, + widget.personalSelected, + widget.business, + widget.businessUser, + ), + ); + }, + tileName: "Pat Manager", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.bookMedical, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.medication, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + videoID: "nfzhJFY_W4Y", + onTap: () { + Navigator.of(context).pushNamed( + '/calendar', + arguments: CalendarArguments( + widget.signedInUser, + false, + widget.business, + widget.businessUser, + ), + ); + }, + tileName: "Calendar", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.calendarDays, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.calendar_month, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + videoID: "dYuLqZWzMnM", + onTap: () { + Navigator.of(context).pushNamed( + '/mzansi-ai', + arguments: widget.signedInUser, + ); + }, + tileName: "Mzansi AI", + tileIcon: Center( + child: SizedBox( + width: 225, + child: Image(image: aiLogo), + ), + ), + // Icon( + // Icons.medication, + // color: getSec(), + // size: 200, + // ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + videoID: "woQ5hND5EaU", + onTap: () { + Navigator.of(context).pushNamed( + '/calculator', + arguments: widget.personalSelected, + ); + }, + tileName: "Calculator", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.calculator, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + videoID: "hbKhlmY_56U", + onTap: () { + Navigator.of(context).pushNamed( + '/about', + arguments: 0, + ); + }, + tileName: "About MIH", + tileIcon: Center( + child: FaIcon( + FontAwesomeIcons.circleInfo, + color: getSec(), + size: 200, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + } + + void setAppsDev(List tileList) { + if (AppEnviroment.getEnv() == "Dev") { + tileList.add(MIHTile( + videoID: "", + onTap: () { + Navigator.of(context).pushNamed( + '/home-dev', + //arguments: widget.signedInUser, + ); + }, + tileName: "Home - Dev", + tileIcon: Center( + child: Icon( + Icons.warning, + color: getSec(), + size: 230, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + videoID: "", + onTap: () { + Navigator.of(context).pushNamed( + '/package-dev', + //arguments: widget.signedInUser, + ); + }, + tileName: "Package - Dev", + tileIcon: Center( + child: Icon( + Icons.warning, + color: getSec(), + size: 230, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + videoID: "", + onTap: () { + Navigator.of(context).pushNamed( + '/terms-of-service', + //arguments: widget.signedInUser, + ); + }, + tileName: "TOS - Dev", + tileIcon: Center( + child: Icon( + Icons.design_services, + color: getSec(), + size: 230, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + videoID: "", + onTap: () { + Navigator.of(context).pushNamed( + '/privacy-policy', + //arguments: widget.signedInUser, + ); + }, + tileName: "Policy - Dev", + tileIcon: Center( + child: Icon( + Icons.policy, + color: getSec(), + size: 230, + ), + ), + // Icon( + // Icons.info_outline, + // color: getSec(), + // size: 230, + // ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + TextEditingController cardNumberController = TextEditingController(); + Navigator.of(context).pushNamed( + '/scanner', + arguments: cardNumberController, + ); + print(cardNumberController.text); + }, + tileName: "Scanner - Dev", + tileIcon: Icon( + Icons.camera_alt_outlined, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + showDialog( + barrierColor: const Color(0x01000000), + context: context, + builder: (context) { + return const MIHTest(); + }, + ); + }, + tileName: "video - Dev", + tileIcon: Icon( + Icons.video_file, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + showDialog( + barrierColor: const Color(0x01000000), + context: context, + builder: (context) { + return Builder(builder: (context) { + return MIHNotificationMessage( + arguments: NotificationArguments( + "Testing", + "Testing the new MIH Notification", + () { + Navigator.of(context).pop(); + //Scaffold.of(context).openEndDrawer(); + }, + ), + ); + }); + }, + ); + }, + tileName: "Notify - Dev", + tileIcon: Icon( + Icons.notifications, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + showDialog( + context: context, + builder: (context) { + return const Mihloadingcircle(); + }, + ); + }, + tileName: "Loading - Dev", + tileIcon: Icon( + Icons.change_circle, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + Navigator.of(context).pushNamed( + '/business-profile/set-up', + arguments: widget.signedInUser, + ); + }, + tileName: "Setup Bus - Dev", + tileIcon: Icon( + Icons.add_business_outlined, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + Navigator.of(context).pushNamed('/patient-profile/set-up', + arguments: widget.signedInUser); + }, + tileName: "Add Pat - Dev", + tileIcon: Icon( + Icons.add_circle_outline, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + onTap: () { + showDialog( + context: context, + builder: (context) { + // return const MIHWarningMessage(warningType: "No Access"); + return const MIHWarningMessage(warningType: "Expired Access"); + }, + ); + }, + tileName: "Warn - Dev", + tileIcon: Icon( + Icons.warning_amber_rounded, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + showDialog( + context: context, + builder: (context) { + // return const MIHErrorMessage(errorType: "Input Error"); + // return const MIHErrorMessage(errorType: "Password Requirements"); + // return const MIHErrorMessage(errorType: "Invalid Username"); + // return const MIHErrorMessage(errorType: "Invalid Email"); + // return const MIHErrorMessage(errorType: "User Exists"); + // return const MIHErrorMessage(errorType: "Password Match"); + // return const MIHErrorMessage(errorType: "Invalid Credentials"); + return const MIHErrorMessage(errorType: "Internet Connection"); + }, + ); + }, + tileName: "Error - Dev", + tileIcon: Icon( + Icons.error_outline_outlined, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + showDialog( + context: context, + builder: (context) { + return const MIHSuccessMessage( + successType: "Success", + successMessage: + "Congratulations! Your account has been created successfully. You are log in and can start exploring.\n\nPlease note: more apps will appear once you update your profile."); + }, + ); + }, + tileName: "Success - Dev", + tileIcon: Icon( + Icons.check_circle_outline_outlined, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + + tileList.add(MIHTile( + onTap: () { + showDialog( + context: context, + builder: (context) { + // return MIHDeleteMessage(deleteType: "Note", onTap: () {}); + return MIHDeleteMessage(deleteType: "File", onTap: () {}); + }, + ); + }, + tileName: "Delete - Dev", + tileIcon: Icon( + Icons.delete_forever_outlined, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + // return const MIHErrorMessage(errorType: "Input Error"); + // return const MIHErrorMessage(errorType: "Password Requirements"); + // return const MIHErrorMessage(errorType: "Invalid Username"); + // return const MIHErrorMessage(errorType: "Invalid Email"); + // return const MIHErrorMessage(errorType: "User Exists"); + // return const MIHErrorMessage(errorType: "Password Match"); + // return const MIHErrorMessage(errorType: "Invalid Credentials"); + return MIHWindow( + fullscreen: false, + windowTitle: + "Test Window title that is too large for mobile devices", + windowBody: const [ + SizedBox( + height: 250, + ) + ], + windowTools: [ + IconButton( + onPressed: () { + //deleteFilePopUp(filePath, fileID); + }, + icon: Icon( + Icons.delete, + size: 35, + color: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + IconButton( + onPressed: () { + //deleteFilePopUp(filePath, fileID); + }, + icon: Icon( + Icons.wallet, + size: 35, + color: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + ], + onWindowTapClose: () { + Navigator.pop(context); + }, + ); + }, + ); + }, + tileName: "Window - Dev", + tileIcon: Icon( + Icons.window, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + tileList.add(MIHTile( + onTap: () { + MIHLocationAPI().getGPSPosition(context).then((position) { + if (position != null) { + print(position); + print( + "Distance: ${MIHLocationAPI().getDistanceInMeaters(position, position)}m"); + } + }); + }, + tileName: "Location - Dev", + tileIcon: Icon( + Icons.location_pin, + color: getSec(), + size: 230, + ), + p: getPrim(), + s: getSec(), + )); + } + } + + List searchApp(List appList, String searchString) { + if (searchString == "") { + return appList; + } else { + List temp = []; + for (var item in appList) { + if (item.tileName.toLowerCase().contains(appSearch.toLowerCase())) { + temp.add(item); + } + } + return temp; + } + } + + List> setApps( + List personalTileList, List businessTileList) { + if (widget.isUserNew) { + setAppsNewPersonal(personalTileList); + } else if (!widget.isBusinessUser) { + setAppsPersonal(personalTileList); + } else if (widget.isBusinessUserNew) { + setAppsPersonal(personalTileList); + setAppsNewBusiness(businessTileList); + } else { + setAppsPersonal(personalTileList); + setAppsBusiness(businessTileList); + } + if (widget.isDevActive) { + setAppsDev(personalTileList); + setAppsDev(businessTileList); + } + return [personalTileList, businessTileList]; + } + + Color getPrim() { + return MzanziInnovationHub.of(context)!.theme.secondaryColor(); + } + + Color getSec() { + return MzanziInnovationHub.of(context)!.theme.primaryColor(); + } + + bool isBusinessUser(AppUser signedInUser) { + if (signedInUser.type == "personal") { + return false; + } else { + return true; + } + } + + String getHeading(int index) { + if (index == 0) { + return "Personal Apps"; + } else { + return "Business Apps"; + } + } + + void onDragStart(DragStartDetails startDrag) { + Scaffold.of(context).openDrawer(); + print(startDrag.globalPosition.dx); + } + + Widget getActionButton() { + return Builder(builder: (context) { + return MIHAction( + icon: Padding( + padding: const EdgeInsets.only(left: 5.0), + child: MIHProfilePicture( + profilePictureFile: widget.propicFile, + proPicController: proPicController, + proPic: null, + width: 45, + radius: 21, + drawerMode: false, + editable: false, + onChange: (newProPic) {}, + ), + ), + // const Icon(Icons.apps), + iconSize: 45, + onTap: () { + setState(() { + appSearch = ""; + searchController.clear(); + }); + //key.currentState.o + Scaffold.of(context).openDrawer(); + }, + ); + }); + } + + Widget getSecondaryActionButton() { + Widget notIIcon; + if (hasNewNotifications()) { + notIIcon = Stack( + children: [ + const Icon(Icons.notifications), + Positioned( + right: 0, + top: 0, + child: Icon( + Icons.circle, + size: 10, + color: MzanziInnovationHub.of(context)!.theme.errorColor(), + ), + ) + ], + ); + } else { + notIIcon = const Icon(Icons.notifications); + } + return Builder(builder: (context) { + return MIHAction( + icon: notIIcon, + iconSize: 35, + onTap: () { + setState(() { + appSearch = ""; + searchController.clear(); + }); + //key.currentState.o + Scaffold.of(context).openEndDrawer(); + }, + ); + }); + } + + MIHHeader getHeader() { + return const MIHHeader( + headerAlignment: MainAxisAlignment.center, + headerItems: [ + Text( + "MIH", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 20, + ), + ), + ], + ); + } + + MIHBody getBody(double width, double height) { + return MIHBody( + borderOn: false, + bodyItems: [ + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + flex: 4, + child: KeyboardListener( + focusNode: _focusNode, + autofocus: true, + onKeyEvent: (event) async { + if (event is KeyDownEvent && + event.logicalKey == LogicalKeyboardKey.enter) { + setState(() { + appSearch = searchController.text; + }); + } + }, + child: SizedBox( + child: MIHSearchField( + controller: searchController, + hintText: "Search Mzansi Packages", + required: false, + editable: true, + onTap: () { + setState(() { + appSearch = searchController.text; + }); + }, + ), + ), + ), + ), + Flexible( + flex: 1, + child: IconButton( + //padding: const EdgeInsets.all(0), + onPressed: () { + setState(() { + appSearch = ""; + searchController.clear(); + }); + }, + icon: const Icon( + Icons.filter_alt_off, + size: 30, + ), + ), + ), + ], + ), + const SizedBox(height: 10), + GridView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: EdgeInsets.only( + left: width / 13, + right: width / 13, + bottom: height / 15, + //top: 20, + ), + // shrinkWrap: true, + itemCount: searchApp(pbswitch[_selectedIndex], appSearch).length, + gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( + mainAxisSpacing: 15, maxCrossAxisExtent: 200), + itemBuilder: (context, index) { + return searchApp(pbswitch[_selectedIndex], appSearch)[index]; + }, + ), + ], + ); + } + + MIHAppDrawer getActionDrawer() { + return MIHAppDrawer( + signedInUser: widget.signedInUser, + propicFile: widget.propicFile, + ); + } + + MIHNotificationDrawer getSecondaryActionDrawer() { + return MIHNotificationDrawer( + signedInUser: widget.signedInUser, + notifications: widget.notifications, + ); + } + + Widget getBottomNavBar() { + return Visibility( + visible: isBusinessUser(widget.signedInUser), + child: Padding( + padding: const EdgeInsets.only( + left: 10.0, right: 10.0, bottom: 10.0, top: 0), + child: GNav( + //hoverColor: Colors.lightBlueAccent, + color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + iconSize: 35.0, + activeColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + tabBackgroundColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + //gap: 20, + //padding: EdgeInsets.all(15), + tabs: [ + GButton( + icon: Icons.perm_identity, + text: "Personal", + onPressed: () { + setState(() { + widget.personalSelected = true; + _selectedIndex = 0; + }); + print("personal selected: ${widget.personalSelected}"); + }, + ), + GButton( + icon: Icons.business_center, + text: "Business", + onPressed: () { + setState(() { + widget.personalSelected = false; + _selectedIndex = 1; + }); + print("personal selected: ${widget.personalSelected}"); + }, + ), + ], + selectedIndex: _selectedIndex, + ), + ), + ); + } + + bool hasNewNotifications() { + //print(widget.notifications.toString()); + if (notifiList.map((item) => item.notification_read).contains("No")) { + //print("New Notification Available"); + + return true; + } else { + //print("No New Notification Available"); + return false; + } + } + + Future refreshNotifications() async { + if (MzanziInnovationHub.of(context)!.theme.getPlatform() == "Web") { + html.window.location.reload(); + } else { + var responseNotification = await http.get(Uri.parse( + "$baseAPI/notifications/${widget.signedInUser.app_id}?amount=$amount")); + List notifi; + if (responseNotification.statusCode == 200) { + String body = responseNotification.body; + // var decodedData = jsonDecode(body); + // MIHNotification notifications = MIHNotification.fromJson(decodedData); + + Iterable l = jsonDecode(body); + //print("Here2"); + List notifications = List.from( + l.map((model) => MIHNotification.fromJson(model))); + notifi = notifications; + } else { + notifi = []; + } + setState(() { + notifiList = notifi; + }); + notificationPopUp(); + } + } + + void notificationPopUp() { + if (hasNewNotifications()) { + showDialog( + barrierColor: const Color(0x01000000), + context: context, + builder: (context) { + return MIHNotificationMessage( + arguments: NotificationArguments( + "Unread Notifications", + "You have unread notifications waiting for you.", + () { + Navigator.of(context).pop(); + //Scaffold.of(context).openEndDrawer(); + }, + ), + ); + }, + ); + } + } + + @override + void dispose() { + searchController.dispose(); + proPicController.dispose(); + _focusNode.dispose(); + super.dispose(); + } + + @override + void initState() { + super.initState(); + setState(() { + pbswitch = setApps(persHTList, busHTList); + businessUserSwitch = false; + notifiList = widget.notifications; + }); + if (!widget.personalSelected) { + setState(() { + _selectedIndex = 1; + }); + } + WidgetsBinding.instance.addPostFrameCallback((_) { + notificationPopUp(); + }); + } + + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.sizeOf(context); + final double width = size.width; + final double height = size.height; + + return SwipeDetector( + onSwipeLeft: (offset) { + if (_selectedIndex == 0) { + setState(() { + _selectedIndex = 1; + }); + } + //print("swipe left"); + }, + onSwipeRight: (offset) { + if (_selectedIndex == 1) { + setState(() { + _selectedIndex = 0; + }); + } + //print("swipe right"); + }, + child: MIHLayoutBuilder( + actionButton: getActionButton(), + header: getHeader(), + secondaryActionButton: getSecondaryActionButton(), + body: getBody(width, height), + actionDrawer: getActionDrawer(), + secondaryActionDrawer: getSecondaryActionDrawer(), + bottomNavBar: getBottomNavBar(), + pullDownToRefresh: true, + onPullDown: refreshNotifications, + ), + ); + } +} diff --git a/Frontend/lib/mih_packages/mih_home/mih_profile_getter.dart b/Frontend/lib/mih_packages/mih_home/mih_profile_getter.dart index b64e7777..6e6faafe 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_profile_getter.dart +++ b/Frontend/lib/mih_packages/mih_home/mih_profile_getter.dart @@ -4,6 +4,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih-app_tool_bo import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mih_home/mih_home.dart'; import 'package:flutter/material.dart'; import '../../mih_apis/mih_api_calls.dart'; @@ -12,7 +13,6 @@ import '../../mih_env/env.dart'; import '../../mih_objects/app_user.dart'; import '../../mih_objects/arguments.dart'; import '../../mih_objects/business_user.dart'; -import 'mih_home.dart'; class MIHProfileGetter extends StatefulWidget { final bool personalSelected; @@ -242,7 +242,7 @@ class _MIHProfileGetterState extends State { builder: (BuildContext context, snapshot) { if (snapshot.connectionState == ConnectionState.done) { if (snapshot.hasData) { - return MIHHome( + return MihHome( signedInUser: snapshot.requireData.signedInUser, businessUser: snapshot.data!.businessUser, business: snapshot.data!.business, @@ -255,6 +255,19 @@ class _MIHProfileGetterState extends State { isDevActive: isDevActive(), personalSelected: widget.personalSelected, ); + // return MIHHomeLegacy( + // signedInUser: snapshot.requireData.signedInUser, + // businessUser: snapshot.data!.businessUser, + // business: snapshot.data!.business, + // patient: snapshot.data!.patient, + // notifications: snapshot.data!.notifi, + // propicFile: isPictureAvailable(snapshot.data!.profilePicUrl), + // isUserNew: isUserNew(snapshot.requireData.signedInUser), + // isBusinessUser: isBusinessUser(snapshot.requireData.signedInUser), + // isBusinessUserNew: isBusinessUserNew(snapshot.data!.businessUser), + // isDevActive: isDevActive(), + // personalSelected: widget.personalSelected, + // ); } else { return errorPage(snapshot.error.toString()); } 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 new file mode 100644 index 00000000..0e877039 --- /dev/null +++ b/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart @@ -0,0 +1,222 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_search_input.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_single_child_scroll.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih-app_tool_body.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/business.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/business_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/package_tile/about_mih_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calculator/package_tiles/mih_calculator_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_manager/package_tiles/pat_manager_tile.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class MihBusinessHome extends StatefulWidget { + final AppUser signedInUser; + final bool personalSelected; + final Business? business; + final BusinessUser? businessUser; + const MihBusinessHome({ + super.key, + required this.signedInUser, + required this.personalSelected, + required this.business, + required this.businessUser, + }); + + @override + State createState() => _MihBusinessHomeState(); +} + +class _MihBusinessHomeState extends State { + final FocusNode _focusNode = FocusNode(); + final TextEditingController searchController = TextEditingController(); + String packageSearch = ""; + late List businessPackages; + double packageSize = 200; + + List setBusinessPackages() { + List temp = []; + //=============== Biz Profile =============== + temp.add( + MzansiBusinessProfileTile( + arguments: BusinessArguments( + widget.signedInUser, + widget.businessUser, + widget.business, + ), + packageSize: packageSize, + ), + ); + //=============== Pat Manager =============== + temp.add( + PatManagerTile( + arguments: PatManagerArguments( + widget.signedInUser, + false, + widget.business, + widget.businessUser, + ), + packageSize: packageSize, + ), + ); + //=============== Calendar =============== + temp.add( + MzansiCalendarTile( + arguments: CalendarArguments( + widget.signedInUser, + false, + widget.business, + widget.businessUser, + ), + packageSize: packageSize, + ), + ); + //=============== Mzansi AI =============== + temp.add( + MzansiAiTile( + signedInUser: widget.signedInUser, + packageSize: packageSize, + ), + ); + //=============== Calculator =============== + temp.add( + MihCalculatorTile( + personalSelected: widget.personalSelected, + packageSize: packageSize, + ), + ); + //=============== About MIH =============== + temp.add( + AboutMihTile(packageSize: packageSize), + ); + return temp; + } + + EdgeInsets getPadding(double width, double height) { + if (MzanziInnovationHub.of(context)!.theme.screenType == "mobile") { + double mobilePadding = 10; + return EdgeInsets.only( + left: mobilePadding, + right: mobilePadding, + bottom: mobilePadding, + ); + } else { + return EdgeInsets.only( + left: width / 13, + right: width / 13, + bottom: height / 15, + ); + } + } + + @override + void dispose() { + super.dispose(); + searchController.dispose(); + } + + @override + void initState() { + super.initState(); + businessPackages = setBusinessPackages(); + } + + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.sizeOf(context); + final double width = size.width; + final double height = size.height; + return MihAppToolBody( + borderOn: true, + bodyItem: getBody(width, height), + ); + } + + Widget getBody(double width, double height) { + return MihSingleChildScroll( + child: Column( + children: [ + const Text( + "Business Home", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), + const SizedBox( + height: 10, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + 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; + }); + }, + ), + ), + ), + ), + Flexible( + flex: 1, + child: IconButton( + //padding: const EdgeInsets.all(0), + onPressed: () { + setState(() { + packageSearch = ""; + searchController.clear(); + }); + }, + icon: const Icon( + Icons.filter_alt_off, + size: 30, + ), + ), + ), + ], + ), + 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]; + }, + ), + ], + ), + ); + } +} 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 new file mode 100644 index 00000000..ae9eee38 --- /dev/null +++ b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart @@ -0,0 +1,240 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_search_input.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_single_child_scroll.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih-app_tool_body.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/business.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/business_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/package_tile/about_mih_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/access_review/package_tile/mih_access_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calculator/package_tiles/mih_calculator_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/package_tiles/patient_profile_tile.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class MihPersonalHome extends StatefulWidget { + final AppUser signedInUser; + final bool personalSelected; + final Business? business; + final BusinessUser? businessUser; + final ImageProvider? propicFile; + + const MihPersonalHome({ + super.key, + required this.signedInUser, + required this.personalSelected, + required this.business, + required this.businessUser, + required this.propicFile, + }); + + @override + State createState() => _MihPersonalHomeState(); +} + +class _MihPersonalHomeState extends State { + final FocusNode _focusNode = FocusNode(); + final TextEditingController searchController = TextEditingController(); + String packageSearch = ""; + late List personalPackages; + double packageSize = 200; + + List setPersonalPackages() { + List temp = []; + //=============== Mzansi Profile =============== + temp.add( + MzansiProfileTile( + signedInUser: widget.signedInUser, + propicFile: widget.propicFile, + packageSize: packageSize, + ), + ); + //=============== Mzansi Wallet =============== + temp.add( + MihWalletTile( + signedInUser: widget.signedInUser, + packageSize: packageSize, + ), + ); + //=============== Patient Profile =============== + temp.add( + PatientProfileTile( + arguments: PatientViewArguments( + widget.signedInUser, + null, + null, + null, + "personal", + ), + packageSize: packageSize, + ), + ); + //=============== Mzansi AI =============== + temp.add( + MzansiAiTile( + signedInUser: widget.signedInUser, + packageSize: packageSize, + ), + ); + //=============== Calendar =============== + temp.add( + MzansiCalendarTile( + arguments: CalendarArguments( + widget.signedInUser, + true, + widget.business, + widget.businessUser, + ), + packageSize: packageSize, + ), + ); + //=============== Calculator =============== + temp.add( + MihCalculatorTile( + personalSelected: widget.personalSelected, + packageSize: packageSize, + ), + ); + //=============== MIH Access =============== + temp.add( + MihAccessTile( + signedInUser: widget.signedInUser, + packageSize: packageSize, + ), + ); + //=============== About MIH =============== + temp.add( + AboutMihTile(packageSize: packageSize), + ); + return temp; + } + + EdgeInsets getPadding(double width, double height) { + if (MzanziInnovationHub.of(context)!.theme.screenType == "mobile") { + double mobilePadding = 10; + return EdgeInsets.only( + left: mobilePadding, + right: mobilePadding, + bottom: mobilePadding, + ); + } else { + return EdgeInsets.only( + left: width / 13, + right: width / 13, + bottom: height / 15, + ); + } + } + + @override + void dispose() { + super.dispose(); + searchController.dispose(); + } + + @override + void initState() { + super.initState(); + personalPackages = setPersonalPackages(); + } + + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.sizeOf(context); + final double width = size.width; + final double height = size.height; + + return MihAppToolBody( + borderOn: true, + bodyItem: getBody(width, height), + ); + } + + Widget getBody(double width, double height) { + return MihSingleChildScroll( + child: Column( + children: [ + const Text( + "Personal Home", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), + const SizedBox( + height: 10, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + 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; + }); + }, + ), + ), + ), + ), + Flexible( + flex: 1, + child: IconButton( + //padding: const EdgeInsets.all(0), + onPressed: () { + setState(() { + packageSearch = ""; + searchController.clear(); + }); + }, + icon: const Icon( + Icons.filter_alt_off, + size: 30, + ), + ), + ), + ], + ), + 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]; + }, + ), + ], + ), + ); + } +} diff --git a/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart b/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart index 49316cf8..54272b97 100644 --- a/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart +++ b/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart @@ -2,7 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_ai/app_tools/ai_chat.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_ai/package_tools/ai_chat.dart'; import 'package:flutter/material.dart'; class MzansiAi extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart b/Frontend/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart new file mode 100644 index 00000000..653a9ff0 --- /dev/null +++ b/Frontend/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart @@ -0,0 +1,41 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:flutter/material.dart'; + +class MzansiAiTile extends StatefulWidget { + final AppUser signedInUser; + final double packageSize; + + const MzansiAiTile({ + super.key, + required this.signedInUser, + required this.packageSize, + }); + + @override + State createState() => _MzansiAiTileState(); +} + +class _MzansiAiTileState extends State { + @override + Widget build(BuildContext context) { + ImageProvider aiLogo = MzanziInnovationHub.of(context)!.theme.aiLogoImage(); + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/mzansi-ai', + arguments: widget.signedInUser, + ); + }, + appName: "Mzansi AI", + appIcon: Container( + padding: const EdgeInsets.all(25), + child: Image(image: aiLogo), + ), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/mzansi_ai/app_tools/ai_chat.dart b/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_ai/app_tools/ai_chat.dart rename to Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart index e4b75b85..2ca69748 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart @@ -2,9 +2,9 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/business_profile/app_tools/mih_business_profile.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/business_profile/app_tools/mih_business_user_search.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/business_profile/app_tools/mih_my_business_team.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_profile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart'; import 'package:flutter/material.dart'; class MzansiBusinessProfile extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart new file mode 100644 index 00000000..b5118c00 --- /dev/null +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart @@ -0,0 +1,43 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; +import 'package:flutter/material.dart'; + +class MzansiBusinessProfileTile extends StatefulWidget { + final BusinessArguments arguments; + final double packageSize; + const MzansiBusinessProfileTile({ + super.key, + required this.arguments, + required this.packageSize, + }); + + @override + State createState() => + _MzansiBusinessProfileTileState(); +} + +class _MzansiBusinessProfileTileState extends State { + @override + Widget build(BuildContext context) { + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/business-profile/manage', + arguments: widget.arguments, + ); + }, + appName: "Business Profile", + appIcon: Container( + padding: const EdgeInsets.all(0.5), + child: Icon( + Icons.business_center, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/app_tools/mih_business_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_profile.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/app_tools/mih_business_profile.dart rename to Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_profile.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/app_tools/mih_business_user_search.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/app_tools/mih_business_user_search.dart rename to Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/app_tools/mih_my_business_team.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/app_tools/mih_my_business_team.dart rename to Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart diff --git a/Frontend/lib/mih_packages/manage_business/builder/build_employee_list.dart b/Frontend/lib/mih_packages/mzansi_profile/manage_business/builder/build_employee_list.dart similarity index 94% rename from Frontend/lib/mih_packages/manage_business/builder/build_employee_list.dart rename to Frontend/lib/mih_packages/mzansi_profile/manage_business/builder/build_employee_list.dart index 8aff3de8..8154b030 100644 --- a/Frontend/lib/mih_packages/manage_business/builder/build_employee_list.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/manage_business/builder/build_employee_list.dart @@ -3,18 +3,18 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:supertokens_flutter/http.dart' as http; -import '../../../main.dart'; -import '../../../mih_components/mih_inputs_and_buttons/mih_button.dart'; -import '../../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; -import '../../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; -import '../../../mih_components/mih_layout/mih_window.dart'; -import '../../../mih_components/mih_pop_up_messages/mih_delete_message.dart'; -import '../../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../../../mih_env/env.dart'; -import '../../../mih_objects/arguments.dart'; -import '../../../mih_objects/business_employee.dart'; +import '../../../../main.dart'; +import '../../../../mih_components/mih_inputs_and_buttons/mih_button.dart'; +import '../../../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; +import '../../../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; +import '../../../../mih_components/mih_layout/mih_window.dart'; +import '../../../../mih_components/mih_pop_up_messages/mih_delete_message.dart'; +import '../../../../mih_components/mih_pop_up_messages/mih_error_message.dart'; +import '../../../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import '../../../../mih_components/mih_pop_up_messages/mih_success_message.dart'; +import '../../../../mih_env/env.dart'; +import '../../../../mih_objects/arguments.dart'; +import '../../../../mih_objects/business_employee.dart'; class BuildEmployeeList extends StatefulWidget { final List employees; diff --git a/Frontend/lib/mih_packages/manage_business/builder/build_user_list.dart b/Frontend/lib/mih_packages/mzansi_profile/manage_business/builder/build_user_list.dart similarity index 94% rename from Frontend/lib/mih_packages/manage_business/builder/build_user_list.dart rename to Frontend/lib/mih_packages/mzansi_profile/manage_business/builder/build_user_list.dart index 864c05b2..a13c5d2f 100644 --- a/Frontend/lib/mih_packages/manage_business/builder/build_user_list.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/manage_business/builder/build_user_list.dart @@ -3,17 +3,17 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:supertokens_flutter/http.dart' as http; -import '../../../main.dart'; -import '../../../mih_components/mih_inputs_and_buttons/mih_button.dart'; -import '../../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; -import '../../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; -import '../../../mih_components/mih_layout/mih_window.dart'; -import '../../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../../../mih_env/env.dart'; -import '../../../mih_objects/app_user.dart'; -import '../../../mih_objects/arguments.dart'; +import '../../../../main.dart'; +import '../../../../mih_components/mih_inputs_and_buttons/mih_button.dart'; +import '../../../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; +import '../../../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; +import '../../../../mih_components/mih_layout/mih_window.dart'; +import '../../../../mih_components/mih_pop_up_messages/mih_error_message.dart'; +import '../../../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import '../../../../mih_components/mih_pop_up_messages/mih_success_message.dart'; +import '../../../../mih_env/env.dart'; +import '../../../../mih_objects/app_user.dart'; +import '../../../../mih_objects/arguments.dart'; class BuildUserList extends StatefulWidget { final List users; diff --git a/Frontend/lib/mih_packages/manage_business/business_about.dart b/Frontend/lib/mih_packages/mzansi_profile/manage_business/business_about.dart similarity index 96% rename from Frontend/lib/mih_packages/manage_business/business_about.dart rename to Frontend/lib/mih_packages/mzansi_profile/manage_business/business_about.dart index 7a7e294e..4a55e123 100644 --- a/Frontend/lib/mih_packages/manage_business/business_about.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/manage_business/business_about.dart @@ -3,20 +3,20 @@ import 'dart:convert'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import '../../main.dart'; +import '../../../main.dart'; import 'package:supertokens_flutter/http.dart' as http; import 'package:supertokens_flutter/supertokens.dart'; import 'package:http/http.dart' as http2; -import '../../mih_components/mih_inputs_and_buttons/mih_button.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_file_input.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; -import '../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../../mih_env/env.dart'; -import '../../mih_objects/arguments.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_button.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_file_input.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_error_message.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_success_message.dart'; +import '../../../mih_env/env.dart'; +import '../../../mih_objects/arguments.dart'; class BusinessAbout extends StatefulWidget { final BusinessArguments arguments; diff --git a/Frontend/lib/mih_packages/manage_business/business_details.dart b/Frontend/lib/mih_packages/mzansi_profile/manage_business/business_details.dart similarity index 96% rename from Frontend/lib/mih_packages/manage_business/business_details.dart rename to Frontend/lib/mih_packages/mzansi_profile/manage_business/business_details.dart index 397f9ed1..16a02b9c 100644 --- a/Frontend/lib/mih_packages/manage_business/business_details.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/manage_business/business_details.dart @@ -3,21 +3,21 @@ import 'dart:convert'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import '../../main.dart'; +import '../../../main.dart'; import 'package:supertokens_flutter/http.dart' as http; import 'package:supertokens_flutter/supertokens.dart'; import 'package:http/http.dart' as http2; -import '../../mih_apis/mih_location_api.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_button.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_file_input.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; -import '../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../../mih_env/env.dart'; -import '../../mih_objects/arguments.dart'; +import '../../../mih_apis/mih_location_api.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_button.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_file_input.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_error_message.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_success_message.dart'; +import '../../../mih_env/env.dart'; +import '../../../mih_objects/arguments.dart'; class BusinessDetails extends StatefulWidget { final BusinessArguments arguments; diff --git a/Frontend/lib/mih_packages/manage_business/manage_business_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/manage_business/manage_business_profile.dart similarity index 95% rename from Frontend/lib/mih_packages/manage_business/manage_business_profile.dart rename to Frontend/lib/mih_packages/mzansi_profile/manage_business/manage_business_profile.dart index d7464c32..152d7308 100644 --- a/Frontend/lib/mih_packages/manage_business/manage_business_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/manage_business/manage_business_profile.dart @@ -3,21 +3,21 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_swipe_detector/flutter_swipe_detector.dart'; -import '../../main.dart'; +import '../../../main.dart'; import 'package:supertokens_flutter/http.dart' as http; -import '../../mih_components/mih_inputs_and_buttons/mih_search_input.dart'; -import '../../mih_components/mih_layout/mih_action.dart'; -import '../../mih_components/mih_layout/mih_body.dart'; -import '../../mih_components/mih_layout/mih_header.dart'; -import '../../mih_components/mih_layout/mih_layout_builder.dart'; -import '../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../../mih_env/env.dart'; -import '../../mih_objects/app_user.dart'; -import '../../mih_objects/arguments.dart'; -import '../../mih_objects/business_employee.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_search_input.dart'; +import '../../../mih_components/mih_layout/mih_action.dart'; +import '../../../mih_components/mih_layout/mih_body.dart'; +import '../../../mih_components/mih_layout/mih_header.dart'; +import '../../../mih_components/mih_layout/mih_layout_builder.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_error_message.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_success_message.dart'; +import '../../../mih_env/env.dart'; +import '../../../mih_objects/app_user.dart'; +import '../../../mih_objects/arguments.dart'; +import '../../../mih_objects/business_employee.dart'; import 'builder/build_employee_list.dart'; import 'builder/build_user_list.dart'; import 'business_details.dart'; diff --git a/Frontend/lib/mih_packages/manage_business/profile_business_add.dart b/Frontend/lib/mih_packages/mzansi_profile/manage_business/profile_business_add.dart similarity index 94% rename from Frontend/lib/mih_packages/manage_business/profile_business_add.dart rename to Frontend/lib/mih_packages/mzansi_profile/manage_business/profile_business_add.dart index a54baa6c..bc5c9647 100644 --- a/Frontend/lib/mih_packages/manage_business/profile_business_add.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/manage_business/profile_business_add.dart @@ -3,26 +3,26 @@ import 'dart:convert'; import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import '../../main.dart'; +import '../../../main.dart'; import 'package:supertokens_flutter/http.dart' as http; import 'package:supertokens_flutter/supertokens.dart'; import 'package:file_picker/file_picker.dart'; import 'package:http/http.dart' as http2; -import '../../mih_apis/mih_location_api.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_button.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_file_input.dart'; -import '../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; -import '../../mih_components/mih_layout/mih_action.dart'; -import '../../mih_components/mih_layout/mih_body.dart'; -import '../../mih_components/mih_layout/mih_header.dart'; -import '../../mih_components/mih_layout/mih_layout_builder.dart'; -import '../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../../mih_env/env.dart'; -import '../../mih_objects/app_user.dart'; +import '../../../mih_apis/mih_location_api.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_button.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_file_input.dart'; +import '../../../mih_components/mih_inputs_and_buttons/mih_text_input.dart'; +import '../../../mih_components/mih_layout/mih_action.dart'; +import '../../../mih_components/mih_layout/mih_body.dart'; +import '../../../mih_components/mih_layout/mih_header.dart'; +import '../../../mih_components/mih_layout/mih_layout_builder.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_error_message.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import '../../../mih_components/mih_pop_up_messages/mih_success_message.dart'; +import '../../../mih_env/env.dart'; +import '../../../mih_objects/app_user.dart'; class ProfileBusinessAdd extends StatefulWidget { //final BusinessUserScreenArguments arguments; 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 e8a90ce3..d6da3b6b 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,7 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/personal_profile/app_tools/mih_personal_profile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart'; import 'package:flutter/material.dart'; class MzansiProfile extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart new file mode 100644 index 00000000..e2ec4410 --- /dev/null +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart @@ -0,0 +1,47 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; +import 'package:flutter/material.dart'; + +class MzansiProfileTile extends StatefulWidget { + final AppUser signedInUser; + final ImageProvider? propicFile; + final double packageSize; + + const MzansiProfileTile({ + super.key, + required this.signedInUser, + required this.propicFile, + required this.packageSize, + }); + + @override + State createState() => _MzansiProfileTileState(); +} + +class _MzansiProfileTileState extends State { + @override + Widget build(BuildContext context) { + ImageProvider logo = MzanziInnovationHub.of(context)!.theme.logoImage(); + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/mzansi-profile', + arguments: AppProfileUpdateArguments( + widget.signedInUser, + widget.propicFile, + ), + ); + }, + appName: "Mzansi Profile", + appIcon: Container( + padding: const EdgeInsets.all(25), + child: Image(image: logo), + ), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/app_tools/mih_personal_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/personal_profile/app_tools/mih_personal_profile.dart rename to Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart diff --git a/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart b/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart index cabd4380..1359c10b 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart @@ -2,7 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_wallet/app_tools/mih_cards.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_wallet/package_tools/mih_cards.dart'; import 'package:flutter/material.dart'; class MihWallet extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart new file mode 100644 index 00000000..0e59f659 --- /dev/null +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart @@ -0,0 +1,45 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; + +class MihWalletTile extends StatefulWidget { + final AppUser signedInUser; + final double packageSize; + + const MihWalletTile({ + super.key, + required this.signedInUser, + required this.packageSize, + }); + + @override + State createState() => _MihWalletTileState(); +} + +class _MihWalletTileState extends State { + @override + Widget build(BuildContext context) { + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/mzansi-wallet', + arguments: widget.signedInUser, + ); + }, + appName: "Mzansi Wallet", + appIcon: Container( + padding: const EdgeInsets.all(25), + child: FaIcon( + FontAwesomeIcons.wallet, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + size: widget.packageSize, + ), + ), + iconSize: 200, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/mzansi_wallet/app_tools/mih_cards.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_wallet/app_tools/mih_cards.dart rename to Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tiles/pat_manager_tile.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tiles/pat_manager_tile.dart new file mode 100644 index 00000000..7a718411 --- /dev/null +++ b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tiles/pat_manager_tile.dart @@ -0,0 +1,42 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; +import 'package:flutter/material.dart'; + +class PatManagerTile extends StatefulWidget { + final PatManagerArguments arguments; + final double packageSize; + const PatManagerTile({ + super.key, + required this.arguments, + required this.packageSize, + }); + + @override + State createState() => _PatManagerTileState(); +} + +class _PatManagerTileState extends State { + @override + Widget build(BuildContext context) { + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/patient-manager', + arguments: widget.arguments, + ); + }, + appName: "Patient Manager", + appIcon: Container( + padding: const EdgeInsets.all(1), + child: Icon( + Icons.medical_services, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/app_tools/mih_patient_search.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_profile/pat_manager/app_tools/mih_patient_search.dart rename to Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/app_tools/my_patient_list.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_profile/pat_manager/app_tools/my_patient_list.dart rename to Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/app_tools/waiting_room.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/waiting_room.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_profile/pat_manager/app_tools/waiting_room.dart rename to Frontend/lib/mih_packages/patient_profile/pat_manager/package_tools/waiting_room.dart diff --git a/Frontend/lib/mih_packages/patient_profile/pat_manager/pat_manager.dart b/Frontend/lib/mih_packages/patient_profile/pat_manager/pat_manager.dart index c517c7a6..f9356471 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_manager/pat_manager.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_manager/pat_manager.dart @@ -2,9 +2,9 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_manager/app_tools/mih_patient_search.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_manager/app_tools/my_patient_list.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_manager/app_tools/waiting_room.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_manager/package_tools/mih_patient_search.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_manager/package_tools/my_patient_list.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_manager/package_tools/waiting_room.dart'; import 'package:flutter/material.dart'; class PatManager extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/package_tiles/patient_profile_tile.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/package_tiles/patient_profile_tile.dart new file mode 100644 index 00000000..b0662da7 --- /dev/null +++ b/Frontend/lib/mih_packages/patient_profile/pat_profile/package_tiles/patient_profile_tile.dart @@ -0,0 +1,43 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; +import 'package:flutter/material.dart'; + +class PatientProfileTile extends StatefulWidget { + final PatientViewArguments arguments; + final double packageSize; + + const PatientProfileTile({ + super.key, + required this.arguments, + required this.packageSize, + }); + + @override + State createState() => _PatientProfileTileState(); +} + +class _PatientProfileTileState extends State { + @override + Widget build(BuildContext context) { + return MihAppTile( + onTap: () { + Navigator.of(context).pushNamed( + '/patient-profile', + arguments: widget.arguments, + ); + }, + appName: "Patient Profile", + appIcon: Container( + padding: const EdgeInsets.all(15), + child: Icon( + Icons.medical_information_outlined, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + size: widget.packageSize, + )), + iconSize: widget.packageSize, + primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ); + } +} diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/app_tools/patient_claim_or_statement.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/package_tools/patient_claim_or_statement.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_profile/pat_profile/app_tools/patient_claim_or_statement.dart rename to Frontend/lib/mih_packages/patient_profile/pat_profile/package_tools/patient_claim_or_statement.dart diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/app_tools/patient_consultation.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/package_tools/patient_consultation.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_profile/pat_profile/app_tools/patient_consultation.dart rename to Frontend/lib/mih_packages/patient_profile/pat_profile/package_tools/patient_consultation.dart diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/app_tools/patient_documents.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/package_tools/patient_documents.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_profile/pat_profile/app_tools/patient_documents.dart rename to Frontend/lib/mih_packages/patient_profile/pat_profile/package_tools/patient_documents.dart diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/app_tools/patient_info.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/package_tools/patient_info.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_profile/pat_profile/app_tools/patient_info.dart rename to Frontend/lib/mih_packages/patient_profile/pat_profile/package_tools/patient_info.dart diff --git a/Frontend/lib/mih_packages/patient_profile/pat_profile/patient_profile.dart b/Frontend/lib/mih_packages/patient_profile/pat_profile/patient_profile.dart index 031b71c5..e3a62d66 100644 --- a/Frontend/lib/mih_packages/patient_profile/pat_profile/patient_profile.dart +++ b/Frontend/lib/mih_packages/patient_profile/pat_profile/patient_profile.dart @@ -2,10 +2,10 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_action.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih_app_tools.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/app_tools/patient_claim_or_statement.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/app_tools/patient_consultation.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/app_tools/patient_documents.dart'; -import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/app_tools/patient_info.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/package_tools/patient_claim_or_statement.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/package_tools/patient_consultation.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/package_tools/patient_documents.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/package_tools/patient_info.dart'; import 'package:flutter/material.dart'; class PatientProfile extends StatefulWidget { diff --git a/Frontend/lib/mih_router/routeGenerator.dart b/Frontend/lib/mih_router/routeGenerator.dart index ef3908dd..6ede9cbf 100644 --- a/Frontend/lib/mih_router/routeGenerator.dart +++ b/Frontend/lib/mih_router/routeGenerator.dart @@ -24,7 +24,7 @@ import '../mih_objects/arguments.dart'; import '../mih_packages/authentication/forgot_password.dart'; import '../mih_packages/authentication/reset_password.dart'; import '../mih_packages/patient_profile/pat_profile/components/full_screen_file.dart'; -import '../mih_packages/manage_business/profile_business_add.dart'; +import '../mih_packages/mzansi_profile/manage_business/profile_business_add.dart'; class RouteGenerator { static Route generateRoute(RouteSettings settings) { @@ -112,7 +112,7 @@ class RouteGenerator { //=============================================================== //User Profile - case '/user-profile': + case '/mzansi-profile': if (args is AppProfileUpdateArguments) { return MaterialPageRoute( settings: settings,