diff --git a/Frontend/flutter_launcher_icons.yaml b/Frontend/flutter_launcher_icons.yaml index f9524c8e..8d972e9f 100644 --- a/Frontend/flutter_launcher_icons.yaml +++ b/Frontend/flutter_launcher_icons.yaml @@ -1,46 +1,46 @@ # flutter pub run flutter_launcher_icons flutter_launcher_icons: # Original - # image_path: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app.png" + # image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" # Women For Change - image_path: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" + image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" android: "launcher_icon" min_sdk_android: 21 # android min sdk min:16, default 21 # Original # adaptive_icon_background: "#3A4454" - # adaptive_icon_foreground: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app.png" + # adaptive_icon_foreground: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" # Women For Change adaptive_icon_background: "#6641b2" - adaptive_icon_foreground: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" + adaptive_icon_foreground: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" ios: true # Original - # image_path_ios: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app.png" + # image_path_ios: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" # Women For Change - image_path_ios: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" + image_path_ios: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" remove_alpha_channel_ios: true web: generate: true # Original - # image_path: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_web.png" + # image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_web.png" # background_color: "#3A4454" # theme_color: "#3A4454" # Women For Change - image_path: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png" + image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png" background_color: "#6641b2" theme_color: "#6641b2" windows: generate: true - image_path: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_web.png" + image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_web.png" icon_size: 48 # min:48, max:256, default: 48 macos: generate: true - image_path: "lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_web.png" + image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_web.png" diff --git a/Frontend/lib/main.dart b/Frontend/lib/main.dart index 9c4153a6..d7c10422 100644 --- a/Frontend/lib/main.dart +++ b/Frontend/lib/main.dart @@ -1,18 +1,20 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/about_mih_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_access_controlls_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_authentication_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calculator_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_ai_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/about_mih_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_access_controlls_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_authentication_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_banner_ad_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calculator_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_file_viewer_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_ai_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:provider/provider.dart'; import 'package:quick_actions/quick_actions.dart'; import 'package:upgrader/upgrader.dart'; @@ -90,7 +92,9 @@ class _MzansiInnovationHubState extends State { @override void initState() { super.initState(); - _initializeQuickActions(); + if (!kIsWeb) { + _initializeQuickActions(); + } theme = MihTheme(); theme.mode = "Dark"; theme.platform = Theme.of(context).platform; @@ -138,6 +142,9 @@ class _MzansiInnovationHubState extends State { ChangeNotifierProvider( create: (context) => PatientManagerProvider(), ), + ChangeNotifierProvider( + create: (context) => MihFileViewerProvider(), + ), ], child: MaterialApp.router( title: AppEnviroment.getEnv() == "Dev" diff --git a/Frontend/lib/mih_components/mih_layout/mih_action.dart b/Frontend/lib/mih_components/mih_layout/mih_action.dart deleted file mode 100644 index 7e5e39bd..00000000 --- a/Frontend/lib/mih_components/mih_layout/mih_action.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -class MIHAction extends StatefulWidget { - final void Function()? onTap; - final double iconSize; - final Widget icon; - const MIHAction({ - super.key, - required this.icon, - required this.iconSize, - required this.onTap, - }); - - @override - State createState() => _MIHActionState(); -} - -class _MIHActionState extends State { - @override - void dispose() { - super.dispose(); - } - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - return IconButton( - iconSize: widget.iconSize, - padding: const EdgeInsets.all(0), - onPressed: widget.onTap, - icon: widget.icon, - ); - } -} diff --git a/Frontend/lib/mih_components/mih_layout/mih_body.dart b/Frontend/lib/mih_components/mih_layout/mih_body.dart deleted file mode 100644 index 976064ac..00000000 --- a/Frontend/lib/mih_components/mih_layout/mih_body.dart +++ /dev/null @@ -1,106 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import '../../main.dart'; - -class MIHBody extends StatefulWidget { - final bool borderOn; - final List bodyItems; - const MIHBody({ - super.key, - required this.borderOn, - required this.bodyItems, - }); - - @override - State createState() => _MIHBodyState(); -} - -class _MIHBodyState extends State { - //double paddingSize = 10; - - double getHorizontalPaddingSize(Size screenSize) { - if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { - if (widget.borderOn) { - return 10; - } else { - return 0; - } - } else { - // mobile - if (widget.borderOn) { - return 10; - } else { - return 0; - } - } - } - - double getVerticalPaddingSize(Size screenSize) { - // mobile - if (widget.borderOn) { - return 10; - } else { - return 0; - } - } - - Decoration? getBoader() { - if (widget.borderOn) { - return BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 3.0), - ); - } else { - return null; - } - } - - @override - void dispose() { - super.dispose(); - } - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - Size screenSize = MediaQuery.sizeOf(context); - return Padding( - padding: EdgeInsets.only( - left: getHorizontalPaddingSize(screenSize), - right: getHorizontalPaddingSize(screenSize), - bottom: getVerticalPaddingSize(screenSize), - top: 0, - ), - child: Container( - padding: EdgeInsets.only( - left: 10, - right: 10, - bottom: 10, - top: getVerticalPaddingSize(screenSize), - ), - width: screenSize.width, - height: screenSize.height, - decoration: getBoader(), - child: ScrollConfiguration( - behavior: ScrollConfiguration.of(context).copyWith(scrollbars: false), - child: SingleChildScrollView( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: widget.bodyItems, - ), - ), - ), - ), - ); - } -} diff --git a/Frontend/lib/mih_components/mih_layout/mih_header.dart b/Frontend/lib/mih_components/mih_layout/mih_header.dart deleted file mode 100644 index e2017326..00000000 --- a/Frontend/lib/mih_components/mih_layout/mih_header.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/material.dart'; - -class MIHHeader extends StatefulWidget { - final MainAxisAlignment headerAlignment; - final List headerItems; - const MIHHeader({ - super.key, - required this.headerAlignment, - required this.headerItems, - }); - - @override - State createState() => _MIHHeaderState(); -} - -class _MIHHeaderState extends State { - @override - void dispose() { - super.dispose(); - } - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 50, - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: widget.headerAlignment, - mainAxisSize: MainAxisSize.max, - children: widget.headerItems, - ), - ); - } -} diff --git a/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart b/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart deleted file mode 100644 index cc15d363..00000000 --- a/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart +++ /dev/null @@ -1,152 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../mih_packages/mih_home/components/mih_app_drawer.dart'; -import 'mih_body.dart'; -import 'mih_header.dart'; - -class MIHLayoutBuilder extends StatefulWidget { - final Widget actionButton; - final Widget? secondaryActionButton; - final MIHHeader header; - final MIHBody body; - final MIHAppDrawer? actionDrawer; - final Widget? secondaryActionDrawer; - final Widget? bottomNavBar; - final bool pullDownToRefresh; - final Future Function() onPullDown; - //final String type; - const MIHLayoutBuilder({ - super.key, - required this.actionButton, - required this.header, - required this.secondaryActionButton, - required this.body, - required this.actionDrawer, - required this.secondaryActionDrawer, - required this.bottomNavBar, - required this.pullDownToRefresh, - required this.onPullDown, - }); - - @override - State createState() => _MIHLayoutBuilderState(); -} - -class _MIHLayoutBuilderState extends State { - List getList() { - List temp = []; - temp.add(widget.header); - temp.add(widget.body); - return temp; - } - - // openTheDrawer() { - // _scaffoldKey.currentState!.openEndDrawer(); - // } - - Widget getLayoutHeader() { - List temp = []; - temp.add(widget.actionButton); - temp.add(Flexible(child: widget.header)); - if (widget.secondaryActionButton != null) { - temp.add(widget.secondaryActionButton!); - } else { - //print(widget.header.headerItems.length); - if (widget.header.headerItems.length == 1) { - temp.add(const SizedBox( - width: 50, - )); - } - } - return Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: temp, - ); - } - - Widget getBody(double width, double height) { - if (widget.pullDownToRefresh == true) { - return SafeArea( - child: LayoutBuilder(builder: (context, BoxConstraints constraints) { - double newheight = constraints.maxHeight; - //print(newheight); - return RefreshIndicator( - onRefresh: widget.onPullDown, - child: ListView.builder( - itemCount: 1, - itemBuilder: (BuildContext context, int index) { - return SafeArea( - child: SizedBox( - width: width, - height: newheight, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - const SizedBox(height: 5), - getLayoutHeader(), - const SizedBox(height: 5), - Expanded(child: widget.body), - ], - ), - ), - ); - }, - // child: SafeArea( - // child: SizedBox( - // width: width, - // height: height, - // child: Column( - // mainAxisAlignment: MainAxisAlignment.start, - // children: [ - // getLayoutHeader(), - // Expanded(child: widget.body), - // ], - // ), - // ), - // ), - ), - ); - }), - ); - } else { - return SafeArea( - child: SizedBox( - width: width, - height: height, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - const SizedBox(height: 5), - getLayoutHeader(), - const SizedBox(height: 5), - Expanded(child: widget.body), - ], - ), - ), - ); - } - } - - @override - void dispose() { - super.dispose(); - } - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - Size screenSize = MediaQuery.sizeOf(context); - return Scaffold( - //drawerEnableOpenDragGesture: true, - drawer: widget.actionDrawer, - endDrawer: widget.secondaryActionDrawer, - body: getBody(screenSize.width, screenSize.height), - bottomNavigationBar: widget.bottomNavBar, - ); - } -} diff --git a/Frontend/lib/mih_components/mih_layout/mih_tile.dart b/Frontend/lib/mih_components/mih_layout/mih_tile.dart deleted file mode 100644 index b9f3cb30..00000000 --- a/Frontend/lib/mih_components/mih_layout/mih_tile.dart +++ /dev/null @@ -1,126 +0,0 @@ -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_yt_video_player.dart'; -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; - -class MIHTile extends StatefulWidget { - final String tileName; - final String? videoID; - final Widget tileIcon; - final void Function() onTap; - // final Widget tileIcon; - final Color p; - final Color s; - - const MIHTile({ - super.key, - required this.onTap, - required this.tileName, - this.videoID, - required this.tileIcon, - required this.p, - required this.s, - }); - - @override - State createState() => _MIHTileState(); -} - -class _MIHTileState extends State { - late Color mainC; - late Color secondC; - - @override - void dispose() { - super.dispose(); - } - - @override - void initState() { - mainC = widget.p; - secondC = widget.s; - super.initState(); - } - - void displayHint() { - if (widget.videoID != null) { - showDialog( - context: context, - builder: (context) { - return MihPackageWindow( - fullscreen: false, - windowTitle: widget.tileName, - onWindowTapClose: () { - Navigator.pop(context); - }, - windowBody: Column( - children: [ - MIHYTVideoPlayer(videoYTLink: widget.videoID!), - ], - ), - ); - }, - ); - } - } - - @override - Widget build(BuildContext context) { - // print( - // "Tile Name: ${widget.tileName}\nTitle Type: ${widget.tileIcon.runtimeType.toString()}"); - return FittedBox( - alignment: Alignment.center, - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - AnimatedContainer( - //alignment: Alignment.center, - width: 250, - height: 250, - duration: const Duration(seconds: 2), - child: Material( - color: mainC, - // shadowColor: - // MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // elevation: 5, - borderRadius: BorderRadius.circular(80), - child: InkWell( - borderRadius: BorderRadius.circular(80), - // ho - onTap: widget.onTap, - onLongPress: () { - displayHint(); - }, - // hoverDuration: , - splashColor: MihColors.getHighlightColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - highlightColor: MihColors.getHighlightColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - child: widget.tileIcon, - ), - ), - ), - const SizedBox(height: 10), - SizedBox( - width: 300, - child: Text( - widget.tileName, - textAlign: TextAlign.center, - softWrap: true, - overflow: TextOverflow.visible, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 40.0, - fontWeight: FontWeight.bold, - ), - ), - ) - ], - ), - ); - } -} diff --git a/Frontend/lib/mih_components/mih_package_components/Example/package_test.dart b/Frontend/lib/mih_components/mih_package_components/Example/package_test.dart deleted file mode 100644 index b52d15b9..00000000 --- a/Frontend/lib/mih_components/mih_package_components/Example/package_test.dart +++ /dev/null @@ -1,164 +0,0 @@ -import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/Example/package_tools/package_tool_two.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; - -class PackageTest extends StatefulWidget { - // final AppUser user; - // final Business business; - final TestArguments arguments; - const PackageTest({ - super.key, - required this.arguments, - // required this.user, - // required this.business, - }); - - @override - State createState() => _PackageTestState(); -} - -class _PackageTestState extends State { - int _selcetedIndex = 0; - - MihPackageAction getAction() { - return MihPackageAction( - icon: const Icon(Icons.arrow_back), - iconSize: 35, - onTap: () { - context.goNamed( - 'mihHome', - extra: true, - ); - FocusScope.of(context).unfocus(); - // Navigator.of(context).pop(); - // Navigator.of(context).popAndPushNamed( - // '/', - // arguments: AuthArguments(true, false), - // ); - }, - ); - } - - MihPackageTools getTools() { - Map temp = Map(); - temp[const Icon(Icons.inbox)] = () { - setState(() { - _selcetedIndex = 0; - }); - }; - temp[const Icon(Icons.outbond)] = () { - setState(() { - _selcetedIndex = 1; - }); - }; - return MihPackageTools( - tools: temp, - selcetedIndex: _selcetedIndex, - ); - } - - void showAlert() { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_amber_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Oops! Looks like some fields are missing.", - alertBody: Column( - children: [ - Text( - "We noticed that some required fields are still empty. To ensure your request is processed smoothly, please fill out all the highlighted fields before submitting the form again.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - RichText( - text: TextSpan( - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - children: [ - TextSpan( - text: "Here's a quick tip: ", - style: TextStyle( - fontStyle: FontStyle.italic, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"))), - const TextSpan(text: "Look for fields with an asterisk ("), - TextSpan( - text: "*", - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"))), - const TextSpan( - text: ") next to them, as these are mandatory."), - ], - ), - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); - } - - List getToolBody() { - List toolBodies = [ - PackageToolOne( - user: widget.arguments.user, - business: widget.arguments.business, - ), - const PackageToolTwo(), - ]; - return toolBodies; - } - - List getToolTitle() { - List toolTitles = [ - "Tool One", - "Tool Two", - ]; - return toolTitles; - } - - @override - Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: _selcetedIndex, - onIndexChange: (newValue) { - setState(() { - _selcetedIndex = newValue; - }); - print("Index: $_selcetedIndex"); - }, - ); - } -} diff --git a/Frontend/lib/mih_components/mih_package_components/mih_package_alert.dart b/Frontend/lib/mih_components/mih_package_components/mih_package_alert.dart deleted file mode 100644 index a087be0c..00000000 --- a/Frontend/lib/mih_components/mih_package_components/mih_package_alert.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; - -class MihPackageAlert extends StatefulWidget { - final Widget alertIcon; - final String alertTitle; - final Widget alertBody; - final Color alertColour; - const MihPackageAlert({ - super.key, - required this.alertIcon, - required this.alertTitle, - required this.alertBody, - required this.alertColour, - }); - - @override - State createState() => _MihPackageAlertState(); -} - -class _MihPackageAlertState extends State { - late double popUpWidth; - late double? popUpheight; - late double popUpTitleSize; - late double popUpSubtitleSize; - late double popUpBodySize; - late double popUpIconSize; - late double popUpPaddingSize; - Size? size; - - void checkScreenSize() { - if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { - setState(() { - popUpWidth = (size!.width / 4) * 2; - popUpheight = null; - popUpTitleSize = 30.0; - popUpSubtitleSize = 20.0; - popUpBodySize = 15; - popUpPaddingSize = 25.0; - popUpIconSize = 100; - }); - } else { - setState(() { - popUpWidth = size!.width - (size!.width * 0.1); - popUpheight = null; - popUpTitleSize = 25.0; - popUpSubtitleSize = 18.0; - popUpBodySize = 15; - popUpPaddingSize = 15.0; - popUpIconSize = 100; - }); - } - } - - @override - Widget build(BuildContext context) { - size = MediaQuery.of(context).size; - checkScreenSize(); - return Dialog( - child: Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all(color: widget.alertColour, width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - widget.alertIcon, - //const SizedBox(height: 5), - Text( - widget.alertTitle, - textAlign: TextAlign.center, - style: TextStyle( - color: widget.alertColour, - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - widget.alertBody, - const SizedBox(height: 10), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - context.pop(); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ), - ); - } -} diff --git a/Frontend/lib/mih_components/mih_package_components/mih_package_window.dart b/Frontend/lib/mih_components/mih_package_components/mih_package_window.dart deleted file mode 100644 index 157138f4..00000000 --- a/Frontend/lib/mih_components/mih_package_components/mih_package_window.dart +++ /dev/null @@ -1,217 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; - -class MihPackageWindow extends StatefulWidget { - final String windowTitle; - final Widget windowBody; - final List? menuOptions; - final void Function() onWindowTapClose; - final bool fullscreen; - const MihPackageWindow({ - super.key, - required this.fullscreen, - required this.windowTitle, - this.menuOptions, - required this.onWindowTapClose, - required this.windowBody, - }); - - @override - State createState() => _MihPackageWindowState(); -} - -class _MihPackageWindowState extends State { - late double windowTitleSize; - late double horizontralWindowPadding; - late double vertticalWindowPadding; - late double windowWidth; - late double windowHeight; - late double width; - late double height; - - void checkScreenSize() { - // print("screen width: $width"); - // print("screen height: $height"); - if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { - setState(() { - windowTitleSize = 25; - horizontralWindowPadding = width / 7; - vertticalWindowPadding = 10; - windowWidth = width; - windowHeight = height; - }); - } else { - setState(() { - windowTitleSize = 20; - horizontralWindowPadding = 10; - vertticalWindowPadding = 10; - windowWidth = width; - windowHeight = height; - }); - } - } - - Widget getHeader() { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - // color: Colors.white, - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(25), // Optional: rounds the corners - boxShadow: const [ - BoxShadow( - color: Color.fromARGB( - 60, 0, 0, 0), // 0.2 opacity = 51 in alpha (255 * 0.2) - spreadRadius: -2, - blurRadius: 10, - offset: Offset(0, 5), - ), - ], - ), - child: Padding( - padding: const EdgeInsets.only( - top: 2.0, - left: 5.0, - ), - child: SizedBox( - width: 40, - child: IconButton.filled( - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark")), - ), - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - iconSize: 20, - onPressed: () { - widget.onWindowTapClose(); - }, - icon: const Icon( - Icons.close, - ), - ), - ), - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Text( - widget.windowTitle, - overflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: windowTitleSize, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ), - ), - Visibility( - visible: (widget.menuOptions?.isNotEmpty ?? false), - child: Padding( - padding: const EdgeInsets.only( - top: 2.0, - right: 5.0, - ), - child: SizedBox( - width: 40, - child: MihFloatingMenu( - iconSize: 40, - animatedIcon: AnimatedIcons.menu_close, - direction: SpeedDialDirection.down, - children: widget.menuOptions != null ? widget.menuOptions! : [], - ), - ), - ), - ), - // If no menu, add a SizedBox to keep alignment - if (!(widget.menuOptions?.isNotEmpty ?? false)) - const SizedBox(width: 40), - ], - ); - } - - @override - void dispose() { - super.dispose(); - } - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - var size = MediaQuery.of(context).size; - setState(() { - width = size.width; - height = size.height; - }); - checkScreenSize(); - return Dialog( - insetPadding: EdgeInsets.symmetric( - horizontal: horizontralWindowPadding, - vertical: vertticalWindowPadding, - ), - insetAnimationCurve: Easing.emphasizedDecelerate, - insetAnimationDuration: Durations.short1, - child: Container( - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: widget.fullscreen - ? Column( - mainAxisSize: MainAxisSize.max, - children: [ - getHeader(), - const SizedBox(height: 5), - Expanded( - child: SingleChildScrollView(child: widget.windowBody)), - ], - ) - : Column( - mainAxisSize: MainAxisSize.min, - children: [ - getHeader(), - const SizedBox(height: 5), - Flexible( - child: Padding( - padding: EdgeInsets.only( - left: 25, - right: 25, - bottom: vertticalWindowPadding, - ), - child: ConstrainedBox( - constraints: BoxConstraints( - maxHeight: windowHeight * 0.85, - maxWidth: windowWidth * 0.85, - ), - child: MihSingleChildScroll(child: widget.windowBody), - ), - ), - ), - ], - ), - ), - ); - } -} diff --git a/Frontend/lib/mih_components/mih_pop_up_messages/mih_delete_message.dart b/Frontend/lib/mih_components/mih_pop_up_messages/mih_delete_message.dart deleted file mode 100644 index c3f4abba..00000000 --- a/Frontend/lib/mih_components/mih_pop_up_messages/mih_delete_message.dart +++ /dev/null @@ -1,530 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import '../../main.dart'; - -class MIHDeleteMessage extends StatefulWidget { - final String deleteType; - final void Function() onTap; - const MIHDeleteMessage({ - super.key, - required this.deleteType, - required this.onTap, - }); - - @override - State createState() => _MIHDeleteMessageState(); -} - -class _MIHDeleteMessageState extends State { - var messageTypes = {}; - late double popUpWidth; - late double? popUpheight; - late double popUpTitleSize; - late double popUpSubtitleSize; - late double popUpBodySize; - late double popUpIconSize; - late double popUpPaddingSize; - late double width; - late double height; - - void checkScreenSize() { - if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { - setState(() { - popUpWidth = (width / 4) * 2; - popUpheight = null; - popUpTitleSize = 25.0; - popUpSubtitleSize = 20.0; - popUpBodySize = 15; - popUpPaddingSize = 25.0; - popUpIconSize = 100; - }); - } else { - setState(() { - popUpWidth = width - (width * 0.1); - popUpheight = null; - popUpTitleSize = 20.0; - popUpSubtitleSize = 18.0; - popUpBodySize = 15; - popUpPaddingSize = 15.0; - popUpIconSize = 100; - }); - } - } - - void setDeleteNote() { - messageTypes["Note"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Are you sure you want to delete this?", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "This note will be deleted permanently. Are you certain you want to delete it?", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - MihButton( - onPressed: widget.onTap, - buttonColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Delete", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setFileNote() { - messageTypes["File"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Are you sure you want to delete this?", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "This file will be deleted permanently. Are you certain you want to delete it?", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - MihButton( - onPressed: widget.onTap, - buttonColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Delete", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setDeleteEmployee() { - messageTypes["Employee"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Are you sure you want to delete this?", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "This team member will be deleted permanently from the business profile. Are you certain you want to delete it?", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - - MihButton( - onPressed: widget.onTap, - buttonColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Delete", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setDeleteAppointment() { - messageTypes["Appointment"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Are you sure you want to delete this?", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "This appointment will be deleted permanently from your calendar. Are you certain you want to delete it?", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - MihButton( - onPressed: widget.onTap, - buttonColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Delete", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setDeleteLoyaltyCard() { - messageTypes["Loyalty Card"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Are you sure you want to delete this?", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "This Card will be deleted permanently from your Mzansi Wallet. Are you certain you want to delete it?", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - MihButton( - onPressed: widget.onTap, - buttonColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Delete", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - Widget? getDeleteMessage(String type) { - return messageTypes[type]; - } - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - var size = MediaQuery.of(context).size; - setState(() { - width = size.width; - height = size.height; - }); - checkScreenSize(); - setDeleteNote(); - setFileNote(); - setDeleteEmployee(); - setDeleteAppointment(); - setDeleteLoyaltyCard(); - //print(size); - // setState(() { - // width = size.width; - // height = size.height; - // }); - return Dialog(child: getDeleteMessage(widget.deleteType)); - } -} diff --git a/Frontend/lib/mih_components/mih_pop_up_messages/mih_error_message.dart b/Frontend/lib/mih_components/mih_pop_up_messages/mih_error_message.dart deleted file mode 100644 index 933a69ef..00000000 --- a/Frontend/lib/mih_components/mih_pop_up_messages/mih_error_message.dart +++ /dev/null @@ -1,909 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import '../../main.dart'; - -class MIHErrorMessage extends StatefulWidget { - final String errorType; - const MIHErrorMessage({ - super.key, - required this.errorType, - }); - - @override - State createState() => _MIHErrorMessageState(); -} - -class _MIHErrorMessageState extends State { - var messageTypes = {}; - late double popUpWidth; - late double? popUpheight; - late double popUpTitleSize; - late double popUpSubtitleSize; - late double popUpBodySize; - late double popUpIconSize; - late double popUpPaddingSize; - Size? size; - - void checkScreenSize() { - if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { - setState(() { - popUpWidth = (size!.width / 4) * 2; - popUpheight = null; - popUpTitleSize = 25.0; - popUpSubtitleSize = 20.0; - popUpBodySize = 15; - popUpPaddingSize = 25.0; - popUpIconSize = 100; - }); - } else { - setState(() { - popUpWidth = size!.width - (size!.width * 0.1); - popUpheight = null; - popUpTitleSize = 20.0; - popUpSubtitleSize = 18.0; - popUpBodySize = 15; - popUpPaddingSize = 15.0; - popUpIconSize = 100; - }); - } - } - - void setInputError() { - messageTypes["Input Error"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 5), - Text( - "Oops! Looks like some fields are missing.", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "We noticed that some required fields are still empty. To ensure your request is processed smoothly, please fill out all the highlighted fields before submitting the form again.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - RichText( - text: TextSpan( - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - children: [ - TextSpan( - text: "Here's a quick tip: ", - style: TextStyle( - fontStyle: FontStyle.italic, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"))), - const TextSpan( - text: "Look for fields with an asterisk ("), - TextSpan( - text: "*", - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"))), - const TextSpan( - text: ") next to them, as these are mandatory."), - ], - ), - ), - const SizedBox(height: 10), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setPasswordRequirementsError() { - messageTypes["Password Requirements"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Password Doesn't Meet Requirements", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "Oops! Your password doesn't quite meet our standards. To keep your account secure, please make sure your password meets the following requirements", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - RichText( - text: TextSpan( - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15.0, - fontWeight: FontWeight.bold, - ), - children: [ - TextSpan( - text: "Requirements:\n", - style: TextStyle( - fontStyle: FontStyle.italic, - fontSize: popUpBodySize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"))), - const TextSpan( - text: "1) Contailes at least 8 characters\n", - ), - const TextSpan( - text: "2) Contains at least 1 uppercase letter (A-Z)\n", - ), - const TextSpan( - text: "3) Contains at least 1 lowercase letter (a-z)\n", - ), - const TextSpan( - text: "4) Contains at least 1 number (0-9)\n", - ), - const TextSpan( - text: - "5) Contains at least 1 special character (!@#\$%^&*)\n", - ), - ], - ), - ), - const SizedBox(height: 10), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setInvalidUsernameError() { - messageTypes["Invalid Username"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Let's Fix That Username", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "Let's create a great username for you! Just a few quick tips:\n• Your username should start with a letter.\n• You can use letters, numbers, and/ or underscores.\n• Keep it between 6 and 20 characters.\n• Avoid special characters like @, #, or \$.\"", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setInvalidEmailError() { - messageTypes["Invalid Email"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Oops! Invalid Email", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "Looks like there's a little hiccup with that email address. Please double-check that you've entered it correctly, including the \"@\" symbol and a domain (like example@email.com).", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setUserExistsError() { - messageTypes["User Exists"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //SizedBox(height: 15), - Text( - "Email Already Exists", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "An account is already registered with this email address. Please try logging in or use a different email.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "Here are some things to keep in mind:", - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpSubtitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "1) Are you sure you're using the correct email address associated with your account?\n2) Is your caps lock key on? Passwords are case-sensitive.\n3) If you've forgotten your password, no worries! Click on \"Forgot Password?\" to reset it.", - textAlign: TextAlign.left, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15.0, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setPwdMatchError() { - messageTypes["Password Match"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //SizedBox(height: 15), - Text( - "Passwords Don't Match", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "The password and confirm password fields do not match. Please make sure they are identical.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "Here are some things to keep in mind:", - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpSubtitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "1) Are you sure you're using the correct email address associated with your account?\n2) Is your caps lock key on? Passwords are case-sensitive.\n3) If you've forgotten your password, no worries! Click on \"Forgot Password?\" to reset it.", - textAlign: TextAlign.left, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setinvalidCredError() { - messageTypes["Invalid Credentials"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //SizedBox(height: 15), - Text( - "Uh oh! Login attempt unsuccessful.", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "The email address or password you entered doesn't seem to match our records. Please double-check your information and try again.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "Here are some things to keep in mind:", - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpSubtitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "1) Are you sure you're using the correct email address associated with your account?\n2) Is your caps lock key on? Passwords are case-sensitive.\n3) If you've forgotten your password, no worries! Click on \"Forgot Password?\" to reset it.", - textAlign: TextAlign.left, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setInternetError() { - messageTypes["Internet Connection"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Internet Connection Lost!", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "We seem to be having some trouble connecting you to the internet. This could be due to a temporary outage or an issue with your device's connection.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "Here are a few things you can try:", - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpSubtitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "1) Check your Wi-Fi signal strength or try connecting to a different network.\n2) Restart your device (computer, phone, etc.) and your router/modem.\n3) If you're using cellular data, ensure you have a strong signal and haven't reached your data limit.", - textAlign: TextAlign.left, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setLocationError() { - messageTypes["Location Denied"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Location Services Not Enabled", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "To get the most out of MIH, we need your location. Please go to the site settings of the app and enable location services. Once you do that, we can start showing you relevant information based on your location.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - // const SizedBox(height: 15), - // Text( - // "Here are a few things you can try:", - // style: TextStyle( - // color: MihColors.getRedColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // fontSize: popUpSubtitleSize, - // fontWeight: FontWeight.bold, - // ), - // ), - // const SizedBox(height: 10), - // Text( - // "1) Check your Wi-Fi signal strength or try connecting to a different network.\n2) Restart your device (computer, phone, etc.) and your router/modem.\n3) If you're using cellular data, ensure you have a strong signal and haven't reached your data limit.", - // textAlign: TextAlign.left, - // style: TextStyle( - // color: - // MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // fontSize: popUpBodySize, - // fontWeight: FontWeight.bold, - // ), - // ), - const SizedBox(height: 10), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - Widget? getErrorMessage(String type) { - return messageTypes[type]; - } - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - size = MediaQuery.of(context).size; - checkScreenSize(); - setInputError(); - setinvalidCredError(); - setInternetError(); - setUserExistsError(); - setPwdMatchError(); - setPasswordRequirementsError(); - setInvalidEmailError(); - setInvalidUsernameError(); - setLocationError(); - //print(size); - // setState(() { - // width = size.width; - // height = size.height; - // }); - return Dialog(child: getErrorMessage(widget.errorType)); - } -} diff --git a/Frontend/lib/mih_components/mih_pop_up_messages/mih_success_message.dart b/Frontend/lib/mih_components/mih_pop_up_messages/mih_success_message.dart deleted file mode 100644 index d91a2fc8..00000000 --- a/Frontend/lib/mih_components/mih_pop_up_messages/mih_success_message.dart +++ /dev/null @@ -1,150 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import '../../main.dart'; - -class MIHSuccessMessage extends StatefulWidget { - final String successType; - final String successMessage; - const MIHSuccessMessage({ - super.key, - required this.successType, - required this.successMessage, - }); - - @override - State createState() => _MIHSuccessMessageState(); -} - -class _MIHSuccessMessageState extends State { - var messageTypes = {}; - late String message; - late double popUpWidth; - late double? popUpheight; - late double popUpTitleSize; - late double popUpSubtitleSize; - late double popUpBodySize; - late double popUpIconSize; - late double popUpPaddingSize; - late Size? size; - - void checkScreenSize() { - if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { - setState(() { - popUpWidth = (size!.width / 4) * 2; - popUpheight = null; - popUpTitleSize = 25.0; - popUpSubtitleSize = 20.0; - popUpBodySize = 15; - popUpPaddingSize = 25.0; - popUpIconSize = 100; - }); - } else { - setState(() { - popUpWidth = size!.width - (size!.width * 0.1); - popUpheight = null; - popUpTitleSize = 20.0; - popUpSubtitleSize = 18.0; - popUpBodySize = 15; - popUpPaddingSize = 15.0; - popUpIconSize = 100; - }); - } - } - - void setSuccessmessage() { - messageTypes["Success"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.check_circle_outline_rounded, - size: popUpIconSize, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Success!", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Center( - child: Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - ), - const SizedBox(height: 15), - MihButton( - onPressed: () { - Navigator.pop(context); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ], - ); - } - - Widget? getSuccessMessage(String type) { - return messageTypes[type]; - } - - @override - void dispose() { - super.dispose(); - } - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - size = MediaQuery.of(context).size; - checkScreenSize(); - message = widget.successMessage; - setSuccessmessage(); - return Dialog(child: getSuccessMessage(widget.successType)); - } -} diff --git a/Frontend/lib/mih_components/mih_pop_up_messages/mih_warning_message.dart b/Frontend/lib/mih_components/mih_pop_up_messages/mih_warning_message.dart deleted file mode 100644 index 356d0f5e..00000000 --- a/Frontend/lib/mih_components/mih_pop_up_messages/mih_warning_message.dart +++ /dev/null @@ -1,519 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import '../../main.dart'; - -class MIHWarningMessage extends StatefulWidget { - final String warningType; - const MIHWarningMessage({ - super.key, - required this.warningType, - }); - - @override - State createState() => _MIHDeleteMessageState(); -} - -class _MIHDeleteMessageState extends State { - var messageTypes = {}; - late double popUpWidth; - late double? popUpheight; - late double popUpTitleSize; - late double popUpSubtitleSize; - late double popUpBodySize; - late double popUpIconSize; - late double popUpPaddingSize; - late double width; - late double height; - - void checkScreenSize() { - if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { - setState(() { - popUpWidth = (width / 4) * 2; - popUpheight = null; - popUpTitleSize = 25.0; - popUpSubtitleSize = 20.0; - popUpBodySize = 15; - popUpPaddingSize = 25.0; - popUpIconSize = 100; - }); - } else { - setState(() { - popUpWidth = width - (width * 0.1); - popUpheight = null; - popUpTitleSize = 20.0; - popUpSubtitleSize = 18.0; - popUpBodySize = 15; - popUpPaddingSize = 15.0; - popUpIconSize = 100; - }); - } - } - - void setNoAccess() { - messageTypes["No Access"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Access Pending", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "Your access request is currently being reviewed.\nOnce approved, you'll be able to view patient data.\nPlease follow up with the patient to approve your access request.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setNoPatientAccess() { - messageTypes["No Patient Access"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Patient Profile Access Needed", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "To proceed with booking an appointment, you must have access to the patient's profile. This will allow you to view their medical history and other relevant information. Please contact the appropriate administrator to request access.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setAppointmentCanelled() { - messageTypes["Appointment Canelled"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Appointment Cancelled", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "This appointment has been canceled. As a result, you no longer have access to the patient's profile. If you would like to view the patient's profile again, please book a new appointment.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setAccessCanelled() { - messageTypes["Access Cancelled"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Access Cancelled", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "This appointment has been canceled. As a result, access has been cancelled and the doctor no longer have access to the patient's profile. If you would like them to view the patient's profile again, please book a new appointment through them.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setAccessDeclined() { - messageTypes["Access Declined"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Access Declined", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "Your request to access the patient's profile has been denied. Please contact the patient directly to inquire about the reason for this restriction.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - void setExpiredAccess() { - messageTypes["Expired Access"] = Stack( - children: [ - Container( - padding: EdgeInsets.all(popUpPaddingSize), - width: popUpWidth, - height: popUpheight, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 5.0), - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.warning_amber_rounded, - size: popUpIconSize, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - //const SizedBox(height: 15), - Text( - "Access Expired", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpTitleSize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Text( - "You no longer have access to this patient profile. The authorized access period has ended. Access to a patients profile is limited to 7 days from appointment date.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: popUpBodySize, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - ], - ), - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ); - } - - Widget? getDeleteMessage(String type) { - return messageTypes[type]; - } - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - var size = MediaQuery.of(context).size; - setState(() { - width = size.width; - height = size.height; - }); - checkScreenSize(); - setNoAccess(); - setExpiredAccess(); - setAccessDeclined(); - setAppointmentCanelled(); - setAccessCanelled(); - //print(size); - // setState(() { - // width = size.width; - // height = size.height; - // }); - return Dialog(child: getDeleteMessage(widget.warningType)); - } -} diff --git a/Frontend/lib/mih_config/mih_go_router.dart b/Frontend/lib/mih_config/mih_go_router.dart index 685ce86b..f23dbfcf 100644 --- a/Frontend/lib/mih_config/mih_go_router.dart +++ b/Frontend/lib/mih_config/mih_go_router.dart @@ -1,10 +1,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_print_prevew.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/Example/package_test.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_packages/mih_file_viewer/components/mih_print_prevew.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/Example/package_test.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/about_mih/about_mih.dart'; import 'package:mzansi_innovation_hub/mih_packages/access_review/mih_access.dart'; import 'package:mzansi_innovation_hub/mih_packages/calculator/mih_calculator.dart'; @@ -12,6 +11,7 @@ import 'package:mzansi_innovation_hub/mih_packages/calendar/mzansi_calendar.dart import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/mih_auth_forgot_password.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/mih_auth_password_reset.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/mih_authentication.dart'; +import 'package:mzansi_innovation_hub/mih_packages/mih_file_viewer/mih_fle_viewer.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_home/mih_home.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_home/mih_route_error.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/mih_mine_sweeper.dart'; @@ -26,7 +26,6 @@ import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/mih_wallet.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/pat_manager.dart'; -import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/components/full_screen_file.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/patient_profile.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/patient_set_up.dart'; import 'package:provider/provider.dart'; @@ -153,12 +152,6 @@ class MihGoRouter { path: MihGoRouterPaths.mzansiProfileManage, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: mzansiProfileManage"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } return MzansiProfile(); }, ), @@ -184,16 +177,7 @@ class MihGoRouter { path: MihGoRouterPaths.businessProfileManage, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: businessProfileManage"); - if (context.watch().business == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } return BusinesProfile(); - // return MzansiBusinessProfile( - // key: UniqueKey(), - // ); }, ), GoRoute( @@ -213,7 +197,6 @@ class MihGoRouter { return const SizedBox.shrink(); } return MzansiBusinessProfileView( - key: UniqueKey(), businessId: businessId, ); }, @@ -241,15 +224,7 @@ class MihGoRouter { path: MihGoRouterPaths.calendar, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: mihCalendar"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } - return MzansiCalendar( - key: UniqueKey(), - ); + return MzansiCalendar(); }, ), // ========================== Mzansi AI ================================== @@ -258,12 +233,6 @@ class MihGoRouter { path: MihGoRouterPaths.mzansiAi, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: mzansiAi"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } return MzansiAi(); }, ), @@ -273,15 +242,7 @@ class MihGoRouter { path: MihGoRouterPaths.mzansiWallet, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: mzansiWallet"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } - return MihWallet( - key: UniqueKey(), - ); + return MihWallet(); }, ), GoRoute( @@ -306,14 +267,7 @@ class MihGoRouter { path: MihGoRouterPaths.packageDevTest, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: testPackage"); - final TestArguments? args = state.extra as TestArguments?; - if (args == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } - return PackageTest(arguments: args); + return PackageTest(); }, ), // ========================== MIH Access Controls ================================== @@ -322,15 +276,7 @@ class MihGoRouter { path: MihGoRouterPaths.mihAccess, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: mihAccess"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } - return MihAccess( - key: UniqueKey(), - ); + return MihAccess(); }, ), // ========================== Patient Profile ================================== @@ -339,12 +285,6 @@ class MihGoRouter { path: MihGoRouterPaths.patientProfile, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: patientProfile"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } return PatientProfile(); }, ), @@ -353,12 +293,6 @@ class MihGoRouter { path: MihGoRouterPaths.patientProfileSetup, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: patientProfileSetup"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } return PatientSetUp(); }, ), @@ -367,15 +301,7 @@ class MihGoRouter { path: MihGoRouterPaths.patientManager, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: patientManager"); - if (context.watch().business == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } - return PatManager( - key: UniqueKey(), - ); + return PatManager(); }, ), GoRoute( @@ -383,12 +309,6 @@ class MihGoRouter { path: MihGoRouterPaths.patientManagerPatient, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: patientManagerPatient"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } return PatientProfile(); }, ), @@ -398,12 +318,6 @@ class MihGoRouter { path: MihGoRouterPaths.mzansiDirectory, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: mzansiDirectory"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } return MzansiDirectory(); }, ), @@ -413,8 +327,7 @@ class MihGoRouter { path: MihGoRouterPaths.fileViewer, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: fileViewer"); - final FileViewArguments? args = state.extra as FileViewArguments?; - return FullScreenFileViewer(arguments: args!); + return MihFleViewer(); }, ), GoRoute( @@ -424,7 +337,13 @@ class MihGoRouter { KenLogger.success("MihGoRouter: printPreview"); final PrintPreviewArguments? args = state.extra as PrintPreviewArguments?; - return MIHPrintPreview(arguments: args!); + if (args == null) { + WidgetsBinding.instance.addPostFrameCallback((_) { + context.go(MihGoRouterPaths.mihHome); + }); + return const SizedBox.shrink(); + } + return MIHPrintPreview(arguments: args); }, ), // ========================== MIH Minesweeper ================================== @@ -433,12 +352,6 @@ class MihGoRouter { path: MihGoRouterPaths.mihMineSweeper, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: mihMineSweeper"); - if (context.watch().user == null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go(MihGoRouterPaths.mihHome); - }); - return const SizedBox.shrink(); - } return MihMineSweeper(); }, ), diff --git a/Frontend/lib/mih_config/mih_theme.dart b/Frontend/lib/mih_config/mih_theme.dart index f6fa2ac3..7d102ad2 100644 --- a/Frontend/lib/mih_config/mih_theme.dart +++ b/Frontend/lib/mih_config/mih_theme.dart @@ -14,7 +14,7 @@ class MihTheme { late String loadingAssetText; late TargetPlatform platform; bool kIsWeb = const bool.fromEnvironment('dart.library.js_util'); - String latestVersion = "1.2.3"; + String latestVersion = "1.2.4"; // Options:- // f3f9d2 = Cream // f0f0c9 = cream2 @@ -236,11 +236,11 @@ class MihTheme { // AssetImage loadingImage() { // if (mode == "Dark") { // loading = const AssetImage( - // 'lib/mih_components/mih_package_components/assets/images/loading_light.gif', + // 'lib/mih_package_components/assets/images/loading_light.gif', // ); // } else { // loading = const AssetImage( - // 'lib/mih_components/mih_package_components/assets/images/loading_dark.gif', + // 'lib/mih_package_components/assets/images/loading_dark.gif', // ); // } // return loading; @@ -249,11 +249,11 @@ class MihTheme { // AssetImage altLoadingImage() { // if (mode == "Dark") { // loading = const AssetImage( - // 'lib/mih_components/mih_package_components/assets/images/loading_dark.gif', + // 'lib/mih_package_components/assets/images/loading_dark.gif', // ); // } else { // loading = const AssetImage( - // 'lib/mih_components/mih_package_components/assets/images/loading_light.gif', + // 'lib/mih_package_components/assets/images/loading_light.gif', // ); // } // return loading; @@ -262,10 +262,10 @@ class MihTheme { // String loadingImageLocation() { // if (mode == "Dark") { // loadingAssetText = - // 'lib/mih_components/mih_package_components/assets/images/loading_light.gif'; + // 'lib/mih_package_components/assets/images/loading_light.gif'; // } else { // loadingAssetText = - // 'lib/mih_components/mih_package_components/assets/images/loading_dark.gif'; + // 'lib/mih_package_components/assets/images/loading_dark.gif'; // } // return loadingAssetText; // } @@ -273,10 +273,10 @@ class MihTheme { // String altLoadingImageLocation() { // if (mode == "Dark") { // loadingAssetText = - // 'lib/mih_components/mih_package_components/assets/images/loading_dark.gif'; + // 'lib/mih_package_components/assets/images/loading_dark.gif'; // } else { // loadingAssetText = - // 'lib/mih_components/mih_package_components/assets/images/loading_light.gif'; + // 'lib/mih_package_components/assets/images/loading_light.gif'; // } // return loadingAssetText; // } @@ -284,11 +284,11 @@ class MihTheme { // AssetImage aiLogoImage() { // if (mode == "Dark") { // return const AssetImage( - // 'lib/mih_components/mih_package_components/assets/images/mzansi_ai-dark.png', + // 'lib/mih_package_components/assets/images/mzansi_ai-dark.png', // ); // } else { // return const AssetImage( - // 'lib/mih_components/mih_package_components/assets/images/mzansi_ai-light.png', + // 'lib/mih_package_components/assets/images/mzansi_ai-light.png', // ); // } // } diff --git a/Frontend/lib/mih_components/mih_objects/access_request.dart b/Frontend/lib/mih_objects/access_request.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/access_request.dart rename to Frontend/lib/mih_objects/access_request.dart diff --git a/Frontend/lib/mih_components/mih_objects/app_user.dart b/Frontend/lib/mih_objects/app_user.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/app_user.dart rename to Frontend/lib/mih_objects/app_user.dart diff --git a/Frontend/lib/mih_components/mih_objects/appointment.dart b/Frontend/lib/mih_objects/appointment.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/appointment.dart rename to Frontend/lib/mih_objects/appointment.dart diff --git a/Frontend/lib/mih_components/mih_objects/arguments.dart b/Frontend/lib/mih_objects/arguments.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/arguments.dart rename to Frontend/lib/mih_objects/arguments.dart diff --git a/Frontend/lib/mih_components/mih_objects/bookmarked_business.dart b/Frontend/lib/mih_objects/bookmarked_business.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/bookmarked_business.dart rename to Frontend/lib/mih_objects/bookmarked_business.dart diff --git a/Frontend/lib/mih_components/mih_objects/business.dart b/Frontend/lib/mih_objects/business.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/business.dart rename to Frontend/lib/mih_objects/business.dart diff --git a/Frontend/lib/mih_components/mih_objects/business_employee.dart b/Frontend/lib/mih_objects/business_employee.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/business_employee.dart rename to Frontend/lib/mih_objects/business_employee.dart diff --git a/Frontend/lib/mih_components/mih_objects/business_review.dart b/Frontend/lib/mih_objects/business_review.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/business_review.dart rename to Frontend/lib/mih_objects/business_review.dart diff --git a/Frontend/lib/mih_components/mih_objects/business_user.dart b/Frontend/lib/mih_objects/business_user.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/business_user.dart rename to Frontend/lib/mih_objects/business_user.dart diff --git a/Frontend/lib/mih_components/mih_objects/claim_statement_file.dart b/Frontend/lib/mih_objects/claim_statement_file.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/claim_statement_file.dart rename to Frontend/lib/mih_objects/claim_statement_file.dart diff --git a/Frontend/lib/mih_components/mih_objects/currency.dart b/Frontend/lib/mih_objects/currency.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/currency.dart rename to Frontend/lib/mih_objects/currency.dart diff --git a/Frontend/lib/mih_components/mih_objects/email_and_patient_screen_args.dart b/Frontend/lib/mih_objects/email_and_patient_screen_args.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/email_and_patient_screen_args.dart rename to Frontend/lib/mih_objects/email_and_patient_screen_args.dart diff --git a/Frontend/lib/mih_components/mih_objects/files.dart b/Frontend/lib/mih_objects/files.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/files.dart rename to Frontend/lib/mih_objects/files.dart diff --git a/Frontend/lib/mih_components/mih_objects/icd10_code.dart.dart b/Frontend/lib/mih_objects/icd10_code.dart.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/icd10_code.dart.dart rename to Frontend/lib/mih_objects/icd10_code.dart.dart diff --git a/Frontend/lib/mih_components/mih_objects/loyalty_card.dart b/Frontend/lib/mih_objects/loyalty_card.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/loyalty_card.dart rename to Frontend/lib/mih_objects/loyalty_card.dart diff --git a/Frontend/lib/mih_components/mih_objects/medicine.dart b/Frontend/lib/mih_objects/medicine.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/medicine.dart rename to Frontend/lib/mih_objects/medicine.dart diff --git a/Frontend/lib/mih_components/mih_objects/minesweeper_player_score.dart b/Frontend/lib/mih_objects/minesweeper_player_score.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/minesweeper_player_score.dart rename to Frontend/lib/mih_objects/minesweeper_player_score.dart diff --git a/Frontend/lib/mih_components/mih_objects/notes.dart b/Frontend/lib/mih_objects/notes.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/notes.dart rename to Frontend/lib/mih_objects/notes.dart diff --git a/Frontend/lib/mih_components/mih_objects/notification.dart b/Frontend/lib/mih_objects/notification.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/notification.dart rename to Frontend/lib/mih_objects/notification.dart diff --git a/Frontend/lib/mih_components/mih_objects/patient_access.dart b/Frontend/lib/mih_objects/patient_access.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/patient_access.dart rename to Frontend/lib/mih_objects/patient_access.dart diff --git a/Frontend/lib/mih_components/mih_objects/patient_queue.dart b/Frontend/lib/mih_objects/patient_queue.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/patient_queue.dart rename to Frontend/lib/mih_objects/patient_queue.dart diff --git a/Frontend/lib/mih_components/mih_objects/patients.dart b/Frontend/lib/mih_objects/patients.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/patients.dart rename to Frontend/lib/mih_objects/patients.dart diff --git a/Frontend/lib/mih_components/mih_objects/perscription.dart b/Frontend/lib/mih_objects/perscription.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/perscription.dart rename to Frontend/lib/mih_objects/perscription.dart diff --git a/Frontend/lib/mih_components/mih_objects/session_st.dart b/Frontend/lib/mih_objects/session_st.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/session_st.dart rename to Frontend/lib/mih_objects/session_st.dart diff --git a/Frontend/lib/mih_components/mih_objects/user_consent.dart b/Frontend/lib/mih_objects/user_consent.dart similarity index 100% rename from Frontend/lib/mih_components/mih_objects/user_consent.dart rename to Frontend/lib/mih_objects/user_consent.dart diff --git a/Frontend/lib/mih_package_components/Example/package_test.dart b/Frontend/lib/mih_package_components/Example/package_test.dart new file mode 100644 index 00000000..a85355ec --- /dev/null +++ b/Frontend/lib/mih_package_components/Example/package_test.dart @@ -0,0 +1,145 @@ +import 'package:go_router/go_router.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/Example/package_tools/package_tool_zero.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/Example/package_tools/package_tool_one.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/Example/package_tools/package_tool_two.dart'; +import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; +import 'package:provider/provider.dart'; + +class PackageTest extends StatefulWidget { + const PackageTest({ + super.key, + }); + + @override + State createState() => _PackageTestState(); +} + +class _PackageTestState extends State { + int _selcetedIndex = 0; + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); + setState(() { + _isLoadingInitialData = false; + }); + } + + MihPackageAction getAction() { + return MihPackageAction( + icon: const Icon(Icons.arrow_back), + iconSize: 35, + onTap: () { + context.goNamed( + 'mihHome', + extra: true, + ); + FocusScope.of(context).unfocus(); + // Navigator.of(context).pop(); + // Navigator.of(context).popAndPushNamed( + // '/', + // arguments: AuthArguments(true, false), + // ); + }, + ); + } + + MihPackageTools getTools() { + Map temp = Map(); + temp[const Icon(Icons.warning)] = () { + setState(() { + _selcetedIndex = 0; + }); + }; + temp[const Icon(Icons.inbox)] = () { + setState(() { + _selcetedIndex = 1; + }); + }; + temp[const Icon(Icons.outbond)] = () { + setState(() { + _selcetedIndex = 2; + }); + }; + return MihPackageTools( + tools: temp, + selcetedIndex: _selcetedIndex, + ); + } + + void showAlert() { + MihAlertServices().inputErrorAlert(context); + } + + List getToolBody() { + MzansiProfileProvider profileProvider = + context.read(); + List toolBodies = [ + const PackageToolZero(), + PackageToolOne( + user: profileProvider.user!, + business: profileProvider.business, + ), + const PackageToolTwo(), + ]; + return toolBodies; + } + + List getToolTitle() { + List toolTitles = [ + "Tool Zero", + "Tool One", + "Tool Two", + ]; + return toolTitles; + } + + @override + void initState() { + super.initState(); + _loadInitialData(); + } + + @override + Widget build(BuildContext context) { + return Consumer( + builder: + (BuildContext context, MzansiProfileProvider value, Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: _selcetedIndex, + onIndexChange: (newValue) { + setState(() { + _selcetedIndex = newValue; + }); + print("Index: $_selcetedIndex"); + }, + ); + }, + ); + } +} diff --git a/Frontend/lib/mih_components/mih_package_components/Example/package_tiles/test_package_tile.dart b/Frontend/lib/mih_package_components/Example/package_tiles/test_package_tile.dart similarity index 82% rename from Frontend/lib/mih_components/mih_package_components/Example/package_tiles/test_package_tile.dart rename to Frontend/lib/mih_package_components/Example/package_tiles/test_package_tile.dart index 7ef12f06..6cf7c228 100644 --- a/Frontend/lib/mih_components/mih_package_components/Example/package_tiles/test_package_tile.dart +++ b/Frontend/lib/mih_package_components/Example/package_tiles/test_package_tile.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.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_package_components/mih_package_tile.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class TestPackageTile extends StatefulWidget { diff --git a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart b/Frontend/lib/mih_package_components/Example/package_tools/package_tool_one.dart similarity index 94% rename from Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart rename to Frontend/lib/mih_package_components/Example/package_tools/package_tool_one.dart index e72699bf..0bb85e04 100644 --- a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart +++ b/Frontend/lib/mih_package_components/Example/package_tools/package_tool_one.dart @@ -5,35 +5,35 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:geolocator/geolocator.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_business_profile_preview.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_personal_profile_preview.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.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_package_components/mih_banner_ad.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_business_profile_preview.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_personal_profile_preview.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart'; // import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_date_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_numeric_stepper.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_image_display.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_radio_options.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_time_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_toggle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_date_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_numeric_stepper.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_image_display.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_radio_options.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_time_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_toggle.dart'; import 'package:redacted/redacted.dart'; class PackageToolOne extends StatefulWidget { @@ -96,6 +96,11 @@ class _PackageToolOneState extends State { builder: (context) { return MihPackageWindow( fullscreen: false, + borderOn: true, + foregroundColor: MihColors.getOrangeColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + backgroundColor: MihColors.getBluishPurpleColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), windowTitle: "Test No Full", menuOptions: [ SpeedDialChild( @@ -640,7 +645,7 @@ class _PackageToolOneState extends State { const SnackBar(content: Text("Input Valid")), ); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_two.dart b/Frontend/lib/mih_package_components/Example/package_tools/package_tool_two.dart similarity index 86% rename from Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_two.dart rename to Frontend/lib/mih_package_components/Example/package_tools/package_tool_two.dart index 01a6e072..f6713a51 100644 --- a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_two.dart +++ b/Frontend/lib/mih_package_components/Example/package_tools/package_tool_two.dart @@ -1,9 +1,9 @@ import 'package:custom_rating_bar/custom_rating_bar.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class PackageToolTwo extends StatefulWidget { diff --git a/Frontend/lib/mih_package_components/Example/package_tools/package_tool_zero.dart b/Frontend/lib/mih_package_components/Example/package_tools/package_tool_zero.dart new file mode 100644 index 00000000..5b9cf66a --- /dev/null +++ b/Frontend/lib/mih_package_components/Example/package_tools/package_tool_zero.dart @@ -0,0 +1,465 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; + +class PackageToolZero extends StatefulWidget { + const PackageToolZero({super.key}); + + @override + State createState() => _PackageToolZeroState(); +} + +class _PackageToolZeroState extends State { + @override + Widget build(BuildContext context) { + return MihPackageToolBody( + borderOn: false, + bodyItem: getBody(), + ); + } + + Widget getBody() { + return MihSingleChildScroll( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "This is Package Tool Zero to test MIH Alerts", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + const SizedBox(height: 20), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().successBasicAlert( + "Success!", + "This is the message for the success message", + context, + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + child: Text( + "Basic Success Alert", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().successAdvancedAlert( + "Success!", + "This is the advanced alert message", + [ + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Okay", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + child: Text( + "Advanced Success Alert", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().warningAlert( + "Warning Alert!", "This is a friendly warning mee", context); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + child: Text( + "Warning Alert", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().warningAdvancedAlert( + "warning!", + "This is the advanced alert message", + [ + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Okay", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, + ); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + child: Text( + "Advanced Warning Alert", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().errorBasicAlert( + "Error!", + "Thisis the basic error alert message", + context, + ); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Basic Error Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().errorAdvancedAlert( + "Error!", + "This is the advanced alert message", + [ + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Okay", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, + ); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Advanced Error Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().deleteConfirmationAlert( + "THis is a delete confirmation", + () { + context.pop(); + }, + context, + ); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Delete Confirmation Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().internetConnectionAlert(context); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Internet Connection Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().locationPermissionAlert(context); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Location Permission Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().inputErrorAlert(context); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Input Error Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().passwordRequirementAlert(context); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: FittedBox( + child: Text( + "Password Requirement Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().passwordMatchAlert(context); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Password Match Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().loginErrorAlert(context); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Login Error Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().emailExistsAlert(context); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Email Exists Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + MihButton( + width: 300, + onPressed: () { + MihAlertServices().invalidEmailAlert(context); + }, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + child: Text( + "Invalid Email Alert", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 10), + ], + ), + ); + } +} diff --git a/Frontend/lib/mih_components/mih_package_components/assets/fonts/Mih_Icons.ttf b/Frontend/lib/mih_package_components/assets/fonts/Mih_Icons.ttf similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/fonts/Mih_Icons.ttf rename to Frontend/lib/mih_package_components/assets/fonts/Mih_Icons.ttf diff --git a/Frontend/lib/mih_components/mih_package_components/assets/fonts/icomoon_link.txt b/Frontend/lib/mih_package_components/assets/fonts/icomoon_link.txt similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/fonts/icomoon_link.txt rename to Frontend/lib/mih_package_components/assets/fonts/icomoon_link.txt diff --git a/Frontend/lib/mih_components/mih_package_components/assets/fonts/style.css b/Frontend/lib/mih_package_components/assets/fonts/style.css similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/fonts/style.css rename to Frontend/lib/mih_package_components/assets/fonts/style.css diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/circle_logo.png b/Frontend/lib/mih_package_components/assets/images/app_icon/circle_logo.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/circle_logo.png rename to Frontend/lib/mih_package_components/assets/images/app_icon/circle_logo.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_app_icon.png b/Frontend/lib/mih_package_components/assets/images/app_icon/mih_app_icon.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_app_icon.png rename to Frontend/lib/mih_package_components/assets/images/app_icon/mih_app_icon.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app.png b/Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_app.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app.png rename to Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_app.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png b/Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png rename to Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_web.png b/Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_web.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_web.png rename to Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_web.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png b/Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png rename to Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/founder.jpg b/Frontend/lib/mih_package_components/assets/images/founder.jpg similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/founder.jpg rename to Frontend/lib/mih_package_components/assets/images/founder.jpg diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/i-dont-know-dark.png b/Frontend/lib/mih_package_components/assets/images/i-dont-know-dark.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/i-dont-know-dark.png rename to Frontend/lib/mih_package_components/assets/images/i-dont-know-dark.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/i-dont-know-light.png b/Frontend/lib/mih_package_components/assets/images/i-dont-know-light.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/i-dont-know-light.png rename to Frontend/lib/mih_package_components/assets/images/i-dont-know-light.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/logo_light.png b/Frontend/lib/mih_package_components/assets/images/logo_light.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/logo_light.png rename to Frontend/lib/mih_package_components/assets/images/logo_light.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png b/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png rename to Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_branding_splash.png b/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_branding_splash.png rename to Frontend/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif b/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif rename to Frontend/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash.png b/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash.png rename to Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png b/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png rename to Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png diff --git a/Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif b/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif rename to Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif diff --git a/Frontend/lib/mih_components/mih_package_components/mih_banner_ad.dart b/Frontend/lib/mih_package_components/mih_banner_ad.dart similarity index 94% rename from Frontend/lib/mih_components/mih_package_components/mih_banner_ad.dart rename to Frontend/lib/mih_package_components/mih_banner_ad.dart index 61abe627..fa2807db 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_banner_ad.dart +++ b/Frontend/lib/mih_package_components/mih_banner_ad.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_banner_ad_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_components/mih_package_components/mih_business_profile_preview.dart b/Frontend/lib/mih_package_components/mih_business_profile_preview.dart similarity index 89% rename from Frontend/lib/mih_components/mih_package_components/mih_business_profile_preview.dart rename to Frontend/lib/mih_package_components/mih_business_profile_preview.dart index e8968df5..45864d3d 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_business_profile_preview.dart +++ b/Frontend/lib/mih_package_components/mih_business_profile_preview.dart @@ -1,10 +1,10 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart'; @@ -52,8 +52,7 @@ class _MihBusinessProfilePreviewState extends State { return Row( children: [ FutureBuilder( - future: MihFileApi.getMinioFileUrl( - widget.business.logo_path, context), + future: MihFileApi.getMinioFileUrl(widget.business.logo_path), builder: (context, asyncSnapshot) { if (asyncSnapshot.connectionState == ConnectionState.done && asyncSnapshot.hasData) { diff --git a/Frontend/lib/mih_components/mih_package_components/mih_button.dart b/Frontend/lib/mih_package_components/mih_button.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_button.dart rename to Frontend/lib/mih_package_components/mih_button.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_calendar.dart b/Frontend/lib/mih_package_components/mih_calendar.dart similarity index 97% rename from Frontend/lib/mih_components/mih_package_components/mih_calendar.dart rename to Frontend/lib/mih_package_components/mih_calendar.dart index 8989da51..4fcfd7c0 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_calendar.dart +++ b/Frontend/lib/mih_package_components/mih_calendar.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; import 'package:table_calendar/table_calendar.dart'; diff --git a/Frontend/lib/mih_components/mih_package_components/mih_circle_avatar.dart b/Frontend/lib/mih_package_components/mih_circle_avatar.dart similarity index 94% rename from Frontend/lib/mih_components/mih_package_components/mih_circle_avatar.dart rename to Frontend/lib/mih_package_components/mih_circle_avatar.dart index c64aaa75..68cb393f 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_circle_avatar.dart +++ b/Frontend/lib/mih_package_components/mih_circle_avatar.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MihCircleAvatar extends StatefulWidget { @@ -41,11 +41,11 @@ class _MihCircleAvatarState extends State { // if (widget.backgroundColor == dark) { // print("here in light icon"); // return const AssetImage( - // 'lib/mih_components/mih_package_components/assets/images/i-dont-know-light.png'); + // 'lib/mih_package_components/assets/images/i-dont-know-light.png'); // } else { // print("here in dark icon"); // return const AssetImage( - // 'lib/mih_components/mih_package_components/assets/images/i-dont-know-dark.png'); + // 'lib/mih_package_components/assets/images/i-dont-know-dark.png'); // } } else { return widget.imageFile; diff --git a/Frontend/lib/mih_components/mih_package_components/mih_date_field.dart b/Frontend/lib/mih_package_components/mih_date_field.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_date_field.dart rename to Frontend/lib/mih_package_components/mih_date_field.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_dropdwn_field.dart b/Frontend/lib/mih_package_components/mih_dropdwn_field.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_dropdwn_field.dart rename to Frontend/lib/mih_package_components/mih_dropdwn_field.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_floating_menu.dart b/Frontend/lib/mih_package_components/mih_floating_menu.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_floating_menu.dart rename to Frontend/lib/mih_package_components/mih_floating_menu.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_form.dart b/Frontend/lib/mih_package_components/mih_form.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_form.dart rename to Frontend/lib/mih_package_components/mih_form.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_icons.dart b/Frontend/lib/mih_package_components/mih_icons.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_icons.dart rename to Frontend/lib/mih_package_components/mih_icons.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_image_display.dart b/Frontend/lib/mih_package_components/mih_image_display.dart similarity index 91% rename from Frontend/lib/mih_components/mih_package_components/mih_image_display.dart rename to Frontend/lib/mih_package_components/mih_image_display.dart index 509fcc59..3197628d 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_image_display.dart +++ b/Frontend/lib/mih_package_components/mih_image_display.dart @@ -63,7 +63,17 @@ class _MihImageDisplayState extends State { imagePreview != null ? ClipRRect( borderRadius: BorderRadius.circular(widget.width * 0.1), - child: Image(image: imagePreview!), + child: Container( + // width: widget.width, + height: widget.height, + decoration: BoxDecoration( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + borderRadius: BorderRadius.circular(widget.width * 0.1), + ), + child: Image(image: imagePreview!), + ), ) : Container( width: widget.width, diff --git a/Frontend/lib/mih_components/mih_pop_up_messages/mih_loading_circle.dart b/Frontend/lib/mih_package_components/mih_loading_circle.dart similarity index 79% rename from Frontend/lib/mih_components/mih_pop_up_messages/mih_loading_circle.dart rename to Frontend/lib/mih_package_components/mih_loading_circle.dart index 5172d15f..5e9f76c2 100644 --- a/Frontend/lib/mih_components/mih_pop_up_messages/mih_loading_circle.dart +++ b/Frontend/lib/mih_package_components/mih_loading_circle.dart @@ -1,11 +1,14 @@ import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import '../../main.dart'; +import '../main.dart'; class Mihloadingcircle extends StatefulWidget { final String? message; - const Mihloadingcircle({super.key, this.message}); + const Mihloadingcircle({ + super.key, + this.message, + }); @override State createState() => _MihloadingcircleState(); @@ -16,33 +19,12 @@ class _MihloadingcircleState extends State late AnimationController _controller; late Animation _animation; - late double popUpPaddingSize; - late double popUpWidth; - late double? popUpheight; - late double width; late double height; - void checkScreenSize() { - if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { - setState(() { - popUpWidth = 250; - popUpheight = 250; - popUpPaddingSize = 25.0; - }); - } else { - setState(() { - popUpWidth = 250; - popUpheight = 250; - popUpPaddingSize = 15.0; - }); - } - } - @override void initState() { super.initState(); - checkScreenSize(); _controller = AnimationController( duration: const Duration( milliseconds: 500), // Duration for one pulse (grow and shrink) @@ -70,9 +52,7 @@ class _MihloadingcircleState extends State child: IntrinsicWidth( child: IntrinsicHeight( child: Container( - padding: EdgeInsets.all(popUpPaddingSize), - // width: 250, - // height: 275, + padding: EdgeInsets.all(15), decoration: BoxDecoration( color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), diff --git a/Frontend/lib/mih_components/mih_layout/mih_notification_drawer.dart b/Frontend/lib/mih_package_components/mih_notification_drawer.dart similarity index 93% rename from Frontend/lib/mih_components/mih_layout/mih_notification_drawer.dart rename to Frontend/lib/mih_package_components/mih_notification_drawer.dart index b2ca0662..c11f6b1b 100644 --- a/Frontend/lib/mih_components/mih_layout/mih_notification_drawer.dart +++ b/Frontend/lib/mih_package_components/mih_notification_drawer.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/notification.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/notification.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:supertokens_flutter/http.dart' as http; -import '../../mih_config/mih_env.dart'; -import '../mih_pop_up_messages/mih_error_message.dart'; class MIHNotificationDrawer extends StatefulWidget { final AppUser signedInUser; @@ -43,19 +43,10 @@ class _MIHNotificationDrawerState extends State { arguments: widget.signedInUser, ); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - List> setTempNofitications() { List> temp = []; temp.add(["Notification 1", "Notification Description 1"]); diff --git a/Frontend/lib/mih_components/mih_pop_up_messages/mih_notification_message.dart b/Frontend/lib/mih_package_components/mih_notification_message.dart similarity index 97% rename from Frontend/lib/mih_components/mih_pop_up_messages/mih_notification_message.dart rename to Frontend/lib/mih_package_components/mih_notification_message.dart index 521fdb49..4df6b8a2 100644 --- a/Frontend/lib/mih_components/mih_pop_up_messages/mih_notification_message.dart +++ b/Frontend/lib/mih_package_components/mih_notification_message.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import '../../main.dart'; -import '../../mih_components/mih_objects/arguments.dart'; +import '../main.dart'; +import '../mih_objects/arguments.dart'; class MIHNotificationMessage extends StatefulWidget { final NotificationArguments arguments; @@ -55,7 +55,6 @@ class _MIHNotificationMessageState extends State } Widget notifyPopUp() { - //messageTypes["Input Error"] = return GestureDetector( onTap: widget.arguments.onTap, child: Container( diff --git a/Frontend/lib/mih_components/mih_package_components/mih_numeric_stepper.dart b/Frontend/lib/mih_package_components/mih_numeric_stepper.dart similarity index 98% rename from Frontend/lib/mih_components/mih_package_components/mih_numeric_stepper.dart rename to Frontend/lib/mih_package_components/mih_numeric_stepper.dart index 29017db8..9e836b25 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_numeric_stepper.dart +++ b/Frontend/lib/mih_package_components/mih_numeric_stepper.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; class MihNumericStepper extends StatefulWidget { final TextEditingController controller; diff --git a/Frontend/lib/mih_components/mih_package_components/mih_package.dart b/Frontend/lib/mih_package_components/mih_package.dart similarity index 93% rename from Frontend/lib/mih_components/mih_package_components/mih_package.dart rename to Frontend/lib/mih_package_components/mih_package.dart index b431df5f..41d710ed 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_package.dart +++ b/Frontend/lib/mih_package_components/mih_package.dart @@ -2,9 +2,9 @@ import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_scack_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_scack_bar.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_home/components/mih_app_drawer.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:flutter/material.dart'; // ignore: must_be_immutable @@ -12,7 +12,7 @@ class MihPackage extends StatefulWidget { final Widget appActionButton; final MihPackageTools appTools; final List appBody; - final List? appToolTitles; + final List appToolTitles; final MIHAppDrawer? actionDrawer; int selectedbodyIndex; final Function(int) onIndexChange; @@ -21,7 +21,7 @@ class MihPackage extends StatefulWidget { required this.appActionButton, required this.appTools, required this.appBody, - this.appToolTitles, + required this.appToolTitles, this.actionDrawer, required this.selectedbodyIndex, required this.onIndexChange, @@ -173,10 +173,7 @@ class _MihPackageState extends State // color: Colors.black, child: FittedBox( child: Text( - widget.appToolTitles != null - ? widget - .appToolTitles![widget.selectedbodyIndex] - : "", + widget.appToolTitles[widget.selectedbodyIndex], style: const TextStyle( fontSize: 23, fontWeight: FontWeight.w600, diff --git a/Frontend/lib/mih_components/mih_package_components/mih_package_action.dart b/Frontend/lib/mih_package_components/mih_package_action.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_package_action.dart rename to Frontend/lib/mih_package_components/mih_package_action.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_package_tile.dart b/Frontend/lib/mih_package_components/mih_package_tile.dart similarity index 58% rename from Frontend/lib/mih_components/mih_package_components/mih_package_tile.dart rename to Frontend/lib/mih_package_components/mih_package_tile.dart index 93538ce0..dadf0cab 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_package_tile.dart +++ b/Frontend/lib/mih_package_components/mih_package_tile.dart @@ -2,12 +2,12 @@ import 'package:app_settings/app_settings.dart'; import 'package:flutter/foundation.dart'; import 'package:local_auth/local_auth.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_yt_video_player.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_yt_video_player.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; class MihPackageTile extends StatefulWidget { final String appName; @@ -40,6 +40,7 @@ class _MihPackageTileState extends State { void displayHint() { if (widget.ytVideoID != null) { showDialog( + barrierDismissible: false, context: context, builder: (context) { return MihPackageWindow( @@ -89,82 +90,67 @@ class _MihPackageTileState extends State { } void authErrorPopUp() { - Widget alertpopUp = MihPackageAlert( - alertIcon: Icon( - Icons.fingerprint, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 100, - ), - alertTitle: "Biometric Authentication Required", - alertBody: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - "Hi there! To jump into the ${widget.appName} Package, you'll need to authenticate yourself with your devices biometrics, please set up biometric authentication (like fingerprint, face ID, pattern or pin) on your device first.\n\nIf you have already set up biometric authentication, press \"Authenticate now\" to try again or press \"Set Up Authentication\" to go to your device settings.", + MihAlertServices().errorAdvancedAlert( + "Biometric Authentication Required", + "Hi there! To jump into the ${widget.appName} Package, you'll need to authenticate yourself with your devices biometrics, please set up biometric authentication (like fingerprint, face ID, pattern or pin) on your device first.\n\nIf you have already set up biometric authentication, press \"Authenticate now\" to try again or press \"Set Up Authentication\" to go to your device settings.", + [ + MihButton( + onPressed: () { + Navigator.of(context).pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Dismiss", style: TextStyle( - fontSize: 15, - color: MihColors.getSecondaryColor( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, ), ), - const SizedBox(height: 20), - Wrap( - runAlignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - AppSettings.openAppSettings( - type: AppSettingsType.security, - ); - Navigator.of(context).pop(); - }, - buttonColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Set Up Authentication", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - onPressed: () { - Navigator.of(context).pop(); - authenticateUser(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Authenticate Now", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], + ), + MihButton( + onPressed: () { + AppSettings.openAppSettings( + type: AppSettingsType.security, + ); + Navigator.of(context).pop(); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Set Up Authentication", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - showDialog( - context: context, - builder: (context) { - return alertpopUp; - }, + ), + MihButton( + onPressed: () { + Navigator.of(context).pop(); + authenticateUser(); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Authenticate Now", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } diff --git a/Frontend/lib/mih_components/mih_package_components/mih_package_tool_body.dart b/Frontend/lib/mih_package_components/mih_package_tool_body.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_package_tool_body.dart rename to Frontend/lib/mih_package_components/mih_package_tool_body.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_package_tools.dart b/Frontend/lib/mih_package_components/mih_package_tools.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_package_tools.dart rename to Frontend/lib/mih_package_components/mih_package_tools.dart diff --git a/Frontend/lib/mih_package_components/mih_package_window.dart b/Frontend/lib/mih_package_components/mih_package_window.dart new file mode 100644 index 00000000..e2dc8720 --- /dev/null +++ b/Frontend/lib/mih_package_components/mih_package_window.dart @@ -0,0 +1,210 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; + +class MihPackageWindow extends StatefulWidget { + final String? windowTitle; + final Widget windowBody; + final List? menuOptions; + final void Function()? onWindowTapClose; + final Color? backgroundColor; + final Color? foregroundColor; + final bool? borderOn; + final bool fullscreen; + const MihPackageWindow({ + super.key, + required this.fullscreen, + required this.windowTitle, + this.menuOptions, + required this.onWindowTapClose, + required this.windowBody, + this.borderOn, + this.backgroundColor, + this.foregroundColor, + }); + + @override + State createState() => _MihPackageWindowState(); +} + +class _MihPackageWindowState extends State { + late double windowTitleSize; + late double horizontralWindowPadding; + late double vertticalWindowPadding; + late double windowWidth; + late double windowHeight; + late double width; + late double height; + + void checkScreenSize() { + // print("screen width: $width"); + // print("screen height: $height"); + if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { + setState(() { + windowTitleSize = 25; + horizontralWindowPadding = width / 7; + vertticalWindowPadding = 10; + windowWidth = width; + windowHeight = height; + }); + } else { + setState(() { + windowTitleSize = 20; + horizontralWindowPadding = 10; + vertticalWindowPadding = 10; + windowWidth = width; + windowHeight = height; + }); + } + } + + Widget getHeader() { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (widget.onWindowTapClose != null) + Padding( + padding: const EdgeInsets.only( + top: 5.0, + left: 5.0, + ), + child: MihButton( + width: 40, + height: 40, + elevation: 10, + onPressed: widget.onWindowTapClose, + buttonColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + child: Icon( + Icons.close, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + ), + if (widget.windowTitle != null) + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Text( + widget.windowTitle!, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: windowTitleSize, + fontWeight: FontWeight.bold, + color: widget.foregroundColor ?? + MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ), + ), + if (widget.menuOptions != null) + Padding( + padding: const EdgeInsets.only( + top: 5.0, + right: 5.0, + ), + child: SizedBox( + width: 40, + child: MihFloatingMenu( + iconSize: 40, + animatedIcon: AnimatedIcons.menu_close, + direction: SpeedDialDirection.down, + children: widget.menuOptions != null ? widget.menuOptions! : [], + ), + ), + ), + ], + ); + } + + @override + void dispose() { + super.dispose(); + } + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + var size = MediaQuery.of(context).size; + setState(() { + width = size.width; + height = size.height; + }); + checkScreenSize(); + return Dialog( + insetPadding: EdgeInsets.symmetric( + horizontal: horizontralWindowPadding, + vertical: vertticalWindowPadding, + ), + insetAnimationCurve: Easing.emphasizedDecelerate, + insetAnimationDuration: Durations.short1, + child: Material( + elevation: 10, + shadowColor: Colors.black, + color: widget.backgroundColor ?? + MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25.0), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25.0), + border: widget.borderOn == null || !widget.borderOn! + ? null + : Border.all( + color: widget.foregroundColor ?? + MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + width: 5.0), + ), + child: widget.fullscreen + ? Column( + mainAxisSize: MainAxisSize.max, + children: [ + getHeader(), + const SizedBox(height: 5), + Expanded( + child: SingleChildScrollView(child: widget.windowBody)), + ], + ) + : Column( + mainAxisSize: MainAxisSize.min, + children: [ + getHeader(), + const SizedBox(height: 5), + Flexible( + child: Padding( + padding: EdgeInsets.only( + left: 25, + right: 25, + bottom: vertticalWindowPadding, + ), + child: ConstrainedBox( + constraints: BoxConstraints( + maxHeight: windowHeight * 0.85, + maxWidth: windowWidth * 0.85, + ), + child: MihSingleChildScroll(child: widget.windowBody), + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/Frontend/lib/mih_components/mih_package_components/mih_personal_profile_preview.dart b/Frontend/lib/mih_package_components/mih_personal_profile_preview.dart similarity index 90% rename from Frontend/lib/mih_components/mih_package_components/mih_personal_profile_preview.dart rename to Frontend/lib/mih_package_components/mih_personal_profile_preview.dart index b5bf402f..a08f266e 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_personal_profile_preview.dart +++ b/Frontend/lib/mih_package_components/mih_personal_profile_preview.dart @@ -1,9 +1,9 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; @@ -27,8 +27,7 @@ class _MihPersonalProfilePreviewState extends State { @override void initState() { super.initState(); - futureImageUrl = - MihFileApi.getMinioFileUrl(widget.user.pro_pic_path, context); + futureImageUrl = MihFileApi.getMinioFileUrl(widget.user.pro_pic_path); } @override diff --git a/Frontend/lib/mih_components/mih_package_components/mih_radio_options.dart b/Frontend/lib/mih_package_components/mih_radio_options.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_radio_options.dart rename to Frontend/lib/mih_package_components/mih_radio_options.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_scack_bar.dart b/Frontend/lib/mih_package_components/mih_scack_bar.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_scack_bar.dart rename to Frontend/lib/mih_package_components/mih_scack_bar.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_search_bar.dart b/Frontend/lib/mih_package_components/mih_search_bar.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_search_bar.dart rename to Frontend/lib/mih_package_components/mih_search_bar.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_single_child_scroll.dart b/Frontend/lib/mih_package_components/mih_single_child_scroll.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_single_child_scroll.dart rename to Frontend/lib/mih_package_components/mih_single_child_scroll.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_text_form_field.dart b/Frontend/lib/mih_package_components/mih_text_form_field.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_text_form_field.dart rename to Frontend/lib/mih_package_components/mih_text_form_field.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_time_field.dart b/Frontend/lib/mih_package_components/mih_time_field.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_time_field.dart rename to Frontend/lib/mih_package_components/mih_time_field.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_toggle.dart b/Frontend/lib/mih_package_components/mih_toggle.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_toggle.dart rename to Frontend/lib/mih_package_components/mih_toggle.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_yt_video_player.dart b/Frontend/lib/mih_package_components/mih_yt_video_player.dart similarity index 100% rename from Frontend/lib/mih_components/mih_package_components/mih_yt_video_player.dart rename to Frontend/lib/mih_package_components/mih_yt_video_player.dart diff --git a/Frontend/lib/mih_packages/about_mih/about_mih.dart b/Frontend/lib/mih_packages/about_mih/about_mih.dart index 07f69340..dfeb516f 100644 --- a/Frontend/lib/mih_packages/about_mih/about_mih.dart +++ b/Frontend/lib/mih_packages/about_mih/about_mih.dart @@ -1,8 +1,8 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/about_mih_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_providers/about_mih_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/about_mih/package_tools/mih_%20attributes.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'; diff --git a/Frontend/lib/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart b/Frontend/lib/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart index c01a1162..90570143 100644 --- a/Frontend/lib/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart +++ b/Frontend/lib/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class PolicyAndTermsText { 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 index 945a4122..e46cbe19 100644 --- 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 @@ -1,8 +1,8 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class AboutMihTile extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/about_mih/package_tools/mih_ attributes.dart b/Frontend/lib/mih_packages/about_mih/package_tools/mih_ attributes.dart index 1f35132d..abdbff56 100644 --- a/Frontend/lib/mih_packages/about_mih/package_tools/mih_ attributes.dart +++ b/Frontend/lib/mih_packages/about_mih/package_tools/mih_ attributes.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:url_launcher/url_launcher.dart'; diff --git a/Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart b/Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart index 6ffa3070..509ef1ba 100644 --- a/Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart +++ b/Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart @@ -1,17 +1,17 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_install_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:redacted/redacted.dart'; @@ -71,7 +71,7 @@ class _MihInfoState extends State { backgroundColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), backgroundImage: const AssetImage( - "lib/mih_components/mih_package_components/assets/images/founder.jpg"), + "lib/mih_package_components/assets/images/founder.jpg"), //'https://media.licdn.com/dms/image/D4D03AQGd1-QhjtWWpA/profile-displayphoto-shrink_400_400/0/1671698053061?e=2147483647&v=beta&t=a3dJI5yxs5-KeXjj10LcNCFuC9IOfa8nNn3k_Qyr0CA'), radius: 75, ), @@ -343,207 +343,216 @@ class _MihInfoState extends State { List getSocialsList() { List socials = []; - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_youtubeUrl); }, - tileName: "YouTube", - tileIcon: Center( + appName: "YouTube", + appIcon: Center( child: FaIcon( FontAwesomeIcons.youtube, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 175, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_tiktokUrl); }, - tileName: "TikTok", - tileIcon: Center( + appName: "TikTok", + appIcon: Center( child: FaIcon( FontAwesomeIcons.tiktok, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_twitch); }, - tileName: "Twitch", - tileIcon: Center( + appName: "Twitch", + appIcon: Center( child: FaIcon( FontAwesomeIcons.twitch, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_threadsUrl); }, - tileName: "Threads", - tileIcon: Center( + appName: "Threads", + appIcon: Center( child: FaIcon( FontAwesomeIcons.threads, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_whatsappUrl); }, - tileName: "Whatsapp", - tileIcon: Center( + appName: "Whatsapp", + appIcon: Center( child: FaIcon( FontAwesomeIcons.whatsapp, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_instagramUrl); }, - tileName: "Instagram", - tileIcon: Center( + appName: "Instagram", + appIcon: Center( child: FaIcon( FontAwesomeIcons.instagram, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_xUrl); }, - tileName: "X", - tileIcon: Center( + appName: "X", + appIcon: Center( child: FaIcon( FontAwesomeIcons.xTwitter, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_linkedinUrl); }, - tileName: "LinkedIn", - tileIcon: Center( + appName: "LinkedIn", + appIcon: Center( child: FaIcon( FontAwesomeIcons.linkedin, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_facebookUrl); }, - tileName: "FaceBook", - tileIcon: Center( + appName: "FaceBook", + appIcon: Center( child: FaIcon( FontAwesomeIcons.facebook, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_redditUrl); }, - tileName: "Reddit", - tileIcon: Center( + appName: "Reddit", + appIcon: Center( child: FaIcon( FontAwesomeIcons.reddit, - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), size: 200, ), ), - p: MihColors.getSecondaryColor( + iconSize: 200, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== - socials.add(MIHTile( + socials.add(MihPackageTile( onTap: () { launchSocialUrl(_kick); }, - tileName: "Kick", - tileIcon: Center( + appName: "Kick", + appIcon: Center( child: Text( "KICK", style: TextStyle( - color: MihColors.getPrimaryColor( + color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), fontWeight: FontWeight.bold, fontSize: 100, @@ -555,9 +564,10 @@ class _MihInfoState extends State { // size: 200, // ), ), - p: MihColors.getSecondaryColor( + iconSize: 100, + primaryColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - s: MihColors.getPrimaryColor( + secondaryColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), )); //================================================================== @@ -783,29 +793,9 @@ class _MihInfoState extends State { fontSize: 15, ), ), - // ===================== Divider - // Padding( - // padding: EdgeInsets.symmetric( - // vertical: 10.0, - // horizontal: 25, - // ), - // child: Divider( - // thickness: 1, - // color: MihColors.getGreyColor( - // MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // ), - // ), const SizedBox( height: 10, ), - // Text( - // "The MIH Community", - // textAlign: TextAlign.center, - // style: TextStyle( - // fontWeight: FontWeight.bold, - // fontSize: 22, - // ), - // ), Wrap( alignment: WrapAlignment.spaceAround, crossAxisAlignment: WrapCrossAlignment.center, @@ -824,7 +814,98 @@ class _MihInfoState extends State { fontSize: 22, ), ), - // ===================== Divider + const SizedBox( + height: 10, + ), + Wrap( + alignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + spacing: 10, + runSpacing: 10, + children: [ + MihButton( + onPressed: () { + MihInstallServices().installMihTrigger(context); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: getInstallButtonText(), + ), + MihButton( + onPressed: () { + launchSocialUrl( + Uri.parse( + "https://www.youtube.com/playlist?list=PLuT35kJIui0H5kXjxNOZlHoOPZbQLr4qh", + ), + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FaIcon( + FontAwesomeIcons.youtube, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + const SizedBox(width: 10), + Text( + "MIH Beginners Guide", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + MihButton( + onPressed: () { + launchSocialUrl( + Uri.parse( + "https://patreon.com/MzansiInnovationHub?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink", + ), + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FaIcon( + FontAwesomeIcons.patreon, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + const SizedBox(width: 10), + Text( + "Support Our Journey", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + ], + ), + const SizedBox( + height: 10, + ), + // // ===================== Divider Padding( padding: EdgeInsets.symmetric( vertical: 10.0, @@ -836,9 +917,6 @@ class _MihInfoState extends State { MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), ), - // const SizedBox( - // height: 10, - // ), Padding( padding: const EdgeInsets.symmetric(horizontal: 25.0), child: Wrap( @@ -856,93 +934,6 @@ class _MihInfoState extends State { const SizedBox( height: 25, ), - Wrap( - alignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - MihInstallServices().installMihTrigger(context); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: getInstallButtonText(), - ), - MihButton( - onPressed: () { - launchSocialUrl( - Uri.parse( - "https://www.youtube.com/playlist?list=PLuT35kJIui0H5kXjxNOZlHoOPZbQLr4qh", - ), - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FaIcon( - FontAwesomeIcons.youtube, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(width: 10), - Text( - "MIH Beginners Guide", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - MihButton( - onPressed: () { - launchSocialUrl( - Uri.parse( - "https://patreon.com/MzansiInnovationHub?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink", - ), - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FaIcon( - FontAwesomeIcons.patreon, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(width: 10), - Text( - "Support Our Journey", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ]), const SizedBox( height: 10, ), diff --git a/Frontend/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart b/Frontend/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart index b5054614..0ac7d838 100644 --- a/Frontend/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart +++ b/Frontend/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart @@ -1,7 +1,7 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart'; import 'package:flutter/material.dart'; diff --git a/Frontend/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart b/Frontend/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart index e4384464..4f73ea0e 100644 --- a/Frontend/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart +++ b/Frontend/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart @@ -1,7 +1,7 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart'; import 'package:flutter/material.dart'; diff --git a/Frontend/lib/mih_packages/access_review/builder/build_access_request_list.dart b/Frontend/lib/mih_packages/access_review/builder/build_access_request_list.dart index e18906e9..2ca66184 100644 --- a/Frontend/lib/mih_packages/access_review/builder/build_access_request_list.dart +++ b/Frontend/lib/mih_packages/access_review/builder/build_access_request_list.dart @@ -2,15 +2,13 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_warning_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/access_request.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/access_request.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:supertokens_flutter/http.dart' as http; class BuildAccessRequestList extends StatefulWidget { @@ -69,42 +67,16 @@ class _BuildPatientsListState extends State { message = "You've declined the access request. ${widget.accessRequests[index].Name} will not have access to your profile."; } - successPopUp(message); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - - void successPopUp(String message) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - - void accessCancelledWarning() { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "Access Cancelled"); - }, - ); - } - Widget displayQueue(int index) { String line1 = "Appointment: ${widget.accessRequests[index].date_time.substring(0, 16).replaceAll("T", " ")}"; @@ -175,7 +147,11 @@ class _BuildPatientsListState extends State { // ), onTap: () { if (access == "CANCELLED") { - accessCancelledWarning(); + MihAlertServices().warningAlert( + "Access Cancelled", + "This appointment has been canceled. As a result, access has been cancelled and the doctor no longer have access to the patient's profile. If you would like them to view the patient's profile again, please book a new appointment through them.", + context, + ); } else { viewApprovalPopUp(index); } diff --git a/Frontend/lib/mih_packages/access_review/builder/build_business_access_list.dart b/Frontend/lib/mih_packages/access_review/builder/build_business_access_list.dart index 782c75a3..f5508113 100644 --- a/Frontend/lib/mih_packages/access_review/builder/build_business_access_list.dart +++ b/Frontend/lib/mih_packages/access_review/builder/build_business_access_list.dart @@ -2,17 +2,15 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_access_controlls_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patient_access.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_access_controlls_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_access_controls_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_warning_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:provider/provider.dart'; class BuildBusinessAccessList extends StatefulWidget { @@ -42,24 +40,6 @@ class _BuildPatientsListState extends State { late double width; late double height; - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - - void accessCancelledWarning() { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "Access Cancelled"); - }, - ); - } - Widget displayQueue( MzansiProfileProvider mzansiProfileProvider, MihAccessControllsProvider accessProvider, @@ -369,7 +349,7 @@ class _BuildPatientsListState extends State { successPopUp("Successfully Actioned Request", "You have successfully Declined access request"); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } }, buttonColor: MihColors.getRedColor( @@ -410,7 +390,7 @@ class _BuildPatientsListState extends State { successPopUp("Successfully Actioned Request", "You have successfully Accepted access request"); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -443,60 +423,34 @@ class _BuildPatientsListState extends State { } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - KenLogger.warning("dismissing pop up and refreshing list"); - if (widget.onSuccessUpate != null) { - widget.onSuccessUpate!(); - } - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + KenLogger.warning("dismissing pop up and refreshing list"); + if (widget.onSuccessUpate != null) { + widget.onSuccessUpate!(); + } + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } diff --git a/Frontend/lib/mih_packages/access_review/mih_access.dart b/Frontend/lib/mih_packages/access_review/mih_access.dart index 73d4e325..56646629 100644 --- a/Frontend/lib/mih_packages/access_review/mih_access.dart +++ b/Frontend/lib/mih_packages/access_review/mih_access.dart @@ -1,10 +1,13 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_access_controlls_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_access_controlls_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/access_review/package_tools/mih_access_requests.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:provider/provider.dart'; class MihAccess extends StatefulWidget { @@ -17,16 +20,50 @@ class MihAccess extends StatefulWidget { } class _MihAccessState extends State { + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + setState(() { + _isLoadingInitialData = false; + }); + } + + @override + void initState() { + super.initState(); + _loadInitialData(); + } + @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: context.watch().toolIndex, - onIndexChange: (newValue) { - context.read().setToolIndex(newValue); + return Consumer( + builder: (BuildContext context, MihAccessControllsProvider accessProvider, + Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: accessProvider.toolIndex, + onIndexChange: (newValue) { + accessProvider.setToolIndex(newValue); + }, + ); }, ); } 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 index 8574ef9e..e58b387b 100644 --- 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 @@ -1,7 +1,7 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart b/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart index 1fc2f9d8..a40ad884 100644 --- a/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart +++ b/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart @@ -1,18 +1,15 @@ -import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_header.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_access_controlls_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patient_access.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_access_controlls_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_packages/access_review/builder/build_business_access_list.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_access_controls_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -73,38 +70,6 @@ class _MihAccessRequestState extends State { selectedDropdown = filterController.text; }); } - // setState(() { - // accessRequestResults = fetchAccessRequests(); - // }); - } - - MIHAction getActionButton() { - return MIHAction( - icon: const Icon(Icons.arrow_back), - iconSize: 35, - onTap: () { - context.goNamed( - 'mihHome', - extra: false, - ); - FocusScope.of(context).unfocus(); - }, - ); - } - - MIHHeader getHeader() { - return const MIHHeader( - headerAlignment: MainAxisAlignment.center, - headerItems: [ - Text( - "Forever Access List", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 25, - ), - ), - ], - ); } Widget getBody() { diff --git a/Frontend/lib/mih_packages/calculator/mih_calculator.dart b/Frontend/lib/mih_packages/calculator/mih_calculator.dart index 775a868e..3e78b66e 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:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calculator_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calculator_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/calculator/package_tools/currency_exchange_rate.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'; 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 index a771df6b..62daac41 100644 --- a/Frontend/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart +++ b/Frontend/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart @@ -1,8 +1,8 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MihCalculatorTile extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart b/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart index 6fabe709..7c49f855 100644 --- a/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart +++ b/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart @@ -1,15 +1,15 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calculator_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_banner_ad.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calculator_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_currency_exchange_rate_services.dart'; @@ -169,6 +169,7 @@ class _CurrencyExchangeRateState extends State { final String companyName = 'Mzansi Innovation Hub'; showDialog( + barrierDismissible: false, context: context, builder: (context) => MihPackageWindow( fullscreen: false, @@ -383,8 +384,7 @@ class _CurrencyExchangeRateState extends State { FocusScope.of(context) .requestFocus(FocusNode()); } else { - MihAlertServices() - .formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/calculator/package_tools/simple_calc.dart b/Frontend/lib/mih_packages/calculator/package_tools/simple_calc.dart index 966ee6c7..4a5e05fd 100644 --- a/Frontend/lib/mih_packages/calculator/package_tools/simple_calc.dart +++ b/Frontend/lib/mih_packages/calculator/package_tools/simple_calc.dart @@ -1,7 +1,7 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:flutter/material.dart'; import 'package:math_expressions/math_expressions.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart b/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart index 58583291..9516f533 100644 --- a/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart +++ b/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart @@ -1,19 +1,19 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_banner_ad.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_numeric_stepper.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_numeric_stepper.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:math_expressions/math_expressions.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_toggle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_toggle.dart'; import 'package:provider/provider.dart'; class TipCalc extends StatefulWidget { @@ -392,7 +392,7 @@ class _TipCalcState extends State { if (_formKey.currentState!.validate()) { validateInput(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/calendar/builder/build_access_request_list.dart b/Frontend/lib/mih_packages/calendar/builder/build_access_request_list.dart index df5a2f8f..1756bffe 100644 --- a/Frontend/lib/mih_packages/calendar/builder/build_access_request_list.dart +++ b/Frontend/lib/mih_packages/calendar/builder/build_access_request_list.dart @@ -1,20 +1,16 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/access_request.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_objects/access_request.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; - +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:supertokens_flutter/http.dart' as http; -import '../../../main.dart'; -import '../../../mih_components/mih_pop_up_messages/mih_error_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_config/mih_env.dart'; - class BuildAccessRequestList extends StatefulWidget { final List accessRequests; final AppUser signedInUser; @@ -71,42 +67,16 @@ class _BuildPatientsListState extends State { message = "You've declined the access request. ${widget.accessRequests[index].Name} will not have access to your profile."; } - successPopUp(message); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - - void successPopUp(String message) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - - void accessCancelledWarning() { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "Access Cancelled"); - }, - ); - } - Widget displayQueue(int index) { String line1 = "Appointment: ${widget.accessRequests[index].date_time.substring(0, 16).replaceAll("T", " ")}"; @@ -177,7 +147,11 @@ class _BuildPatientsListState extends State { // ), onTap: () { if (access == "CANCELLED") { - accessCancelledWarning(); + MihAlertServices().warningAlert( + "Access Cancelled", + "This appointment has been canceled. As a result, access has been cancelled and the doctor no longer have access to the patient's profile. If you would like them to view the patient's profile again, please book a new appointment through them.", + context, + ); } else { viewApprovalPopUp(index); } diff --git a/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart b/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart index 32481014..04ede238 100644 --- a/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart +++ b/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart @@ -2,22 +2,19 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/appointment.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/appointment.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_date_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_time_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_date_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_time_field.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -525,8 +522,7 @@ class _BuildAppointmentListState extends State { updateAppointmentCall(mzansiProfileProvider, mihCalendarProvider, index); } else { - MihAlertServices() - .formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -572,17 +568,13 @@ class _BuildAppointmentListState extends State { MzansiProfileProvider mzansiProfileProvider, MihCalendarProvider mihCalendarProvider, int index) { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - return MIHDeleteMessage( - deleteType: "Appointment", - onTap: () { - deleteAppointmentCall( - mzansiProfileProvider, mihCalendarProvider, index); - }); + MihAlertServices().deleteConfirmationAlert( + "This appointment will be deleted permanently from your calendar. Are you certain you want to delete it?", + () { + deleteAppointmentCall( + mzansiProfileProvider, mihCalendarProvider, index); }, + context, ); } @@ -641,38 +633,11 @@ class _BuildAppointmentListState extends State { context.pop(); successPopUp("Successfully Updated Appointment", "You appointment has been successfully updated."); - // if (!widget.inWaitingRoom) { - // KenLogger.warning("calendar route"); - // context.goNamed( - // "mihCalendar", - // ); - // } else { - // KenLogger.warning("waiting room route"); - // // GoRouter.of(context).refresh(); - // context.goNamed( - // 'mihHome', - // ); - // context.goNamed( - // 'patientManager', - // extra: PatManagerArguments( - // mzansiProfileProvider.user!, - // false, - // mzansiProfileProvider.business, - // mzansiProfileProvider.businessUser, - // ), - // ); - // // context.pop(); - // } } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } @@ -696,76 +661,40 @@ class _BuildAppointmentListState extends State { if (statucCode == 200) { context.pop(); context.pop(); - successPopUp("Successfully Deleted Appointment", - "You appointment has been successfully deleted from your calendar."); + clearControllers(); + // successPopUp("Successfully Deleted Appointment", + // "You appointment has been successfully deleted from your calendar."); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - clearControllers(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + clearControllers(); + Navigator.of(context).pop(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } diff --git a/Frontend/lib/mih_packages/calendar/builder/build_queue_list.dart b/Frontend/lib/mih_packages/calendar/builder/build_queue_list.dart index 3fead192..bef838a1 100644 --- a/Frontend/lib/mih_packages/calendar/builder/build_queue_list.dart +++ b/Frontend/lib/mih_packages/calendar/builder/build_queue_list.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_queue.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_warning_message.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patient_queue.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; @@ -71,42 +70,6 @@ class _BuildQueueListState extends State { } } - void noAccessWarning() { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "No Access"); - }, - ); - } - - void accessDeclinedWarning() { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "Access Declined"); - }, - ); - } - - void appointmentCancelledWarning() { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "Appointment Canelled"); - }, - ); - } - - void expiredAccessWarning() { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "Expired Access"); - }, - ); - } - @override void dispose() { daysExtensionController.dispose(); diff --git a/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart b/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart index 45f093da..4bf45ca9 100644 --- a/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart +++ b/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart @@ -1,11 +1,13 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/calendar/package_tools/appointments.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:provider/provider.dart'; class MzansiCalendar extends StatefulWidget { @@ -18,16 +20,50 @@ class MzansiCalendar extends StatefulWidget { } class _MzansiCalendarState extends State { + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + setState(() { + _isLoadingInitialData = false; + }); + } + + @override + void initState() { + super.initState(); + _loadInitialData(); + } + @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: context.watch().toolIndex, - onIndexChange: (newIndex) { - context.read().setToolIndex(newIndex); + return Consumer( + builder: (BuildContext context, MihCalendarProvider calendarProvider, + Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: calendarProvider.toolIndex, + onIndexChange: (newIndex) { + calendarProvider.setToolIndex(newIndex); + }, + ); }, ); } 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 index 545aac53..93c1b680 100644 --- a/Frontend/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart +++ b/Frontend/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart @@ -1,7 +1,7 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart b/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart index 26e3b59a..3a81d8df 100644 --- a/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart +++ b/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart @@ -2,27 +2,25 @@ import 'package:flutter/material.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_calendar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_calendar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_date_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_time_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/appointment.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_date_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_time_field.dart'; +import 'package:mzansi_innovation_hub/mih_objects/appointment.dart'; import 'package:mzansi_innovation_hub/mih_packages/calendar/builder/build_appointment_list.dart'; import 'package:provider/provider.dart'; @@ -213,7 +211,7 @@ class _PatientAccessRequestState extends State { addAppointmentCall( mzansiProfileProvider, mihCalendarProvider); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -302,87 +300,45 @@ class _PatientAccessRequestState extends State { ); } } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } checkforchange(); } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - setState(() { - _appointmentDateController.clear(); - _appointmentTimeController.clear(); - _appointmentTitleController.clear(); - _appointmentDescriptionIDController.clear(); - }); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + setState(() { + _appointmentDateController.clear(); + _appointmentTimeController.clear(); + _appointmentTitleController.clear(); + _appointmentDescriptionIDController.clear(); + }); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } diff --git a/Frontend/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart b/Frontend/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart index e8854ebb..1e9e0397 100644 --- a/Frontend/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart +++ b/Frontend/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart'; class MihAuthForgotPassword extends StatefulWidget { @@ -20,6 +20,7 @@ class _MihAuthForgotPasswordState extends State { return MihPackage( appActionButton: getAction(), appTools: getTools(), + appToolTitles: ["Forgot Password"], appBody: getToolBody(), selectedbodyIndex: _selcetedIndex, onIndexChange: (newValue) { diff --git a/Frontend/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart b/Frontend/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart index 76cd7b4a..1e22987d 100644 --- a/Frontend/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart +++ b/Frontend/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/package_tools/mih_reset_password.dart'; class MihAuthPasswordReset extends StatefulWidget { @@ -26,6 +26,7 @@ class _MihAuthPasswordResetState extends State { appActionButton: getAction(), appTools: getTools(), appBody: getToolBody(), + appToolTitles: ["Reset Password"], selectedbodyIndex: _selcetedIndex, onIndexChange: (newValue) { setState(() { diff --git a/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart b/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart index 3511ed90..2a3407a7 100644 --- a/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart +++ b/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_authentication_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_authentication_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/package_tools/mih_register.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/package_tools/mih_sign_in.dart'; import 'package:provider/provider.dart'; @@ -23,6 +23,7 @@ class _MihAuthenticationState extends State { appActionButton: getAction(), appTools: getTools(), appBody: getToolBody(), + appToolTitles: getToolTitle(), selectedbodyIndex: context.watch().toolIndex, onIndexChange: (newIndex) { context.read().setToolIndex(newIndex); @@ -35,6 +36,14 @@ class _MihAuthenticationState extends State { return toolBodies; } + List getToolTitle() { + List toolTitles = [ + "Sign In", + "Create an Account", + ]; + return toolTitles; + } + MihPackageTools getTools() { Map temp = {}; temp[const Icon(Icons.perm_identity)] = () { diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart index d6b7c970..a19f11f5 100644 --- a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart +++ b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart @@ -2,13 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_authentication_services.dart'; @@ -50,132 +48,69 @@ class _MihForgotPasswordState extends State { } void prePassResteWarning() { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_amber_rounded, - size: 100, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Password Reset Confirmation", - alertBody: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 25.0), - child: Text( - "Before you reset your password, please be aware that you'll receive an email with a link to confirm your identity and set a new password. Make sure to check your inbox, including spam or junk folders. If you don't receive the email within a few minutes, please try resending the reset request.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15.0, - fontWeight: FontWeight.bold, - ), - ), - ), - const SizedBox(height: 25), - MihButton( - onPressed: () { - setState(() { - acceptWarning = true; - }); - Navigator.of(context).pop(); - validateInput(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Continue", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - alertColour: MihColors.getSecondaryColor( + MihAlertServices().successAdvancedAlert( + "Password Reset Confirmation", + "Before you reset your password, please be aware that you'll receive an email with a link to confirm your identity and set a new password. Make sure to check your inbox, including spam or junk folders. If you don't receive the email within a few minutes, please try resending the reset request.", + [ + MihButton( + onPressed: () { + setState(() { + acceptWarning = true; + }); + context.pop(); + validateInput(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + width: 300, + child: Text( + "Continue", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } void resetLinkSentSuccessfully() { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Successfully Sent Reset Link", - alertBody: Column( - children: [ - Text( - "We've sent a password reset link to your email address. Please check your inbox, including spam or junk folders.\n\nOnce you find the email, click on the link to reset your password.\n\nIf you don't receive the email within a few minutes, please try resending the reset request.\n\nThe reset link will expire after 2 hours", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.goNamed( - 'mihHome', - extra: true, - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + "Successfully Sent Reset Link", + "We've sent a password reset link to your email address. Please check your inbox, including spam or junk folders.\n\nOnce you find the email, click on the link to reset your password.\n\nIf you don't receive the email within a few minutes, please try resending the reset request.\n\nThe reset link will expire after 2 hours", + [ + MihButton( + onPressed: () { + context.goNamed( + 'mihHome', + extra: true, + ); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return const MIHSuccessMessage( - // successType: "Success", - // successMessage: - // "We've sent a password reset link to your email address. Please check your inbox, including spam or junk folders.\n\nOnce you find the email, click on the link to reset your password.\n\nIf you don't receive the email within a few minutes, please try resending the reset request.\n\nThe reset link will expire after 2 hours"); - }, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } void validateInput() async { if (emailController.text.isEmpty) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } else { await submitPasswodReset(); if (successfulForgotPassword) { @@ -264,7 +199,7 @@ class _MihForgotPasswordState extends State { if (_formKey.currentState!.validate()) { prePassResteWarning(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_register.dart b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_register.dart index f16c6ef0..ba9ce004 100644 --- a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_register.dart +++ b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_register.dart @@ -3,16 +3,14 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_authentication_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_authentication_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; @@ -78,9 +76,9 @@ class _MihRegisterState extends State { Future signUserUp() async { context.read().reset(); if (!validEmail()) { - emailError(); + MihAlertServices().invalidEmailAlert(context); } else if (passwordController.text != confirmPasswordController.text) { - passwordError(); + MihAlertServices().passwordMatchAlert(context); } else { //var _backgroundColor = Colors.transparent; showDialog( @@ -100,7 +98,7 @@ class _MihRegisterState extends State { var userExists = jsonDecode(response.body); if (userExists["exists"]) { Navigator.of(context).pop(); - signUpError(); + MihAlertServices().emailExistsAlert(context); } else { var response2 = await http.post( Uri.parse("$baseAPI/auth/signup"), @@ -127,10 +125,10 @@ class _MihRegisterState extends State { //print("Here1"); } else if (userCreated["status"] == "FIELD_ERROR") { Navigator.of(context).pop(); - passwordReqError(); + MihAlertServices().passwordRequirementAlert(context); } else { Navigator.of(context).pop(); - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } } @@ -156,74 +154,29 @@ class _MihRegisterState extends State { } void loginError(error) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_amber_rounded, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 100, - ), - alertTitle: "Error While Signing Up", - alertBody: Text( - "An error occurred while signing up. Please try again later.", + MihAlertServices().errorAdvancedAlert( + "Sign Up Error", + "An error occurred while signing up: $error Please try again later.", + [ + MihButton( + onPressed: () { + Navigator.of(context).pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 200, + child: Text( + "Dismiss", style: TextStyle( - color: MihColors.getSecondaryColor( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), fontSize: 18, + fontWeight: FontWeight.bold, ), ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); - } - - void emailError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Invalid Email"); - }, - ); - } - - void signUpError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "User Exists"); - }, - ); - } - - void passwordError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Password Match"); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - - void passwordReqError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Password Requirements"); - }, + ), + ], + context, ); } @@ -246,7 +199,7 @@ class _MihRegisterState extends State { if (_formKey.currentState!.validate()) { submitFormInput(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } } }, @@ -348,8 +301,7 @@ class _MihRegisterState extends State { if (_formKey.currentState!.validate()) { submitFormInput(); } else { - MihAlertServices() - .formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_reset_password.dart b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_reset_password.dart index 307292a8..eb776b02 100644 --- a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_reset_password.dart +++ b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_reset_password.dart @@ -2,13 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_authentication_services.dart'; @@ -33,7 +31,7 @@ class _MihResetPasswordState extends State { void submitFormInput() async { if (passwordController.text != confirmPasswordController.text) { - passwordError(); + MihAlertServices().passwordMatchAlert(context); } else { showDialog( context: context, @@ -47,87 +45,39 @@ class _MihResetPasswordState extends State { if (successfulResetPassword) { resetSuccessfully(); } else { - loginError(); + MihAlertServices().internetConnectionAlert(context); } } } void resetSuccessfully() { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Successfully Reset Password", - alertBody: Column( - children: [ - Text( - "Great news! Your password reset is complete. You can now log in to Mzansi Innovation Hub using your new password.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.goNamed( - 'mihHome', - extra: true, - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + "Successfully Reset Password", + "Great news! Your password reset is complete. You can now log in to Mzansi Innovation Hub using your new password.", + [ + MihButton( + onPressed: () { + context.goNamed( + 'mihHome', + extra: true, + ); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return const MIHSuccessMessage( - // successType: "Success", - // successMessage: - // "We've sent a password reset link to your email address. Please check your inbox, including spam or junk folders.\n\nOnce you find the email, click on the link to reset your password.\n\nIf you don't receive the email within a few minutes, please try resending the reset request.\n\nThe reset link will expire after 2 hours"); - }, - ); - } - - void loginError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Invalid Credentials"); - }, - ); - } - - void passwordError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Password Match"); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -150,7 +100,7 @@ class _MihResetPasswordState extends State { if (_formKey.currentState!.validate()) { submitFormInput(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } } }, @@ -165,7 +115,7 @@ class _MihResetPasswordState extends State { child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text("Token: ${widget.token}"), // For testing purposes only + // Text("Token: ${widget.token}"), // For testing purposes only //logo Icon( Icons.lock, @@ -235,7 +185,7 @@ class _MihResetPasswordState extends State { if (_formKey.currentState!.validate()) { submitFormInput(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart index 68751125..7de9afe2 100644 --- a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart +++ b/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart @@ -2,15 +2,14 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_authentication_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_authentication_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; @@ -36,7 +35,7 @@ class _MihSignInState extends State { bool successfulSignIn = false; bool showProfiles = false; final baseAPI = AppEnviroment.baseApiUrl; - late List sandboxProfileList = []; + late List sandboxProfileList = []; //sign user in Future signUserIn() async { @@ -48,12 +47,12 @@ class _MihSignInState extends State { context, ); if (!successfulSignIn) { - loginError(); + MihAlertServices().loginErrorAlert(context); passwordController.clear(); } } on Exception { Navigator.of(context).pop(); - loginError(); + MihAlertServices().internetConnectionAlert(context); passwordController.clear(); } } @@ -68,8 +67,8 @@ class _MihSignInState extends State { } } - void setSandboxProfiles(List tileList) { - tileList.add(MIHTile( + void setSandboxProfiles(List tileList) { + tileList.add(MihPackageTile( onTap: () { setState(() { emailController.text = "testpatient@mzansi-innovation-hub.co.za"; @@ -78,19 +77,21 @@ class _MihSignInState extends State { if (_formKey.currentState!.validate()) { submitSignInForm(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, - tileName: "Patient", - tileIcon: Icon( + appName: "Patient", + appIcon: Icon( Icons.perm_identity_rounded, - color: getSec(), + color: getPrim(), size: 200, ), - p: getPrim(), - s: getSec(), + iconSize: 200, + primaryColor: getPrim(), + secondaryColor: getSec(), + authenticateUser: false, )); - tileList.add(MIHTile( + tileList.add(MihPackageTile( onTap: () { setState(() { emailController.text = "testdoctor@mzansi-innovation-hub.co.za"; @@ -99,20 +100,22 @@ class _MihSignInState extends State { if (_formKey.currentState!.validate()) { submitSignInForm(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, - tileName: "Doctor", - tileIcon: Icon( + appName: "Doctor", + appIcon: Icon( Icons.medical_services, - color: getSec(), + color: getPrim(), size: 200, ), - p: getPrim(), - s: getSec(), + iconSize: 200, + primaryColor: getPrim(), + secondaryColor: getSec(), + authenticateUser: false, )); //if (AppEnviroment.getEnv() == "Dev") { - tileList.add(MIHTile( + tileList.add(MihPackageTile( onTap: () { setState(() { emailController.text = "test-business@mzansi-innovation-hub.co.za"; @@ -121,19 +124,21 @@ class _MihSignInState extends State { if (_formKey.currentState!.validate()) { submitSignInForm(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, - tileName: "Business", - tileIcon: Icon( + appName: "Business", + appIcon: Icon( Icons.business, - color: getSec(), + color: getPrim(), size: 200, ), - p: getPrim(), - s: getSec(), + iconSize: 200, + primaryColor: getPrim(), + secondaryColor: getSec(), + authenticateUser: false, )); - tileList.add(MIHTile( + tileList.add(MihPackageTile( onTap: () { setState(() { emailController.text = "test@mzansi-innovation-hub.co.za"; @@ -142,17 +147,19 @@ class _MihSignInState extends State { if (_formKey.currentState!.validate()) { submitSignInForm(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, - tileName: "Test", - tileIcon: Icon( + appName: "Test", + appIcon: Icon( Icons.warning_amber_rounded, - color: getSec(), + color: getPrim(), size: 200, ), - p: getPrim(), - s: getSec(), + iconSize: 200, + primaryColor: getPrim(), + secondaryColor: getSec(), + authenticateUser: false, )); //} } @@ -167,15 +174,6 @@ class _MihSignInState extends State { MzansiInnovationHub.of(context)!.theme.mode == "Dark"); } - void loginError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Invalid Credentials"); - }, - ); - } - @override void initState() { super.initState(); @@ -203,7 +201,7 @@ class _MihSignInState extends State { if (_formKey.currentState!.validate()) { submitSignInForm(); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } } }, @@ -361,8 +359,7 @@ class _MihSignInState extends State { if (_formKey.currentState!.validate()) { submitSignInForm(); } else { - MihAlertServices() - .formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_components/mih_layout/mih_print_prevew.dart b/Frontend/lib/mih_packages/mih_file_viewer/components/mih_print_prevew.dart similarity index 77% rename from Frontend/lib/mih_components/mih_layout/mih_print_prevew.dart rename to Frontend/lib/mih_packages/mih_file_viewer/components/mih_print_prevew.dart index 1b76eae7..4b241eae 100644 --- a/Frontend/lib/mih_components/mih_layout/mih_print_prevew.dart +++ b/Frontend/lib/mih_packages/mih_file_viewer/components/mih_print_prevew.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; import 'package:pdf/pdf.dart'; import 'package:printing/printing.dart'; -import '../mih_pop_up_messages/mih_loading_circle.dart'; -import 'mih_action.dart'; +import '../../../mih_package_components/mih_loading_circle.dart'; class MIHPrintPreview extends StatefulWidget { final PrintPreviewArguments arguments; @@ -17,8 +17,8 @@ class MIHPrintPreview extends StatefulWidget { } class _MIHPrintPreviewState extends State { - MIHAction getActionButton() { - return MIHAction( + MihPackageAction getActionButton() { + return MihPackageAction( icon: const Icon( Icons.close, ), diff --git a/Frontend/lib/mih_packages/mih_file_viewer/mih_fle_viewer.dart b/Frontend/lib/mih_packages/mih_file_viewer/mih_fle_viewer.dart new file mode 100644 index 00000000..5432ca7a --- /dev/null +++ b/Frontend/lib/mih_packages/mih_file_viewer/mih_fle_viewer.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_file_viewer_provider.dart'; +import 'package:mzansi_innovation_hub/mih_packages/mih_file_viewer/package_tools/mih_expanded_file_view.dart'; +import 'package:provider/provider.dart'; + +class MihFleViewer extends StatefulWidget { + const MihFleViewer({super.key}); + + @override + State createState() => _MihFleViewerState(); +} + +class _MihFleViewerState extends State { + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, MihFileViewerProvider fileViewerProvider, + Widget? child) { + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: fileViewerProvider.toolIndex, + onIndexChange: (newIndex) { + fileViewerProvider.setToolIndex(newIndex); + }, + ); + }, + ); + } + + MihPackageAction getAction() { + return MihPackageAction( + icon: const Icon(Icons.fullscreen_exit), + iconSize: 35, + onTap: () { + context.pop(); + FocusScope.of(context).unfocus(); + }, + ); + } + + List getToolTitle() { + List toolTitles = [ + "File Viewer", + ]; + return toolTitles; + } + + MihPackageTools getTools() { + Map temp = {}; + temp[const Icon(Icons.file_present)] = () { + context.read().setToolIndex(0); + }; + return MihPackageTools( + tools: temp, + selcetedIndex: context.watch().toolIndex, + ); + } + + List getToolBody() { + List toolBodies = [ + MihExpandedFileView(), + ]; + return toolBodies; + } +} diff --git a/Frontend/lib/mih_packages/mih_file_viewer/package_tools/mih_expanded_file_view.dart b/Frontend/lib/mih_packages/mih_file_viewer/package_tools/mih_expanded_file_view.dart new file mode 100644 index 00000000..d1fcdb70 --- /dev/null +++ b/Frontend/lib/mih_packages/mih_file_viewer/package_tools/mih_expanded_file_view.dart @@ -0,0 +1,271 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_file_viewer_provider.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:provider/provider.dart'; +import 'package:syncfusion_flutter_core/theme.dart'; +import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; +import "package:universal_html/html.dart" as html; +import 'package:fl_downloader/fl_downloader.dart'; + +class MihExpandedFileView extends StatefulWidget { + const MihExpandedFileView({super.key}); + + @override + State createState() => _MihExpandedFileViewState(); +} + +class _MihExpandedFileViewState extends State { + late PdfViewerController pdfViewerController = PdfViewerController(); + int currentPageCount = 0; + int currentPage = 0; + double startZoomLevel = 1.0; + double zoomOut = 0; + int progress = 0; + late StreamSubscription progressStream; + + void nativeFileDownload(String fileLink) async { + var permission = await FlDownloader.requestPermission(); + if (permission == StoragePermissionStatus.granted) { + try { + showDialog( + context: context, + builder: (context) { + return const Mihloadingcircle(); + }, + ); + await FlDownloader.download(fileLink); + Navigator.of(context).pop(); + } on Exception catch (error) { + Navigator.of(context).pop(); + print(error); + } + } else { + print("denied"); + } + } + + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.sizeOf(context); + double width = size.width; + double height = size.height; + return MihPackageToolBody( + borderOn: false, + bodyItem: getBody(width, height), + ); + } + + Widget getBody(double width, double height) { + return Consumer( + builder: (BuildContext context, MihFileViewerProvider fileViewerProvider, + Widget? child) { + bool isPDF = + fileViewerProvider.filePath.split(".").last.toLowerCase() == "pdf"; + return Stack( + children: [ + fileViewerProvider.filePath.split(".").last.toLowerCase() == "pdf" + ? SizedBox( + width: width - zoomOut, + height: height - 70, + child: SfPdfViewerTheme( + data: SfPdfViewerThemeData( + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + child: SfPdfViewer.network( + fileViewerProvider.fileLink, + controller: pdfViewerController, + initialZoomLevel: startZoomLevel, + pageSpacing: 2, + maxZoomLevel: 5, + interactionMode: PdfInteractionMode.pan, + onDocumentLoaded: (details) { + setState(() { + currentPage = pdfViewerController.pageNumber; + currentPageCount = pdfViewerController.pageCount; + }); + }, + ), + ), + ) + : SizedBox( + width: width, + height: height - 70, + child: InteractiveViewer( + maxScale: 5.0, + //minScale: 0., + child: Image.network(fileViewerProvider.fileLink), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 20.0), + child: Align( + alignment: Alignment.bottomCenter, + child: Material( + elevation: 10, + shadowColor: Colors.black, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25.0), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25.0), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + if (isPDF) + IconButton( + iconSize: 30, + padding: const EdgeInsets.all(0), + onPressed: () { + pdfViewerController.previousPage(); + //print(pdfViewerController.); + //if (pdfViewerController.pageNumber > 1) { + setState(() { + currentPage = pdfViewerController.pageNumber; + }); + // } + }, + icon: Icon( + Icons.arrow_back, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + if (isPDF) + Text( + "$currentPage / $currentPageCount", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + if (isPDF) + IconButton( + iconSize: 30, + padding: const EdgeInsets.all(0), + onPressed: () { + pdfViewerController.nextPage(); + //print(pdfViewerController.pageNumber); + //if (pdfViewerController.pageNumber < currentPageCount) { + setState(() { + currentPage = pdfViewerController.pageNumber; + }); + //} + }, + icon: Icon( + Icons.arrow_forward, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + if (isPDF) + IconButton( + iconSize: 30, + padding: const EdgeInsets.all(0), + onPressed: () { + if (zoomOut > 0) { + setState(() { + zoomOut = zoomOut - 100; + }); + } else { + setState(() { + pdfViewerController.zoomLevel = + startZoomLevel + 0.25; + startZoomLevel = + pdfViewerController.zoomLevel; + }); + } + }, + icon: Icon( + Icons.zoom_in, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + if (isPDF) + IconButton( + iconSize: 30, + padding: const EdgeInsets.all(0), + onPressed: () { + if (pdfViewerController.zoomLevel > 1) { + setState(() { + pdfViewerController.zoomLevel = + startZoomLevel - 0.25; + startZoomLevel = + pdfViewerController.zoomLevel; + }); + } else { + if (zoomOut < (width - 100)) { + setState(() { + zoomOut = zoomOut + 100; + }); + } + } + }, + icon: Icon( + Icons.zoom_out, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + // IconButton( + // iconSize: 30, + // padding: const EdgeInsets.all(0), + // onPressed: () { + // printDocument(); + // }, + // icon: Icon( + // Icons.print, + // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + // ), + // ), + IconButton( + iconSize: 30, + padding: const EdgeInsets.all(0), + onPressed: () { + if (kIsWeb) { + html.window.open( + fileViewerProvider.fileLink, 'download'); + } else { + nativeFileDownload( + fileViewerProvider.fileLink, + ); + } + }, + icon: Icon( + Icons.download, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ], + ), + ), + ), + ), + ), + ], + ); + }, + ); + } +} diff --git a/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart b/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart index 6a0e9f27..45a0e89f 100644 --- a/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart +++ b/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart @@ -1,19 +1,19 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/about_mih_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_access_controlls_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_authentication_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calculator_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_ai_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/about_mih_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_access_controlls_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_authentication_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_banner_ad_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calculator_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_ai_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; import '../../../main.dart'; diff --git a/Frontend/lib/mih_packages/mih_home/mih_home.dart b/Frontend/lib/mih_packages/mih_home/mih_home.dart index 877057e6..554224f8 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_home.dart +++ b/Frontend/lib/mih_packages/mih_home/mih_home.dart @@ -1,32 +1,28 @@ import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/user_consent.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_scack_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/about_mih_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.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/user_consent.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_scack_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/about_mih_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.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:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_my_business_user_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_user_consent_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; import 'package:provider/provider.dart'; class MihHome extends StatefulWidget { @@ -44,71 +40,17 @@ class _MihHomeState extends State { bool _isLoadingInitialData = true; Future _loadInitialData() async { - if (mounted) { - setState(() { - _isLoadingInitialData = true; - }); - } + setState(() { + _isLoadingInitialData = true; + }); MzansiProfileProvider mzansiProfileProvider = context.read(); - // Note: getUserData sets user and userProfilePicUrl in the provider - if (mzansiProfileProvider.user == null) { - await getUserData(); - } - // Note: getUserConsentStatus sets userConsent in the provider - if (mzansiProfileProvider.userConsent == null) { - await getUserConsentStatus(); - } - // 1. Get Business Data - if (mzansiProfileProvider.user != null && - mzansiProfileProvider.user!.type == "business" && - mzansiProfileProvider.business == null) { - KenLogger.success(mzansiProfileProvider.business == null - ? "Business is null, fetching business data..." - : "Business data already loaded."); - await getBusinessData(); - } - // 2. Set state after all data is loaded - if (mounted) { - setState(() { - _isLoadingInitialData = false; - }); - } - } - - Future getBusinessData() async { - AppUser? user = context.read().user; - String logoUrl; - String signatureUrl; - Business? responseBusiness = - await MihBusinessDetailsServices().getBusinessDetailsByUser(context); - // if (responseBusiness == null && user!.type == "business") { - // if (mounted) { - // context.goNamed( - // 'businessProfileSetup', - // extra: user, - // ); - // } - // } - - if (responseBusiness != null && user!.type == "business") { - // Get Business - // Business Profile Set Up aleary - logoUrl = await MihFileApi.getMinioFileUrl( - context.read().business!.logo_path, - context, - ); - context.read().setBusinessProfilePicUrl(logoUrl); - // Get Business User - await MihMyBusinessUserServices().getBusinessUser(context); - signatureUrl = await MihFileApi.getMinioFileUrl( - context.read().businessUser!.sig_path, - context, - ); - context - .read() - .setBusinessUserSignatureUrl(signatureUrl); - } + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); + setState(() { + _isLoadingInitialData = false; + }); } bool showPolicyWindow(UserConsent? userConsent) { @@ -177,23 +119,139 @@ class _MihHomeState extends State { }); } - Future getUserData() async { - if (!mounted) return; - String url; - await MihUserServices().getUserDetails( - context, + Widget displayConsentWindow(MzansiProfileProvider mzansiProfileProvider) { + return Container( + color: Colors.black.withValues(alpha: 0.5), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + windowBody: Column( + children: [ + Icon( + Icons.policy, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark", + ), + ), + const SizedBox(height: 10), + Text( + "Welcome to the MIH App", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark", + ), + fontSize: 30, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 10), + Text( + "To keep using the MIH app, please take a moment to review and accept our Policies. Our agreements helps us keep things running smoothly and securely.", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark", + ), + fontSize: 18, + fontWeight: FontWeight.normal, + ), + ), + const SizedBox(height: 20), + Center( + child: Wrap( + alignment: WrapAlignment.center, + spacing: 10, + runSpacing: 10, + children: [ + MihButton( + onPressed: () { + WidgetsBinding.instance + .addPostFrameCallback((_) async { + context.read().setToolIndex(1); + }); + context.goNamed("aboutMih", + extra: mzansiProfileProvider.personalHome); + }, + buttonColor: MihColors.getOrangeColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + elevation: 10, + width: 300, + child: Text( + "Privacy Policy", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + WidgetsBinding.instance + .addPostFrameCallback((_) async { + context.read().setToolIndex(2); + }); + context.goNamed("aboutMih", + extra: mzansiProfileProvider.personalHome); + }, + buttonColor: MihColors.getYellowColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + elevation: 10, + width: 300, + child: Text( + "Terms of Service", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + DateTime now = DateTime.now(); + KenLogger.success("Date Time Now: $now"); + createOrUpdateAccpetance(mzansiProfileProvider); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + elevation: 10, + width: 300, + child: Text( + "Accept", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + const SizedBox(height: 10), + ], + ), + ), + ], + ), ); - if (!mounted) return; - url = await MihFileApi.getMinioFileUrl( - context.read().user!.pro_pic_path, - context, - ); - context.read().setUserProfilePicUrl(url); - } - - Future getUserConsentStatus() async { - if (!mounted) return; - await MihUserConsentServices().getUserConsentStatus(context); } @override @@ -255,200 +313,8 @@ class _MihHomeState extends State { ), ), ), - Visibility( - visible: showPolicyWindow(mzansiProfileProvider.userConsent), - child: Container( - color: Colors.black.withValues(alpha: 0.5), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - MihPackageWindow( - fullscreen: false, - windowTitle: "Privacy Policy & Terms Of Service Alert!", - onWindowTapClose: () { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_amber_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark", - ), - ), - alertTitle: - "Oops, Looks like you missed a step!", - alertBody: Text( - "We're excited for you to keep using the MIH app! Before you do, please take a moment to accept our Privacy Policy and Terms of Service. Thanks for helping us keep your experience great!", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark", - ), - fontSize: 15, - fontWeight: FontWeight.normal, - ), - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark", - ), - ); - }); - }, - windowBody: Column( - children: [ - Icon( - Icons.policy, - size: 150, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark", - ), - ), - const SizedBox(height: 10), - Text( - "Welcome to the MIH App", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark", - ), - fontSize: 30, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "To keep using the MIH app, please take a moment to review and accept our Policies. Our agreements helps us keep things running smoothly and securely.", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark", - ), - fontSize: 15, - fontWeight: FontWeight.normal, - ), - ), - const SizedBox(height: 20), - Center( - child: Wrap( - alignment: WrapAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - WidgetsBinding.instance - .addPostFrameCallback((_) async { - context - .read() - .setToolIndex(1); - }); - context.goNamed("aboutMih", - extra: - mzansiProfileProvider.personalHome); - }, - buttonColor: MihColors.getOrangeColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - elevation: 10, - width: 300, - child: Text( - "Privacy Policy", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - onPressed: () { - WidgetsBinding.instance - .addPostFrameCallback((_) async { - context - .read() - .setToolIndex(2); - }); - context.goNamed("aboutMih", - extra: - mzansiProfileProvider.personalHome); - }, - buttonColor: MihColors.getYellowColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - elevation: 10, - width: 300, - child: Text( - "Terms of Service", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - onPressed: () { - DateTime now = DateTime.now(); - KenLogger.success("Date Time Now: $now"); - createOrUpdateAccpetance( - mzansiProfileProvider); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - elevation: 10, - width: 300, - child: Text( - "Accept", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - const SizedBox(height: 10), - ], - ), - ), - ], - ), - ), - ), + if (showPolicyWindow(mzansiProfileProvider.userConsent)) + displayConsentWindow(mzansiProfileProvider), ], ); }, diff --git a/Frontend/lib/mih_packages/mih_home/mih_home_error.dart b/Frontend/lib/mih_packages/mih_home/mih_home_error.dart index e1a293a7..05f05368 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_home_error.dart +++ b/Frontend/lib/mih_packages/mih_home/mih_home_error.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MihHomeError extends StatefulWidget { @@ -27,6 +27,7 @@ class _MihHomeErrorState extends State { return MihPackage( appActionButton: getErrorAction(), appTools: getErrorTools(), + appToolTitles: ["Connection Error"], appBody: getErrorToolBody(widget.errorMessage), selectedbodyIndex: _selcetedIndex, onIndexChange: (newValue) { diff --git a/Frontend/lib/mih_packages/mih_home/mih_route_error.dart b/Frontend/lib/mih_packages/mih_home/mih_route_error.dart index 5805758f..51a541c6 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_route_error.dart +++ b/Frontend/lib/mih_packages/mih_home/mih_route_error.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MihRouteError extends StatefulWidget { @@ -26,6 +26,7 @@ class _MihRouteErrorState extends State { return MihPackage( appActionButton: getErrorAction(), appTools: getErrorTools(), + appToolTitles: ["Invalid Path"], appBody: getErrorToolBody(), selectedbodyIndex: _selcetedIndex, onIndexChange: (newValue) { diff --git a/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart b/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart index e1a421ed..b14199e4 100644 --- a/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart +++ b/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart @@ -1,12 +1,12 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_ai_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_ai_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.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'; @@ -227,6 +227,7 @@ class _MihBusinessHomeState extends State hintColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), onPrefixIconTap: () { + mzansiAiProvider.ollamaProvider.resetChat(); if (searchController.text.isNotEmpty) { mzansiAiProvider .setStartUpQuestion(searchController.text); diff --git a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart index 1c3789ed..b8249ce9 100644 --- a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart +++ b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart @@ -1,15 +1,15 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/Example/package_tiles/test_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_ai_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/Example/package_tiles/test_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.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_providers/mzansi_ai_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.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'; @@ -286,6 +286,7 @@ class _MihPersonalHomeState extends State hintColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), onPrefixIconTap: () { + mzansiAiProvider.ollamaProvider.resetChat(); if (searchController.text.isNotEmpty) { mzansiAiProvider .setStartUpQuestion(searchController.text); diff --git a/Frontend/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart b/Frontend/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart index 07b36218..9feb86c2 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart b/Frontend/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart index 58dc3b23..44d64644 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart b/Frontend/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart index e2c4feb2..4bd48355 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:redacted/redacted.dart'; diff --git a/Frontend/lib/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart b/Frontend/lib/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart index 3ec5092e..5e2ed861 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mine_sweeper/components/mine_tile.dart b/Frontend/lib/mih_packages/mine_sweeper/components/mine_tile.dart index f6e653d8..d7d00a44 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/components/mine_tile.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/components/mine_tile.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/components/board_square.dart'; diff --git a/Frontend/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart b/Frontend/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart index ef545c7a..ec066b30 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart @@ -1,15 +1,18 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_banner_ad_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/package_tools/my_score_board.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:provider/provider.dart'; class MihMineSweeper extends StatefulWidget { @@ -20,24 +23,52 @@ class MihMineSweeper extends StatefulWidget { } class _MihMineSweeperState extends State { - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - context.read().loadBannerAd(); + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + MihBannerAdProvider bannerAdProvider = context.read(); + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + bannerAdProvider.loadBannerAd(); + setState(() { + _isLoadingInitialData = false; }); } + @override + void initState() { + super.initState(); + _loadInitialData(); + } + @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appToolTitles: getToolTitle(), - appBody: getToolBody(), - selectedbodyIndex: context.watch().toolIndex, - onIndexChange: (newIndex) { - context.read().setToolIndex(newIndex); + return Consumer( + builder: + (BuildContext context, MihMineSweeperProvider value, Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appToolTitles: getToolTitle(), + appBody: getToolBody(), + selectedbodyIndex: context.watch().toolIndex, + onIndexChange: (newIndex) { + context.read().setToolIndex(newIndex); + }, + ); }, ); } diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart b/Frontend/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart index 9654cfcb..1c15c4e9 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MihMineSweeperTile extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart b/Frontend/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart index b7f62cab..0293fd0a 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; @@ -24,7 +24,7 @@ class MihMineSweeperLeaderBoard extends StatefulWidget { class _MihMineSweeperLeaderBoardState extends State { TextEditingController filterController = TextEditingController(); - + bool isLoading = true; Future initialiseLeaderboard() async { MihMineSweeperProvider mineSweeperProvider = context.read(); @@ -34,15 +34,21 @@ class _MihMineSweeperLeaderBoardState extends State { List?> userPictures = []; String userPicUrl = ""; for (final ranking in mineSweeperProvider.leaderboard!) { - userPicUrl = await MihFileApi.getMinioFileUrl(ranking.proPicUrl, context); + userPicUrl = await MihFileApi.getMinioFileUrl(ranking.proPicUrl); userPictures.add(NetworkImage(userPicUrl)); } mineSweeperProvider.setLeaderboardUserPictures( leaderboardUserPictures: userPictures); + setState(() { + isLoading = false; + }); } void refreshLeaderBoard( MihMineSweeperProvider mineSweeperProvider, String difficulty) { + setState(() { + isLoading = true; + }); mineSweeperProvider.setDifficulty(difficulty); mineSweeperProvider.setLeaderboard(leaderboard: null); mineSweeperProvider.setMyScoreboard(myScoreboard: null); @@ -80,7 +86,7 @@ class _MihMineSweeperLeaderBoardState extends State { return Consumer( builder: (BuildContext context, MihMineSweeperProvider mineSweeperProvider, Widget? child) { - if (mineSweeperProvider.leaderboard == null) { + if (isLoading) { return Center( child: Mihloadingcircle(), ); @@ -121,7 +127,7 @@ class _MihMineSweeperLeaderBoardState extends State { ), ), const SizedBox(height: 10), - mineSweeperProvider.leaderboard!.isEmpty + !isLoading && mineSweeperProvider.leaderboard!.isEmpty ? Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), child: Column( diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart b/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart index c701be22..b43ee2d1 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart @@ -5,16 +5,16 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_banner_ad.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/components/board_square.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart'; @@ -130,6 +130,7 @@ class _MineSweeperGameState extends State { // Intermediate - 10 * 15 & 23 bombs // Hard - 10 * 20 & 30 bombs showDialog( + barrierDismissible: false, context: context, builder: (context) { return MihMineSweeperStartGameWindow( @@ -252,99 +253,7 @@ class _MineSweeperGameState extends State { board[r][c].isOpened = true; isGameOver = true; // lose alert - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Padding( - padding: const EdgeInsets.all(8.0), - child: Icon( - FontAwesomeIcons.bomb, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 100, - ), - ), - alertTitle: "Better Luck Next Time", - alertBody: Column( - children: [ - Text( - "Your lost this game of MIH Minesweeper!!!", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - const SizedBox(height: 10), - Text( - "Please feel free to start a New Game or check out the Leader Board to find out who's the best in Mzansi.", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - const SizedBox(height: 20), - Wrap( - runAlignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - context.pop(); - showStartGameWindow(mihMineSweeperProvider); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Text( - "New Game", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - onPressed: () { - context.pop(); - mihMineSweeperProvider.setToolIndex(1); - }, - buttonColor: MihColors.getOrangeColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Text( - "Leader Board", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); + loseAlert(mihMineSweeperProvider); }); return; } @@ -384,111 +293,7 @@ class _MineSweeperGameState extends State { isGameWon = true; isGameOver = true; // win alert - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.celebration, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 100, - ), - alertTitle: "Congratulations", - alertBody: Column( - children: [ - Text( - "Your won this game of MIH Minesweeper!!!", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox(height: 10), - // Text( - // "You took ${_formatTime()} to complete the game on ${mihMineSweeperProvider.difficulty} mode.", - // style: TextStyle( - // fontSize: 15, - // color: MihColors.getSecondaryColor( - // MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // ), - // ), - // const SizedBox(height: 10), - Text( - "Time Taken: ${_formatTime().replaceAll("00:", "")}", - style: TextStyle( - fontSize: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox(height: 10), - Text( - "Score: ${calculateGameScore(mihMineSweeperProvider)}", - style: TextStyle( - fontSize: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox(height: 20), - Wrap( - runAlignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - context.pop(); - showStartGameWindow(mihMineSweeperProvider); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Text( - "New Game", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - onPressed: () { - context.pop(); - mihMineSweeperProvider.setToolIndex(1); - }, - buttonColor: MihColors.getOrangeColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Text( - "Leader Board", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ], - ), - alertColour: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); + winAlert(mihMineSweeperProvider); showDialog( context: context, builder: (context) { @@ -530,6 +335,264 @@ class _MineSweeperGameState extends State { } } + void loseAlert(MihMineSweeperProvider mihMineSweeperProvider) { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + return MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: Column( + children: [ + const SizedBox(height: 10), + Icon( + FontAwesomeIcons.bomb, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + size: 125, + ), + const SizedBox(height: 10), + Text( + "Better Luck Next Time", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Center( + child: Text( + "Your lost this game of MIH Minesweeper!!!", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "Please feel free to start a New Game or check out the Leader Board to find out who's the best in Mzansi.", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 18, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + const SizedBox(height: 20), + Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + spacing: 10, + runSpacing: 10, + children: [ + MihButton( + onPressed: () { + context.pop(); + showStartGameWindow(mihMineSweeperProvider); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "New Game", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "View Board", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + context.pop(); + mihMineSweeperProvider.setToolIndex(1); + }, + buttonColor: MihColors.getGoldColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Leader Board", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ], + ), + ); + }, + ); + } + + void winAlert(MihMineSweeperProvider mihMineSweeperProvider) { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + return MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + windowBody: Column( + children: [ + const SizedBox(height: 10), + Icon( + Icons.celebration, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + size: 150, + ), + const SizedBox(height: 10), + Text( + "Congratulations", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Text( + "Your won this game of MIH Minesweeper!!!", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + const SizedBox(height: 10), + Text( + "Time Taken: ${_formatTime().replaceAll("00:", "")}", + style: TextStyle( + fontSize: 20, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + const SizedBox(height: 10), + Text( + "Score: ${calculateGameScore(mihMineSweeperProvider)}", + style: TextStyle( + fontSize: 20, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + const SizedBox(height: 20), + Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + spacing: 10, + runSpacing: 10, + children: [ + MihButton( + onPressed: () { + context.pop(); + showStartGameWindow(mihMineSweeperProvider); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "New Game", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "View Board", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + mihMineSweeperProvider.setLeaderboard(leaderboard: null); + context.pop(); + mihMineSweeperProvider.setToolIndex(1); + }, + buttonColor: MihColors.getGoldColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Leader Board", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ], + ), + ); + }, + ); + } + @override void dispose() { _timer?.cancel(); diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart b/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart index 6e4144c0..939b7055 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MineSweeperQuickStartGuide extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart b/Frontend/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart index 7d8316b1..68bdefaa 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart +++ b/Frontend/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_minesweeper_services.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart b/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart index cea2fd78..2bb0fabf 100644 --- a/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart +++ b/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart @@ -1,10 +1,13 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_ai_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_ai_provider.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:provider/provider.dart'; class MzansiAi extends StatefulWidget { @@ -17,6 +20,53 @@ class MzansiAi extends StatefulWidget { } class _MzansiAiState extends State { + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + setState(() { + _isLoadingInitialData = false; + }); + } + + @override + void initState() { + super.initState(); + _loadInitialData(); + } + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, MzansiAiProvider value, Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: context.watch().toolIndex, + onIndexChange: (newValue) { + context.read().setToolIndex(newValue); + }, + ); + }, + ); + } + MihPackageAction getAction() { return MihPackageAction( icon: const Icon(Icons.arrow_back), @@ -36,10 +86,6 @@ class _MzansiAiState extends State { temp[const Icon(Icons.chat)] = () { context.read().setToolIndex(0); }; - // temp[const Icon(Icons.chat)] = () { - // context.read().setToolIndex(1); - // }; - return MihPackageTools( tools: temp, selcetedIndex: context.watch().toolIndex, @@ -48,7 +94,6 @@ class _MzansiAiState extends State { List getToolBody() { List toolBodies = [ - // AiChat(), MihAiChat(), ]; return toolBodies; @@ -57,27 +102,7 @@ class _MzansiAiState extends State { List getToolTitle() { List toolTitles = [ "Ask Mzansi", - // "New Chat", ]; return toolTitles; } - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: context.watch().toolIndex, - onIndexChange: (newValue) { - context.read().setToolIndex(newValue); - }, - ); - } } 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 index de331e7a..e2fbcb75 100644 --- 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 @@ -1,7 +1,7 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart b/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart deleted file mode 100644 index dd971442..00000000 --- a/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart +++ /dev/null @@ -1,896 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_ai_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_numeric_stepper.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_radio_options.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_chat_ui/flutter_chat_ui.dart'; -import 'package:flutter_chat_types/flutter_chat_types.dart' as types; -import 'package:flutter/services.dart' show rootBundle; -import 'package:flutter_tts/flutter_tts.dart'; -import 'package:ollama_dart/ollama_dart.dart' as ollama; -import 'package:provider/provider.dart'; -import 'package:uuid/uuid.dart'; - -class AiChat extends StatefulWidget { - const AiChat({ - super.key, - }); - - @override - State createState() => _AiChatState(); -} - -class _AiChatState extends State { - final TextEditingController _modelController = TextEditingController(); - final TextEditingController _fontSizeController = TextEditingController(); - final TextEditingController _ttsVoiceController = TextEditingController(); - final ValueNotifier _showModelOptions = ValueNotifier(false); - FlutterTts _flutterTts = FlutterTts(); - final ValueNotifier _ttsVoiceName = ValueNotifier(""); - // bool _ttsOn = false; - String? textStream; - List _voices = []; - List _voicesString = []; - List _messages = []; - late types.User _user; - late types.User _mihAI; - String systemPromt = "0"; - bool _aiThinking = false; - final client = ollama.OllamaClient( - baseUrl: "${AppEnviroment.baseAiUrl}/api", - ); - List _chatHistory = []; - double _chatFrontSize = 15; - - String getModel() { - return AppEnviroment.getEnv() == "Prod" ? 'gemma3n:e4b' : "gemma3:1b"; - } - - String setSystemPromt() { - String temp = ""; - temp += - "You are Mzansi AI, a helpful and friendly AI assistant running on the 'MIH App'.\n"; - temp += - "The MIH App was created by 'Mzansi Innovation Hub', a South African-based startup company."; - temp += - "Your primary purpose is to assist users by answering general questions and helping with creative writing tasks or any other task a user might have for you.\n"; - temp += - "Maintain a casual and friendly tone, but always remain professional.\n"; - temp += - "Strive for a balance between being empathetic and delivering factual information accurately.\n"; - temp += - "You may use lighthearted or playful language if the context is appropriate and enhances the user experience.\n"; - temp += "You operate within the knowledge domain of the 'MIH App'.\n"; - temp += "Here is a description of the MIH App and its features:\n"; - temp += - "MIH App Description: MIH is the first super app of Mzansi, designed to streamline both personal and business life. It's an all-in-one platform for managing professional profiles, teams, appointments, and quick calculations. \n"; - temp += "Key Features:\n"; - temp += - "- Mzansi Profile: Central hub for managing personal and business information, including business team details."; - temp += "- Mzansi Wallet: Digitally store loyalty cards.\n"; - temp += - "- Patient Manager (For Medical Practices): Seamless patient appointment scheduling and data management.\n"; - temp += - "- Mzansi AI: Your friendly AI assistant for quick answers and support (that's you!).\n"; - temp += - "- Mzansi Directory: A place to search and find out more about the people and businesses across Mzansi.\n"; - temp += - "- Calendar: Integrated calendar for managing personal and business appointments.\n"; - temp += - "- Calculator: Simple calculator with tip and forex calculation functionality.\n"; - temp += "- MIH Access: Manage and view profile access security.\n"; - temp += - "- MIH Minesweeper: The first game from MIH! It's the classic brain-teaser ready to entertain you no matter where you are.\n"; - temp += "**Core Rules and Guidelines:**\n"; - temp += - "- **Accuracy First:** Always prioritize providing correct information.\n"; - temp += - "- **Uncertainty Handling:** If you are unsure about an answer, politely respond with: 'Please bear with us as we are still learning and do not have all the answers.'\n"; - temp += - "- **Response Length:** Aim to keep responses under 250 words. If a more comprehensive answer is required, exceed this limit but offer to elaborate further (e.g., 'Would you like me to elaborate on this topic?').\n"; - temp += - "- **Language & Safety:** Never use offensive language or generate harmful content. If a user presses for information that is inappropriate or out of bounds, clearly state why you cannot provide it (e.g., 'I cannot assist with that request as it goes against my safety guidelines.').\n"; - temp += - "- **Out-of-Scope Questions:** - If a question is unclear, ask the user to rephrase or clarify it. - If a question is entirely out of your scope and you cannot provide a useful answer, admit you don't know. - If a user is unhappy with your response or needs further assistance beyond your capabilities, suggest they visit the 'Mzansi Innovation Hub Social Media Pages' for more direct support. Do not provide specific links, just refer to the pages generally.\n"; - temp += - "- **Target Audience:** Adapt your explanations to beginners and intermediate users, but be prepared for more complex questions from expert users. Ensure your language is clear and easy to understand.\n"; - return temp; - } - - void _addMessage(types.Message message) { - setState(() { - _messages.insert(0, message); - }); - } - - void _loadMessages() async { - final response = await rootBundle.loadString('assets/messages.json'); - final messages = (jsonDecode(response) as List) - .map((e) => types.Message.fromJson(e as Map)) - .toList(); - - setState(() { - _messages = messages; - }); - } - - void _handleSendPressed(types.PartialText message) { - FocusScope.of(context).unfocus(); - final textMessage = types.TextMessage( - author: _user, - createdAt: DateTime.now().millisecondsSinceEpoch, - id: const Uuid().v4(), - text: message.text, - ); - //Add user prompt to history - setState(() { - _chatHistory.add( - ollama.Message( - role: ollama.MessageRole.user, - content: message.text, - ), - ); - }); - - _addMessage(textMessage); - - _handleMessageBack(message.text); - } - - void _handleMessageBack(String userMessage) async { - showDialog( - context: context, - builder: (context) { - return const Mihloadingcircle(); - }, - ); - Stream aiChatStream = - _generateChatCompletionWithHistoryStream(userMessage, client); - - Navigator.of(context).pop(); - showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - return responseWindow(aiChatStream); - }, - ); - } - - Widget responseWindow( - Stream aiChatStream, - ) { - return StreamBuilder( - stream: aiChatStream, - builder: (context, snapshot) { - if (snapshot.hasData) { - textStream = snapshot.requireData; - // print("Text: $textStream"); - // _speakText(textStream!); - return MihPackageWindow( - fullscreen: false, - windowTitle: 'Mzansi AI Thoughts', - menuOptions: _aiThinking == true - ? null - : [ - SpeedDialChild( - child: Icon( - Icons.volume_up, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - label: "Read Aloud", - labelBackgroundColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - labelStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontWeight: FontWeight.bold, - ), - backgroundColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - onTap: () { - _speakText(snapshot.requireData); - }, - ) - ], - onWindowTapClose: () { - _captureAIResponse(snapshot.requireData); - _flutterTts.stop(); - Navigator.of(context).pop(); - }, - windowBody: SizedBox( - width: double.infinity, - // color: Colors.black, - child: Column( - mainAxisSize: MainAxisSize.max, - children: [ - // SelectionArea( - // child: GptMarkdown( - // snapshot.requireData, - // textAlign: TextAlign.left, - // style: TextStyle( - // color: MihColors.getSecondaryColor( - // MzansiInnovationHub.of(context)!.theme.mode == - // "Dark"), - // fontSize: _chatFrontSize, - // fontWeight: FontWeight.bold, - // ), - // ), - // ), - SelectionArea( - child: Text( - snapshot.requireData, - textAlign: TextAlign.left, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: _chatFrontSize, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ); - } else { - return MihPackageWindow( - fullscreen: false, - windowTitle: 'Mzansi AI Thoughts', - // windowTools: [], - onWindowTapClose: () { - Navigator.of(context).pop(); - }, - windowBody: Mihloadingcircle(), - ); - } - }, - ); - } - - void _captureAIResponse(String responseMessage) { - types.TextMessage textMessage; - setState(() { - _chatHistory.add( - ollama.Message( - role: ollama.MessageRole.assistant, - content: responseMessage, - ), - ); - }); - textMessage = types.TextMessage( - author: _mihAI, - createdAt: DateTime.now().millisecondsSinceEpoch, - id: const Uuid().v4(), - - text: responseMessage - .replaceAll("\n\n", "**Thinking:**\n") - .replaceAll("\n", "**Thinking:**\n") - .replaceAll("\n\n", "\n**Answer:**\n"), //message.text, - ); - - _addMessage(textMessage); - } - - Stream _generateChatCompletionWithHistoryStream( - String userMessage, - final ollama.OllamaClient client, - ) async* { - final aiStream = client.generateChatCompletionStream( - request: ollama.GenerateChatCompletionRequest( - model: _modelController.text, - messages: _chatHistory, - ), - ); - String text = ''; - setState(() { - _aiThinking = true; - }); - await for (final res in aiStream) { - text += (res.message.content); - yield text; - } - setState(() { - _aiThinking = false; - }); - } - - void _resetChat() { - setState(() { - _messages = []; - _chatHistory = []; - _loadMessages(); - }); - } - - ChatTheme getChatTheme() { - return DarkChatTheme( - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputBackgroundColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputTextColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputTextCursorColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - errorColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - sentMessageBodyTextStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: _chatFrontSize, - fontWeight: FontWeight.w500, - fontFamily: 'Segoe UI', - ), - receivedMessageBodyTextStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: _chatFrontSize, - fontWeight: FontWeight.w500, - fontFamily: 'Segoe UI', - ), - emptyChatPlaceholderTextStyle: TextStyle( - color: MihColors.getGreyColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: _chatFrontSize, - fontWeight: FontWeight.w500, - fontFamily: 'Segoe UI', - ), - ); - } - - Widget _getSettings() { - return ValueListenableBuilder( - valueListenable: _showModelOptions, - builder: (BuildContext context, bool value, Widget? child) { - return Visibility( - visible: value, - child: Padding( - padding: const EdgeInsets.all(10.0), - child: Align( - alignment: Alignment.centerLeft, - child: FittedBox( - child: Container( - padding: const EdgeInsets.all(10.0), - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 3.0), - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - "Settings", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ], - ), - const SizedBox(height: 15), - Row( - children: [ - SizedBox( - width: 300, - child: MihRadioOptions( - controller: _modelController, - hintText: "AI Model", - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - secondaryFillColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - requiredText: true, - radioOptions: [getModel()], - ), - ), - ], - ), - const SizedBox(height: 20), - Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - SizedBox( - width: 230, - child: MihDropdownField( - controller: _ttsVoiceController, - hintText: "AI Voice", - dropdownOptions: _voicesString, - editable: true, - enableSearch: true, - requiredText: true, - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - ), - ), - const SizedBox(width: 10), - Container( - // color: Colors.white, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular( - 25), // Optional: rounds the corners - boxShadow: const [ - BoxShadow( - color: Color.fromARGB(60, 0, 0, - 0), // 0.2 opacity = 51 in alpha (255 * 0.2) - spreadRadius: -2, - blurRadius: 10, - offset: Offset(0, 5), - ), - ], - ), - child: Padding( - padding: const EdgeInsets.only( - top: 2.0, - left: 5.0, - ), - child: SizedBox( - width: 50, - height: 50, - child: IconButton.filled( - style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all( - MihColors.getGreenColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark")), - ), - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - iconSize: 25, - onPressed: () { - print("Start TTS now"); - _speakText( - "This is the sample of the Mzansi A.I Voice."); - }, - icon: const Icon( - Icons.volume_up, - ), - ), - ), - ), - ), - ], - ), - const SizedBox(height: 10), - Row( - children: [ - SizedBox( - width: 300, - child: MihNumericStepper( - controller: _fontSizeController, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - hintText: "Font Size", - requiredText: true, - minValue: 1, - // maxValue: 5, - validationOn: true, - ), - ), - ], - ), - const SizedBox(height: 15), - ], - ), - ), - ), - ), - ), - ); - }, - ); - } - - static void loadingPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const Mihloadingcircle(); - }, - ); - } - - void _speakText(String text) async { - try { - loadingPopUp(context); - await _flutterTts.stop(); // Stop any ongoing speech - await _flutterTts.speak(text).then((value) { - Navigator.of(context).pop(); - }); // Speak the new text - } catch (e) { - Navigator.of(context).pop(); - print("TTS Error: $e"); - } - } - - void setTtsVoice(String voiceName) { - _flutterTts.setVoice( - { - "name": voiceName, - "locale": _voices - .where((_voice) => _voice["name"].contains(voiceName)) - .first["locale"] - }, - ); - _ttsVoiceController.text = voiceName; - } - - void voiceSelected() { - if (_ttsVoiceController.text.isNotEmpty) { - _ttsVoiceName.value = _ttsVoiceController.text; - // print( - // "======================================== Voice Set ========================================"); - setTtsVoice(_ttsVoiceController.text); - } else { - _ttsVoiceName.value = ""; - } - } - - void fontSizeChanged() { - setState(() { - _chatFrontSize = double.parse(_fontSizeController.text); - }); - } - - @override - void dispose() { - super.dispose(); - _modelController.dispose(); - _fontSizeController.dispose(); - _ttsVoiceController.dispose(); - _ttsVoiceController.removeListener(voiceSelected); - _fontSizeController.removeListener(fontSizeChanged); - client.endSession(); - _flutterTts.stop(); - } - - void initTTS() { - _flutterTts.setVolume(1); - _fontSizeController.addListener(fontSizeChanged); - // _flutterTts.setSpeechRate(0.6); - // _flutterTts.setPitch(1.0); - _flutterTts.getVoices.then( - (data) { - try { - _voices = List.from(data); - - setState(() { - _voices = _voices - .where( - (_voice) => _voice["name"].toLowerCase().contains("en-us")) - .toList(); - _voicesString = - _voices.map((_voice) => _voice["name"] as String).toList(); - _voicesString.sort(); - setTtsVoice(_voicesString.first); - }); - } catch (e) { - print(e); - } - }, - ); - } - - @override - void initState() { - super.initState(); - MzansiAiProvider mzansiAiProvider = context.read(); - MzansiProfileProvider mzansiProfileProvider = - context.read(); - _user = types.User( - firstName: mzansiProfileProvider.user!.fname, - id: mzansiProfileProvider - .user!.app_id, //'82091008-a484-4a89-ae75-a22bf8d6f3ac', - ); - _mihAI = types.User( - firstName: "Mzansi AI", - id: const Uuid().v4(), - ); - _modelController.text = getModel(); - _fontSizeController.text = _chatFrontSize.ceil().toString(); - systemPromt = setSystemPromt(); - _chatHistory.add( - ollama.Message( - role: ollama.MessageRole.system, - content: systemPromt, - ), - ); - initTTS(); - _ttsVoiceController.addListener(voiceSelected); - if (mzansiAiProvider.startUpQuestion != null && - mzansiAiProvider.startUpQuestion!.isNotEmpty) { - final partialText = - types.PartialText(text: mzansiAiProvider.startUpQuestion!); - WidgetsBinding.instance.addPostFrameCallback((_) { - _handleSendPressed(partialText); - }); - } - } - - @override - Widget build(BuildContext context) { - return MihPackageToolBody( - borderOn: false, - bodyItem: getBody(), - ); - } - - Widget getBody() { - return Stack( - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - mainAxisSize: MainAxisSize.max, - children: [ - _getSettings(), - Expanded( - child: GestureDetector( - onTap: () { - if (_showModelOptions.value == true) { - setState(() { - _showModelOptions.value = false; - }); - } - }, - child: Chat( - messages: _messages, - emptyState: noMessagescDisplay(), - // onAttachmentPressed: _handleAttachmentPressed, - // onMessageTap: _handleMessageTap, - // onPreviewDataFetched: _handlePreviewDataFetched, - onSendPressed: _handleSendPressed, - showUserAvatars: false, - showUserNames: false, - user: _user, - theme: getChatTheme(), - ), - ), - ) - ], - ), - Positioned( - left: 15, - top: 15, - child: Visibility( - visible: _showModelOptions.value == true, - child: Container( - // color: Colors.white, - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(25), // Optional: rounds the corners - boxShadow: const [ - BoxShadow( - color: Color.fromARGB( - 60, 0, 0, 0), // 0.2 opacity = 51 in alpha (255 * 0.2) - spreadRadius: -2, - blurRadius: 10, - offset: Offset(0, 5), - ), - ], - ), - child: Padding( - padding: const EdgeInsets.only( - top: 2.0, - left: 5.0, - ), - child: SizedBox( - width: 40, - child: IconButton.filled( - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark")), - ), - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - iconSize: 20, - onPressed: () { - if (_showModelOptions.value == true) { - setState(() { - _showModelOptions.value = false; - }); - } else { - setState(() { - _showModelOptions.value = true; - }); - } - }, - icon: const Icon( - Icons.close, - ), - ), - ), - ), - ), - // IconButton.filled( - // iconSize: 20, - // onPressed: () { - // if (_showModelOptions.value == true) { - // setState(() { - // _showModelOptions.value = false; - // }); - // } else { - // setState(() { - // _showModelOptions.value = true; - // }); - // } - // }, - // icon: const Icon( - // Icons.settings, - // ), - // ), - ), - ), - Positioned( - right: 10, - bottom: 80, - child: MihFloatingMenu( - animatedIcon: AnimatedIcons.menu_close, - children: [ - SpeedDialChild( - child: Icon( - Icons.refresh, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - label: "New Chat", - labelBackgroundColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - labelStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontWeight: FontWeight.bold, - ), - backgroundColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onTap: () { - _resetChat(); - }, - ), - SpeedDialChild( - child: Icon( - Icons.settings, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - label: "Settings", - labelBackgroundColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - labelStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontWeight: FontWeight.bold, - ), - backgroundColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onTap: () { - if (_showModelOptions.value == true) { - setState(() { - _showModelOptions.value = false; - }); - } else { - setState(() { - _showModelOptions.value = true; - }); - } - }, - ), - ], - ), - ), - ], - ); - } - - Widget? noMessagescDisplay() { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - // const SizedBox(height: 50), - Icon( - MihIcons.mzansiAi, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - const SizedBox(height: 10), - Text( - "Mzansi AI is here to help", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox(height: 25), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - children: [ - TextSpan( - text: - "Send us a message and we'll try our best to assist you"), - // WidgetSpan( - // alignment: PlaceholderAlignment.middle, - // child: Icon( - // Icons.menu, - // size: 20, - // color: MzansiInnovationHub.of(context)! - // .theme - // .secondaryColor(), - // ), - // ), - // TextSpan(text: " to add your first loyalty card."), - ], - ), - ), - ), - ], - ), - ); - } -} diff --git a/Frontend/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart b/Frontend/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart index 1888a393..e4e43085 100644 --- a/Frontend/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart +++ b/Frontend/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart @@ -5,10 +5,10 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:flutter_tts/flutter_tts.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_ai_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_ai_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; @@ -19,8 +19,9 @@ class MihAiChat extends StatefulWidget { State createState() => _MihAiChatState(); } -class _MihAiChatState extends State { +class _MihAiChatState extends State with WidgetsBindingObserver { final FlutterTts _flutterTts = FlutterTts(); + bool _isKeyboardVisible = false; Widget noMessagescDisplay() { return Center( @@ -191,14 +192,25 @@ class _MihAiChatState extends State { MzansiAiProvider aiProvider = context.read(); initTts(aiProvider); initStartQuestion(); + WidgetsBinding.instance.addObserver(this); } @override void dispose() { _flutterTts.stop(); + WidgetsBinding.instance.removeObserver(this); super.dispose(); } + @override + void didChangeMetrics() { + final bottomInset = WidgetsBinding + .instance.platformDispatcher.views.first.viewInsets.bottom; + setState(() { + _isKeyboardVisible = bottomInset > 0; + }); + } + @override Widget build(BuildContext context) { return Consumer( @@ -285,7 +297,7 @@ class _MihAiChatState extends State { ], ), ), - if (!hasHistory) noMessagescDisplay(), + if (!hasHistory && !_isKeyboardVisible) noMessagescDisplay(), ], ); }, diff --git a/Frontend/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart b/Frontend/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart index 6d715696..122d5014 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_business_profile_preview.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_business_profile_preview.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart b/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart index 94e2d5ae..665fddd0 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_business_profile_preview.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_business_profile_preview.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart b/Frontend/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart index bebd0521..1ba4f568 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_personal_profile_preview.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_personal_profile_preview.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_directory/mzansi_directory.dart b/Frontend/lib/mih_packages/mzansi_directory/mzansi_directory.dart index 5ddca512..f61b2914 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/mzansi_directory.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/mzansi_directory.dart @@ -1,16 +1,17 @@ import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:go_router/go_router.dart'; -import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart'; import 'package:provider/provider.dart'; @@ -25,15 +26,31 @@ class MzansiDirectory extends StatefulWidget { } class _MzansiDirectoryState extends State { + bool _isLoadingInitialData = true; late Future futurePosition = MIHLocationAPI().getGPSPosition(context); + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + await getFavouriteBusinesses(); + initialiseGPSLocation(); + setState(() { + _isLoadingInitialData = false; + }); + } + Future initialiseGPSLocation() async { MzansiDirectoryProvider directoryProvider = context.read(); - MIHLocationAPI().getGPSPosition(context).then((position) { - directoryProvider.setUserPosition(position); - }); + Position? userPos = await MIHLocationAPI().getGPSPosition(context); + directoryProvider.setUserPosition(userPos); } Future getFavouriteBusinesses() async { @@ -53,48 +70,45 @@ class _MzansiDirectoryState extends State { favBus.add(business!); }); } - KenLogger.success(favBus); directoryProvider.setFavouriteBusinesses(businesses: favBus); } @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - initialiseGPSLocation(); - getFavouriteBusinesses(); - }); + _loadInitialData(); } @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: context.watch().toolIndex, - onIndexChange: (newValue) { - context.read().setToolIndex(newValue); + return Consumer( + builder: (BuildContext context, MzansiDirectoryProvider directoryProvider, + Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: directoryProvider.toolIndex, + onIndexChange: (newValue) { + directoryProvider.setToolIndex(newValue); + }, + ); }, ); } List getToolBody() { List toolBodies = []; - // String myLocation = "Getting Your GPS Location Ready"; - // if (directoryProvider.userPosition != null) { - // myLocation = directoryProvider.userPosition - // .toString() - // .replaceAll("Latitude: ", "") - // .replaceAll("Longitude: ", ""); - // } toolBodies.addAll([ - MihSearchMzansi( - // personalSearch: directoryProvider.personalSearch, - // startSearchText: "", - ), - // MihContacts(), + MihSearchMzansi(), MihFavouriteBusinesses(), ]); return toolBodies; diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart index 10dfa6ac..4fe5ae30 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MzansiDirectoryTile extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_contacts.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_contacts.dart index 8d9a8a0d..cc7c8f98 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_contacts.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_contacts.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MihContacts extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart index ffc1646b..a9a272cf 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart @@ -1,14 +1,13 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart'; import 'package:provider/provider.dart'; @@ -196,7 +195,7 @@ class _MihFavouriteBusinessesState extends State { ), ); } - KenLogger.success(filteredBusinesses); + // KenLogger.success(filteredBusinesses); return BuildFavouriteBusinessesList( favouriteBusinesses: filteredBusinesses, ); diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart index 472a67db..b4cd3caa 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart @@ -1,17 +1,17 @@ import 'package:flutter/material.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.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_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart'; @@ -240,7 +240,7 @@ class _MihSearchMzansiState extends State { searchPressed( profileProvider, directoryProvider); } else { - MihAlertServices().errorAlert( + MihAlertServices().errorBasicAlert( "Business Type Not Selected", "Please ensure you have selected a Business Type before seareching for Businesses of Mzansi", context, diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart index fa7fe96a..6ea114da 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart @@ -1,6 +1,6 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_employee.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_employee.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart index cb3476fa..5e840533 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart @@ -1,5 +1,5 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart index fbf3cbb7..f03544de 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart @@ -1,9 +1,10 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart'; @@ -11,6 +12,7 @@ import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profi import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_business_employee_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:provider/provider.dart'; class BusinesProfile extends StatefulWidget { @@ -21,28 +23,52 @@ class BusinesProfile extends StatefulWidget { } class _BusinesProfileState extends State { - Future initialiseBusinessData() async { - MzansiProfileProvider profileProvider = + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = context.read(); + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); await MihBusinessEmployeeServices() - .fetchEmployees(profileProvider, context); + .fetchEmployees(mzansiProfileProvider, context); + setState(() { + _isLoadingInitialData = false; + }); } @override void initState() { super.initState(); - initialiseBusinessData(); + _loadInitialData(); } @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - selectedbodyIndex: context.watch().businessIndex, - onIndexChange: (newIndex) { - context.read().setBusinessIndex(newIndex); + return Consumer( + builder: (BuildContext context, + MzansiProfileProvider mzansiProfileProvider, Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appToolTitles: getToolTitle(), + appBody: getToolBody(), + selectedbodyIndex: mzansiProfileProvider.businessIndex, + onIndexChange: (newIndex) { + mzansiProfileProvider.setBusinessIndex(newIndex); + }, + ); }, ); } @@ -52,9 +78,13 @@ class _BusinesProfileState extends State { icon: const Icon(Icons.arrow_back), iconSize: 35, onTap: () { + MzansiProfileProvider mzansiProfileProvider = + context.read(); context.goNamed( 'mihHome', ); + mzansiProfileProvider.setHideBusinessUserDetails(true); + mzansiProfileProvider.setBusinessIndex(0); FocusScope.of(context).unfocus(); }, ); diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart index e50a5d59..e7173d62 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart @@ -1,13 +1,15 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart'; import 'package:provider/provider.dart'; @@ -25,6 +27,26 @@ class MihAddBookmarkAlert extends StatefulWidget { } class _MihAddBookmarkAlertState extends State { + Future getFavouriteBusinesses() async { + MzansiDirectoryProvider directoryProvider = + context.read(); + MzansiProfileProvider profileProvider = + context.read(); + await MihMzansiDirectoryServices().getAllUserBookmarkedBusiness( + profileProvider.user!.app_id, + directoryProvider, + ); + List favBus = []; + for (var bus in directoryProvider.bookmarkedBusinesses) { + await MihBusinessDetailsServices() + .getBusinessDetailsByBusinessId(bus.business_id) + .then((business) { + favBus.add(business!); + }); + } + directoryProvider.setFavouriteBusinesses(businesses: favBus); + } + Future addBookmark( MzansiProfileProvider profileProvider, String business_id) async { showDialog( @@ -43,7 +65,7 @@ class _MihAddBookmarkAlertState extends State { "${widget.business.Name} has successfully been added to favourite businessess in the Mzansi Directory.", ); } else { - MihAlertServices().errorAlert( + MihAlertServices().errorBasicAlert( "Error Adding Bookmark", "An error occured while add ${widget.business.Name} to you Mzansi Directory, Please try again later.", context, @@ -53,62 +75,33 @@ class _MihAddBookmarkAlertState extends State { } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - widget.onSuccessDismissPressed!.call(); - context.pop(); - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () async { + await getFavouriteBusinesses(); + widget.onSuccessDismissPressed!.call(); + context.pop(); + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -117,24 +110,35 @@ class _MihAddBookmarkAlertState extends State { return Consumer( builder: (BuildContext context, MzansiProfileProvider profileProvider, Widget? child) { - return MihPackageAlert( - alertColour: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Bookmark Business", - alertBody: Column( + return MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + windowBody: Column( children: [ + Icon( + Icons.warning_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Text( + "Bookmark Business", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), Text( "Are you sure you want to save ${widget.business.Name} to your Mzansi Directory?", style: TextStyle( color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, + fontSize: 18, ), ), const SizedBox(height: 25), diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart index daf43813..b0f7e02d 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart @@ -1,15 +1,13 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_business_employee_services.dart'; @@ -46,75 +44,36 @@ class _MihAddEmployeeWindowState extends State { "${widget.user.username} is now apart of your team with ${accessController.text} access to ${mzansiProfileProvider.business!.Name}"; successPopUp(message, false); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } void successPopUp(String message, bool stayOnPersonalSide) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Successfully Updated Profile", - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + "Successfully Added Employee", + message, + [ + MihButton( + onPressed: () { + context.pop(); + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ) + ], + context, ); } @@ -207,16 +166,10 @@ class _MihAddEmployeeWindowState extends State { if (isRequiredFieldsCaptured()) { createBusinessUserAPICall(mzansiProfileProvider); } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart index 7f5a1b39..fa5b1440 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart @@ -1,17 +1,19 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/bookmarked_business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/bookmarked_business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_review.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart'; import 'package:provider/provider.dart'; @@ -58,34 +60,11 @@ class _MihBusinessCardState extends State { if (await canLaunchUrl(url)) { await launchUrl(url); } else { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Error Making Call", - alertBody: Column( - children: [ - Text( - "We couldn't open your phone app to call ${widget.business.contact_no}. To fix this, make sure you have a phone application installed and it's set as your default dialer.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15, - ), - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }); + MihAlertServices().errorBasicAlert( + "Error Making Call", + "We couldn't open your phone app to call $formattedNumber. To fix this, make sure you have a phone application installed and it's set as your default dialer.", + context, + ); } } @@ -110,34 +89,11 @@ class _MihBusinessCardState extends State { if (await canLaunchUrl(emailLaunchUri)) { await launchUrl(emailLaunchUri); } else { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Error Creating Email", - alertBody: Column( - children: [ - Text( - "We couldn't launch your email app to send a message to ${widget.business.bus_email}. To fix this, please confirm that you have an email application installed and that it's set as your default.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15, - ), - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }); + MihAlertServices().errorBasicAlert( + "Error Creating Email", + "We couldn't launch your email app to send a message to $recipient. To fix this, please confirm that you have an email application installed and that it's set as your default.", + context, + ); } } @@ -153,64 +109,18 @@ class _MihBusinessCardState extends State { if (await canLaunchUrl(googleMapsUrl)) { await launchUrl(googleMapsUrl); } else { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Error Creating Maps", - alertBody: Column( - children: [ - Text( - "There was an issue opening maps for ${widget.business.Name}. This usually happens if you don't have a maps app installed or it's not set as your default. Please install one to proceed.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15, - ), - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }); + MihAlertServices().errorBasicAlert( + "Error Opening Maps", + "There was an issue opening maps for ${widget.business.Name}. This usually happens if you don't have a maps app installed or it's not set as your default. Please install one to proceed.", + context, + ); } } catch (e) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Error Creating Maps", - alertBody: Column( - children: [ - Text( - "There was an issue opening maps for ${widget.business.Name}. This usually happens if you don't have a maps app installed or it's not set as your default. Please install one to proceed.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15, - ), - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }); + MihAlertServices().errorBasicAlert( + "Error Opening Maps", + "There was an issue opening maps for ${widget.business.Name}. This usually happens if you don't have a maps app installed or it's not set as your default. Please install one to proceed.", + context, + ); } } @@ -224,65 +134,18 @@ class _MihBusinessCardState extends State { if (await canLaunchUrl(url)) { await launchUrl(url); } else { - print('Could not launch $urlString'); - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Error Opening Website", - alertBody: Column( - children: [ - Text( - "We couldn't open the link to $newUrl. To view this website, please ensure you have a web browser installed and set as your default.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15, - ), - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }); + MihAlertServices().errorBasicAlert( + "Error Opening Website", + "We couldn't open the link to $newUrl. To view this website, please ensure you have a web browser installed and set as your default.", + context, + ); } } catch (e) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Error Opening Website", - alertBody: Column( - children: [ - Text( - "We couldn't open the link to $newUrl. To view this website, please ensure you have a web browser installed and set as your default.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15, - ), - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }); + MihAlertServices().errorBasicAlert( + "Error Opening Website", + "We couldn't open the link to $newUrl. To view this website, please ensure you have a web browser installed and set as your default.", + context, + ); } } @@ -410,9 +273,9 @@ class _MihBusinessCardState extends State { @override Widget build(BuildContext context) { // double screenWidth = MediaQuery.of(context).size.width; - return Consumer( - builder: (BuildContext context, MzansiDirectoryProvider directoryProvider, - Widget? child) { + return Consumer2( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + MzansiDirectoryProvider directoryProvider, Widget? child) { return Material( color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark") @@ -698,6 +561,7 @@ class _MihBusinessCardState extends State { double width) async { if (_isUserSignedIn) { showDialog( + barrierDismissible: false, context: context, builder: (context) => MihReviewBusinessWindow( business: widget.business, @@ -725,13 +589,12 @@ class _MihBusinessCardState extends State { void showAddBookmarkAlert() { if (_isUserSignedIn) { showDialog( + barrierDismissible: false, context: context, builder: (context) => MihAddBookmarkAlert( business: widget.business, - onSuccessDismissPressed: () { - setState(() { - _bookmarkedBusinessFuture = getUserBookmark(); - }); + onSuccessDismissPressed: () async { + _bookmarkedBusinessFuture = getUserBookmark(); }, ), ); @@ -743,14 +606,13 @@ class _MihBusinessCardState extends State { void showDeleteBookmarkAlert(BookmarkedBusiness? bookmarkBusiness) { if (_isUserSignedIn) { showDialog( + barrierDismissible: false, context: context, builder: (context) => MihDeleteBookmarkAlert( business: widget.business, bookmarkBusiness: bookmarkBusiness, onSuccessDismissPressed: () { - setState(() { - _bookmarkedBusinessFuture = getUserBookmark(); - }); + _bookmarkedBusinessFuture = getUserBookmark(); }, // startUpSearch: widget.startUpSearch, )); @@ -761,59 +623,72 @@ class _MihBusinessCardState extends State { void showSignInRequiredAlert() { showDialog( + barrierDismissible: false, context: context, - builder: (context) => MihPackageAlert( - alertIcon: Column( - children: [ - Icon( - MihIcons.mihLogo, - size: 125, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - const SizedBox(height: 10), - ], - ), - alertTitle: "Let's Get Started", - alertBody: Column( - children: [ - Text( - "Ready to dive in to the world of MIH?\nSign in or create a free MIH account to unlock all the powerful features of the MIH app. It's quick and easy!", - style: TextStyle( + builder: (context) { + return MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: () { + context.pop(); + }, + windowBody: Column( + children: [ + Icon( + MihIcons.mihLogo, + size: 125, color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.goNamed( - 'mihHome', - extra: true, - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Sign In/ Create Account", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, + const SizedBox(height: 10), + Text( + "Let's Get Started", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Text( + "Ready to dive in to the world of MIH?\nSign in or create a free MIH account to unlock all the powerful features of the MIH app. It's quick and easy!", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 15, + ), + ), + const SizedBox(height: 25), + Center( + child: MihButton( + onPressed: () { + context.goNamed( + 'mihHome', + extra: true, + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + elevation: 10, + width: 300, + child: Text( + "Sign In/ Create Account", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), ), ), ), - ) - ], - ), - alertColour: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), + ], + ), + ); + }, ); } } diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart index c5496820..df496d72 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart @@ -1,14 +1,18 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/bookmarked_business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_objects/bookmarked_business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart'; +import 'package:provider/provider.dart'; class MihDeleteBookmarkAlert extends StatefulWidget { final Business business; @@ -28,6 +32,26 @@ class MihDeleteBookmarkAlert extends StatefulWidget { } class _MihDeleteBookmarkAlertState extends State { + Future getFavouriteBusinesses() async { + MzansiDirectoryProvider directoryProvider = + context.read(); + MzansiProfileProvider profileProvider = + context.read(); + await MihMzansiDirectoryServices().getAllUserBookmarkedBusiness( + profileProvider.user!.app_id, + directoryProvider, + ); + List favBus = []; + for (var bus in directoryProvider.bookmarkedBusinesses) { + await MihBusinessDetailsServices() + .getBusinessDetailsByBusinessId(bus.business_id) + .then((business) { + favBus.add(business!); + }); + } + directoryProvider.setFavouriteBusinesses(businesses: favBus); + } + Future deleteBookmark(int idbookmarked_businesses) async { showDialog( context: context, @@ -45,7 +69,7 @@ class _MihDeleteBookmarkAlertState extends State { "${widget.business.Name} has successfully been removed your favourite businessess in the Mzansi Directory.", ); } else { - MihAlertServices().errorAlert( + MihAlertServices().errorBasicAlert( "Error Adding Bookmark", "An error occured while add ${widget.business.Name} to you Mzansi Directory, Please try again later.", context, @@ -55,93 +79,67 @@ class _MihDeleteBookmarkAlertState extends State { } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - // context.goNamed( - // "mzansiDirectory", - // extra: MzansiDirectoryArguments( - // personalSearch: false, - // startSearchText: widget.business.Name, - // packageIndex: 1, - // ), - // ); - widget.onSuccessDismissPressed!.call(); - context.pop(); - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () async { + await getFavouriteBusinesses(); + widget.onSuccessDismissPressed!.call(); + context.pop(); + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ) + ], + context, ); } @override Widget build(BuildContext context) { - return MihPackageAlert( - alertColour: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Remove Bookmark", - alertBody: Column( + return MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + windowBody: Column( children: [ + Icon( + Icons.warning_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Text( + "Remove Bookmark", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), Text( "Are you sure you want to remove ${widget.business.Name} from your Mzansi Directory?", style: TextStyle( color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, + fontSize: 18, ), ), const SizedBox(height: 25), diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart index 0b2bd362..fe454a62 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart @@ -2,16 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_employee.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_employee.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_business_employee_services.dart'; @@ -50,11 +47,11 @@ class _MihEditEmployeeDetailsWindowState String message = "Your employees details have been updated."; successPopUp(message, false); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } - Future deleteNoteApiCall() async { + Future deleteEmployeeApiCall() async { int statusCode = await MihBusinessEmployeeServices().deleteEmployee( context.read(), widget.employee, @@ -63,88 +60,49 @@ class _MihEditEmployeeDetailsWindowState if (statusCode == 200) { String message = "The employee has been deleted successfully. This means they will no longer have access to your business profile"; + context.pop(); successPopUp(message, false); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } void showDeleteWarning() { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) => MIHDeleteMessage( - deleteType: "Employee", - onTap: () { - deleteNoteApiCall(); - })); - } - - void successPopUp(String message, bool stayOnPersonalSide) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Successfully Updated Profile", - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); + MihAlertServices().deleteConfirmationAlert( + "This team member will be deleted permanently from the business profile. Are you certain you want to delete it?", + () { + deleteEmployeeApiCall(); }, + context, ); } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, + void successPopUp(String message, bool stayOnPersonalSide) { + MihAlertServices().successAdvancedAlert( + "Successfully Updated Employee Details", + message, + [ + MihButton( + onPressed: () { + context.pop(); + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -279,16 +237,10 @@ class _MihEditEmployeeDetailsWindowState if (isRequiredFieldsCaptured()) { updateEmployeeAPICall(mzansiProfileProvider); } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart index c26477a5..539c4f52 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart @@ -3,17 +3,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_review.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; @@ -53,104 +52,75 @@ class _MihReviewBusinessWindowState extends State { final ValueNotifier _counter = ValueNotifier(0); void showDeleteReviewAlert(MzansiDirectoryProvider directoryProvider) { - showDialog( - context: context, - builder: (context) => MihPackageAlert( - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MihColors.getRedColor( + MihAlertServices().errorAdvancedAlert( + "Delete Review", + "Are you sure you want to delete this review? This action cannot be undone.", + [ + MihButton( + width: 300, + onPressed: () async { + showDialog( + context: context, + builder: (context) { + return const Mihloadingcircle(); + }, + ); + await MihMzansiDirectoryServices() + .deleteBusinessReview( + widget.businessReview!.idbusiness_ratings, + widget.businessReview!.business_id, + widget.businessReview!.rating_score, + widget.business.rating, + ) + .then((statusCode) async { + context.pop(); //Remove loading dialog + context.pop(); //Remove delete dialog + if (statusCode == 200) { + await refreshBusiness(directoryProvider); + successPopUp( + "Successfully Deleted Review!", + "Your review has successfully been delete and will no longer appear under the business.", + ); + } else { + MihAlertServices().errorBasicAlert( + "Error Deleting Review", + "There was an error deleting your review. Please try again later.", + context, + ); + } + }); + }, + buttonColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Delete Review", - alertBody: Column( - children: [ - Text( - "Are you sure you want to delete this review? This action cannot be undone.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - ), + child: Text( + "Delete", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, ), - const SizedBox(height: 25), - Wrap( - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - width: 300, - onPressed: () async { - showDialog( - context: context, - builder: (context) { - return const Mihloadingcircle(); - }, - ); - await MihMzansiDirectoryServices() - .deleteBusinessReview( - widget.businessReview!.idbusiness_ratings, - widget.businessReview!.business_id, - widget.businessReview!.rating_score, - widget.business.rating, - ) - .then((statusCode) async { - context.pop(); //Remove loading dialog - context.pop(); //Remove delete dialog - if (statusCode == 200) { - await refreshBusiness(directoryProvider); - context.pop(); //Remove window - successPopUp( - "Successfully Deleted Review!", - "Your review has successfully been delete and will no longer appear under the business.", - ); - } else { - MihAlertServices().errorAlert( - "Error Deleting Review", - "There was an error deleting your review. Please try again later.", - context, - ); - } - }); - }, - buttonColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - child: Text( - "Delete", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - width: 300, - onPressed: () { - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - child: Text( - "Cancel", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ], + ), ), - ), + MihButton( + width: 300, + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + child: Text( + "Cancel", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -198,13 +168,12 @@ class _MihReviewBusinessWindowState extends State { context.pop(); //Remove loading dialog if (statusCode == 200) { await refreshBusiness(directoryProvider); - context.pop(); successPopUp( "Successfully Updated Review!", "Your review has successfully been updated and will now appear under the business.", ); } else { - MihAlertServices().errorAlert( + MihAlertServices().errorBasicAlert( "Error Updating Review", "There was an error updating your review. Please try again later.", context, @@ -225,13 +194,12 @@ class _MihReviewBusinessWindowState extends State { context.pop(); //Remove loading dialog if (statusCode == 201) { await refreshBusiness(directoryProvider); - context.pop(); successPopUp( "Successfully Added Review!", "Your review has successfully been added and will now appear under the business.", ); } else { - MihAlertServices().errorAlert( + MihAlertServices().errorBasicAlert( "Error Adding Review", "There was an error adding your review. Please try again later.", context, @@ -242,68 +210,32 @@ class _MihReviewBusinessWindowState extends State { } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - // context.goNamed( - // "mzansiDirectory", - // extra: MzansiDirectoryArguments( - // personalSearch: false, - // startSearchText: widget.business.Name, - // ), - // ); - widget.onSuccessDismissPressed!.call(); - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + context.pop(); + widget.onSuccessDismissPressed!.call(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -581,8 +513,7 @@ class _MihReviewBusinessWindowState extends State { directoryProvider, ); } else { - MihAlertServices() - .formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart index a5cef9de..67b1c937 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart @@ -4,16 +4,14 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; @@ -135,60 +133,10 @@ class _MihUpdateBusinessDetailsWindowState } void successPopUp(String message, bool stayOnPersonalSide) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Successfully Updated Profile", - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, + MihAlertServices().successBasicAlert( + "Success!", + message, + context, ); } @@ -268,51 +216,19 @@ class _MihUpdateBusinessDetailsWindowState } else { context.pop(); // File upload failed - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_rounded, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Error Updating Business Details", - alertBody: Column( - children: [ - Text( - "An error occurred while updating the business details. Please check internet connection and try again.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + MihAlertServices().errorBasicAlert( + "Error Updating Business Details", + "An error occurred while updating the business details. Please try again.", + context, ); } } else { context.pop(); if (!mounted) return; - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); + MihAlertServices().internetConnectionAlert(context); } } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } @@ -671,8 +587,7 @@ class _MihUpdateBusinessDetailsWindowState if (_formKey.currentState!.validate()) { submitForm(mzansiProfileProvider); } else { - MihAlertServices() - .formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_my_business_user_details.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_my_business_user_details.dart new file mode 100644 index 00000000..89082b31 --- /dev/null +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_my_business_user_details.dart @@ -0,0 +1,372 @@ +import 'package:file_picker/file_picker.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_image_display.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_my_business_user_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; +import 'package:provider/provider.dart'; + +class MihUpdateMyBusinessUserDetails extends StatefulWidget { + const MihUpdateMyBusinessUserDetails({super.key}); + + @override + State createState() => + _MihUpdateMyBusinessUserDetailsState(); +} + +class _MihUpdateMyBusinessUserDetailsState + extends State { + final fileNameController = TextEditingController(); + final titleTextController = TextEditingController(); + final fnameController = TextEditingController(); + final lnameController = TextEditingController(); + final accessController = TextEditingController(); + final signtureController = TextEditingController(); + final _formKey = GlobalKey(); + PlatformFile? userPicFile; + PlatformFile? newSelectedSignaturePic; + late String env; + + bool isFormFilled() { + if (titleTextController.text.isEmpty) { + return false; + } else { + return true; + } + } + + Future uploadFile(MzansiProfileProvider mzansiProfileProvider) async { + if (newSelectedSignaturePic != null) { + int uploadStatusCode = 0; + uploadStatusCode = await MihFileApi.uploadFile( + mzansiProfileProvider.user!.app_id, + env, + "business_files", + newSelectedSignaturePic!, + context, + ); + if (uploadStatusCode == 200) { + signtureController.text = newSelectedSignaturePic!.name; + int deleteStatusCode = 0; + deleteStatusCode = await MihFileApi.deleteFile( + mzansiProfileProvider.user!.app_id, + env, + "business_files", + mzansiProfileProvider.businessUser!.sig_path.split("/").last, + context, + ); + if (deleteStatusCode == 200) { + return true; + } else { + return false; + } + } else { + return false; + } + } else { + return true; // No file selected, so no upload needed + } + } + + Future submitForm(MzansiProfileProvider mzansiProfileProvider) async { + if (isFormFilled()) { + bool successfullyUploadedFile = await uploadFile(mzansiProfileProvider); + if (!mounted) return; + if (successfullyUploadedFile) { + int statusCode = await MihMyBusinessUserServices().updateBusinessUser( + mzansiProfileProvider.user!.app_id, + mzansiProfileProvider.businessUser!.business_id, + titleTextController.text, + accessController.text, + signtureController.text, + mzansiProfileProvider, + context, + ); + if (!mounted) return; + if (statusCode == 200) { + String message = "Business details updated successfully"; + context.pop(); + successPopUp(message, false); + } else { + MihAlertServices().errorBasicAlert( + "Error Updating Business User Details", + "An error occurred while updating the business User details. Please check internet connection and try again.", + context, + ); + } + } else { + MihAlertServices().internetConnectionAlert(context); + } + } else { + MihAlertServices().inputErrorAlert(context); + } + } + + void successPopUp(String message, bool stayOnPersonalSide) { + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); + } + + Widget getWindowBody(double width) { + return Consumer( + builder: (BuildContext context, + MzansiProfileProvider mzansiProfileProvider, Widget? child) { + return MihSingleChildScroll( + child: Padding( + padding: + MzansiInnovationHub.of(context)!.theme.screenType == "desktop" + ? EdgeInsets.symmetric(horizontal: width * 0.2) + : EdgeInsets.symmetric(horizontal: width * 0.075), + child: Column( + children: [ + MihForm( + formKey: _formKey, + formFields: [ + Center( + child: MihCircleAvatar( + imageFile: mzansiProfileProvider.userProfilePicture, + width: 150, + editable: false, + fileNameController: fileNameController, + userSelectedfile: userPicFile, + frameColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + onChange: (_) {}, + ), + ), + Visibility( + visible: false, + child: MihTextFormField( + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + inputColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + controller: fileNameController, + multiLineInput: false, + requiredText: true, + readOnly: true, + hintText: "Selected File Name", + ), + ), + const SizedBox(height: 10), + MihTextFormField( + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + inputColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + controller: titleTextController, + multiLineInput: false, + requiredText: true, + readOnly: false, + hintText: "Title", + validator: (value) { + return MihValidationServices().isEmpty(value); + }, + ), + const SizedBox(height: 10), + MihTextFormField( + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + inputColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + controller: fnameController, + multiLineInput: false, + requiredText: true, + readOnly: true, + hintText: "First Name", + validator: (value) { + return MihValidationServices().isEmpty(value); + }, + ), + const SizedBox(height: 10), + MihTextFormField( + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + inputColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + controller: lnameController, + multiLineInput: false, + requiredText: true, + readOnly: true, + hintText: "Surname", + validator: (value) { + return MihValidationServices().isEmpty(value); + }, + ), + const SizedBox(height: 10), + MihTextFormField( + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + inputColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + controller: accessController, + multiLineInput: false, + requiredText: true, + hintText: "Access Level", + readOnly: true, + validator: (value) { + return MihValidationServices().isEmpty(value); + }, + ), + const SizedBox(height: 10), + Container( + width: 300, + alignment: Alignment.topLeft, + child: const Text( + "Signature:", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + Center( + child: MihImageDisplay( + imageFile: newSelectedSignaturePic != null + ? MemoryImage(newSelectedSignaturePic!.bytes!) + : mzansiProfileProvider.businessUserSignature, + width: 300, + height: 200, + editable: true, + fileNameController: signtureController, + userSelectedfile: newSelectedSignaturePic, + onChange: (selectedFile) { + setState(() { + newSelectedSignaturePic = selectedFile; + }); + }, + ), + ), + const SizedBox(height: 10), + Visibility( + visible: false, + child: MihTextFormField( + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + inputColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + controller: fileNameController, + multiLineInput: false, + requiredText: true, + readOnly: true, + hintText: "Selected Signature File", + ), + ), + const SizedBox(height: 15), + Center( + child: MihButton( + onPressed: () { + if (_formKey.currentState!.validate()) { + submitForm(mzansiProfileProvider); + } else { + MihAlertServices().inputErrorAlert(context); + } + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + width: 300, + child: Text( + "Update", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + const SizedBox(height: 20), + ], + ), + ], + ), + ), + ); + }, + ); + } + + void setControllers() { + MzansiProfileProvider mzansiProfileProvider = + context.read(); + fileNameController.text = + mzansiProfileProvider.user!.pro_pic_path.split("/").last; + signtureController.text = + mzansiProfileProvider.businessUser!.sig_path.split("/").last; + titleTextController.text = mzansiProfileProvider.businessUser!.title; + fnameController.text = mzansiProfileProvider.user!.fname; + lnameController.text = mzansiProfileProvider.user!.lname; + accessController.text = mzansiProfileProvider.businessUser!.access; + if (AppEnviroment.getEnv() == "Prod") { + env = "Prod"; + } else { + env = "Dev"; + } + } + + @override + void dispose() { + super.dispose(); + fileNameController.dispose(); + titleTextController.dispose(); + fnameController.dispose(); + lnameController.dispose(); + accessController.dispose(); + signtureController.dispose(); + userPicFile = null; + newSelectedSignaturePic = null; + } + + @override + void initState() { + super.initState(); + setControllers(); + } + + @override + Widget build(BuildContext context) { + double screenWidth = MediaQuery.of(context).size.width; + return MihPackageWindow( + fullscreen: false, + windowTitle: "Edit Profile", + onWindowTapClose: () { + context.pop(); + }, + windowBody: getWindowBody(screenWidth), + ); + } +} diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart index 21231d4a..a9cb770b 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart @@ -1,12 +1,12 @@ import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart index 4449a393..0c4b10c5 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart'; import 'package:provider/provider.dart'; 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 index 96d782bf..825ecc29 100644 --- 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 @@ -1,7 +1,7 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart index 4ae9ec40..418c84c1 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart @@ -1,9 +1,9 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart index c65a144c..09586742 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart @@ -1,14 +1,14 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; import 'package:provider/provider.dart'; class MihBusinessDetails extends StatefulWidget { @@ -27,6 +27,7 @@ class _MihBusinessDetailsState extends State { void editBizProfileWindow( MzansiProfileProvider mzansiProfileProvider, double width) { showDialog( + barrierDismissible: false, context: context, builder: (context) => MihUpdateBusinessDetailsWindow(width: width), ); diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart index ab37bd22..a02ef2e7 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart @@ -5,16 +5,14 @@ import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:http/http.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_image_display.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_image_display.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; @@ -65,12 +63,7 @@ class _MihBusinessDetailsSetUpState extends State { if (isFieldsFilled()) { createBusinessProfileAPICall(mzansiProfileProvider); } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } @@ -98,12 +91,12 @@ class _MihBusinessDetailsSetUpState extends State { await uploadFile(mzansiProfileProvider, newSelectedLogoPic); if (successUpload) { String logoUrl = await MihFileApi.getMinioFileUrl( - mzansiProfileProvider.business!.logo_path, context); + mzansiProfileProvider.business!.logo_path); mzansiProfileProvider.setBusinessProfilePicUrl(logoUrl); } await createBusinessUserAPICall(mzansiProfileProvider); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } @@ -123,16 +116,16 @@ class _MihBusinessDetailsSetUpState extends State { await uploadFile(mzansiProfileProvider, newSelectedSignaturePic); if (successUpload) { String sigUrl = await MihFileApi.getMinioFileUrl( - mzansiProfileProvider.businessUser!.sig_path, context); + mzansiProfileProvider.businessUser!.sig_path); mzansiProfileProvider.setBusinessUserSignatureUrl(sigUrl); String message = "Your business profile is now live! You can now start connecting with customers and growing your business."; successPopUp(message, false); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } @@ -198,72 +191,33 @@ class _MihBusinessDetailsSetUpState extends State { } void successPopUp(String message, bool stayOnPersonalSide) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Successfully Updated Profile", - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.goNamed( - 'mihHome', - extra: stayOnPersonalSide, - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + "Successfully Updated Profile", + message, + [ + MihButton( + onPressed: () { + context.goNamed( + 'mihHome', + extra: stayOnPersonalSide, + ); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -343,7 +297,7 @@ class _MihBusinessDetailsSetUpState extends State { if (_formKey.currentState!.validate()) { submitForm(mzansiProfileProvider); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } } }, @@ -803,8 +757,7 @@ class _MihBusinessDetailsSetUpState extends State { if (_formKey.currentState!.validate()) { submitForm(mzansiProfileProvider); } else { - MihAlertServices() - .formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart index 1a379b81..1d4a1adc 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart @@ -2,14 +2,14 @@ import 'package:custom_rating_bar/custom_rating_bar.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; import 'package:provider/provider.dart'; class MihBusinessDetailsView extends StatefulWidget { @@ -36,7 +36,7 @@ class _MihBusinessDetailsViewState extends State { MzansiDirectoryProvider directoryProvider = context.read(); futureImageUrl = MihFileApi.getMinioFileUrl( - directoryProvider.selectedBusiness!.logo_path, context); + directoryProvider.selectedBusiness!.logo_path); } @override diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart index 109de674..0c9dc106 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart @@ -7,19 +7,19 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; import 'package:provider/provider.dart'; import 'package:screenshot/screenshot.dart'; import 'package:share_plus/share_plus.dart'; @@ -92,15 +92,6 @@ class _MihBusinessQrCodeState extends State { } } - void mihLoadingPopUp() { - showDialog( - context: context, - builder: (context) { - return const Mihloadingcircle(); - }, - ); - } - Future downloadQrCode() async { if (_isUserSignedIn) { await screenshotController.capture().then((image) { @@ -120,59 +111,69 @@ class _MihBusinessQrCodeState extends State { void showSignInRequiredAlert() { showDialog( + barrierDismissible: false, context: context, - builder: (context) => MihPackageAlert( - alertIcon: Column( - children: [ - Icon( - MihIcons.mihLogo, - size: 125, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - const SizedBox(height: 10), - ], - ), - alertTitle: "Let's Get Started", - alertBody: Column( - children: [ - Text( - "Ready to dive in to the world of MIH?\nSign in or create a free MIH account to unlock all the powerful features of the MIH app. It's quick and easy!", - style: TextStyle( + builder: (context) { + return MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + windowBody: Column( + children: [ + Icon( + MihIcons.mihLogo, + size: 100, color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.goNamed( - 'mihHome', - extra: true, - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Sign In/ Create Account", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), + Text( + "Let's Get Started", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, ), ), - ) - ], - ), - alertColour: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), + const SizedBox(height: 15), + Text( + "Ready to dive in to the world of MIH?\nSign in or create a free MIH account to unlock all the powerful features of the MIH app. It's quick and easy!", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 15, + ), + ), + const SizedBox(height: 25), + Center( + child: MihButton( + onPressed: () { + context.goNamed( + 'mihHome', + extra: true, + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + elevation: 10, + width: 300, + child: Text( + "Sign In/ Create Account", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ) + ], + ), + ); + }, ); } @@ -344,7 +345,7 @@ class _MihBusinessQrCodeState extends State { business = profileProvider.business!; } _checkUserSession(); - futureImageUrl = MihFileApi.getMinioFileUrl(business.logo_path, context); + futureImageUrl = MihFileApi.getMinioFileUrl(business.logo_path); qrCodedata = "${AppEnviroment.baseAppUrl}/business-profile/view?business_id="; } @@ -425,7 +426,7 @@ class _MihBusinessQrCodeState extends State { onTap: () { shareMIHLink( context, - "Check out ${business.Name} on the MIH app", + "Check out ${business.Name} on the MIH app's Mzansi Directory", "$qrCodedata${business.business_id}", ); }, diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart index f2f34dbd..66be859f 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart @@ -1,11 +1,11 @@ import 'package:custom_rating_bar/custom_rating_bar.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_review.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart'; @@ -41,6 +41,7 @@ class _MihBusinessReviewsState extends State { // showDialog(context: context, builder: (context)=> ) showDialog( context: context, + barrierDismissible: false, builder: (context) { return MihReviewBusinessWindow( business: business, diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart index b614dffb..bab9181f 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart @@ -1,10 +1,10 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart'; import 'package:flutter/material.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart index 4583f888..90b7a440 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart @@ -1,10 +1,10 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_employee.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_employee.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart index 29049149..f78114f1 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart @@ -1,24 +1,17 @@ +import 'dart:ui'; + import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_image_display.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_update_my_business_user_details.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_my_business_user_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_image_display.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:provider/provider.dart'; class MihMyBusinessUser extends StatefulWidget { @@ -31,187 +24,113 @@ class MihMyBusinessUser extends StatefulWidget { } class _MihMyBusinessUserState extends State { + final fileNameController = TextEditingController(); + final signtureController = TextEditingController(); PlatformFile? userPicFile; PlatformFile? newSelectedSignaturePic; - final fileNameController = TextEditingController(); - final titleTextController = TextEditingController(); - final fnameController = TextEditingController(); - final lnameController = TextEditingController(); - final accessController = TextEditingController(); - final signtureController = TextEditingController(); - final _formKey = GlobalKey(); - late String env; - bool isFormFilled() { - if (titleTextController.text.isEmpty) { - return false; - } else { - return true; - } + void editBizUserProfileWindow( + MzansiProfileProvider mzansiProfileProvider, double width) { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) => MihUpdateMyBusinessUserDetails(), + ); } - Future uploadFile(MzansiProfileProvider mzansiProfileProvider) async { - if (newSelectedSignaturePic != null) { - int uploadStatusCode = 0; - uploadStatusCode = await MihFileApi.uploadFile( - mzansiProfileProvider.user!.app_id, - env, - "business_files", - newSelectedSignaturePic!, - context, - ); - if (uploadStatusCode == 200) { - signtureController.text = newSelectedSignaturePic!.name; - int deleteStatusCode = 0; - deleteStatusCode = await MihFileApi.deleteFile( - mzansiProfileProvider.user!.app_id, - env, - "business_files", - mzansiProfileProvider.businessUser!.sig_path.split("/").last, - context, - ); - if (deleteStatusCode == 200) { - return true; - } else { - return false; - } - } else { - return false; + String getDisplayText( + MzansiProfileProvider profileProvider, String originalText) { + int textLength = originalText.length >= 13 ? 13 : 6; + String displayText = ""; + if (profileProvider.hideBusinessUserDetails) { + for (int i = 0; i < textLength; i++) { + displayText += "●"; } } else { - return true; // No file selected, so no upload needed + displayText = originalText; } + return displayText; } - Future submitForm(MzansiProfileProvider mzansiProfileProvider) async { - KenLogger.success("Start Submit Form"); - if (isFormFilled()) { - KenLogger.success("Form Filled"); - KenLogger.success("Start File Upload"); - bool successfullyUploadedFile = await uploadFile(mzansiProfileProvider); - KenLogger.success( - "File Upload Complete: outcome $successfullyUploadedFile"); - if (!mounted) return; - KenLogger.success("is mounted"); - if (successfullyUploadedFile) { - int statusCode = await MihMyBusinessUserServices().updateBusinessUser( - mzansiProfileProvider.user!.app_id, - mzansiProfileProvider.businessUser!.business_id, - titleTextController.text, - accessController.text, - signtureController.text, - mzansiProfileProvider, - context, - ); - KenLogger.success("Details Update Complete: status code $statusCode"); - if (!mounted) return; - KenLogger.success("is mounted"); - if (statusCode == 200) { - KenLogger.success("Start Success Message"); - String message = "Business details updated successfully"; - successPopUp(message, false); - } else { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_rounded, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Error Updating Business User Details", - alertBody: Column( + Widget buildEmployeeInfoCard(MzansiProfileProvider profileProvider) { + TextStyle titleStyle = TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + TextStyle subtitleStyle = TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + TextStyle subtitleHeadingStyle = TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + return MihPackageWindow( + fullscreen: false, + windowTitle: "Employee Info Card", + onWindowTapClose: null, + backgroundColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + foregroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + windowBody: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "An error occurred while updating the business User details. Please check internet connection and try again.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), + "${profileProvider.user!.fname} ${profileProvider.user!.lname}", + style: titleStyle, + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "Title: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: profileProvider.businessUser!.title, + style: subtitleStyle, + ), + ], + ), + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "Access: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: getDisplayText(profileProvider, + profileProvider.businessUser!.access), + style: subtitleStyle, + ), + ], ), ), ], ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); - } - } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); - } - } - - void successPopUp(String message, bool stayOnPersonalSide) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Successfully Updated Profile", - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) ], ), - alertColour: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, + ], + ), ); } @@ -222,28 +141,12 @@ class _MihMyBusinessUserState extends State { mzansiProfileProvider.user!.pro_pic_path.split("/").last; signtureController.text = mzansiProfileProvider.businessUser!.sig_path.split("/").last; - KenLogger.success("title: ${mzansiProfileProvider.businessUser!.title}"); - KenLogger.success( - "sig url: ${mzansiProfileProvider.businessUser!.sig_path}"); - titleTextController.text = mzansiProfileProvider.businessUser!.title; - fnameController.text = mzansiProfileProvider.user!.fname; - lnameController.text = mzansiProfileProvider.user!.lname; - accessController.text = mzansiProfileProvider.businessUser!.access; - if (AppEnviroment.getEnv() == "Prod") { - env = "Prod"; - } else { - env = "Dev"; - } } @override void dispose() { super.dispose(); fileNameController.dispose(); - titleTextController.dispose(); - fnameController.dispose(); - lnameController.dispose(); - accessController.dispose(); signtureController.dispose(); userPicFile = null; newSelectedSignaturePic = null; @@ -269,17 +172,16 @@ class _MihMyBusinessUserState extends State { return Consumer( builder: (BuildContext context, MzansiProfileProvider mzansiProfileProvider, Widget? child) { - return MihSingleChildScroll( - child: Padding( - padding: - MzansiInnovationHub.of(context)!.theme.screenType == "desktop" + return Stack( + children: [ + MihSingleChildScroll( + child: Padding( + padding: MzansiInnovationHub.of(context)!.theme.screenType == + "desktop" ? EdgeInsets.symmetric(horizontal: width * 0.2) : EdgeInsets.symmetric(horizontal: width * 0.075), - child: Column( - children: [ - MihForm( - formKey: _formKey, - formFields: [ + child: Column( + children: [ Center( child: MihCircleAvatar( imageFile: mzansiProfileProvider.userProfilePicture, @@ -296,90 +198,8 @@ class _MihMyBusinessUserState extends State { onChange: (_) {}, ), ), - Visibility( - visible: false, - child: MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: fileNameController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Selected File Name", - ), - ), const SizedBox(height: 20), - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: titleTextController, - multiLineInput: false, - requiredText: true, - readOnly: false, - hintText: "Title", - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - ), - const SizedBox(height: 10), - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: fnameController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "First Name", - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - ), - const SizedBox(height: 10), - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: lnameController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Surname", - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - ), - const SizedBox(height: 10), - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: accessController, - multiLineInput: false, - requiredText: true, - hintText: "Access Level", - readOnly: true, - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - ), + buildEmployeeInfoCard(mzansiProfileProvider), const SizedBox(height: 10), Container( width: 300, @@ -393,55 +213,50 @@ class _MihMyBusinessUserState extends State { ), ), Center( - child: MihImageDisplay( - imageFile: newSelectedSignaturePic != null - ? MemoryImage(newSelectedSignaturePic!.bytes!) - : mzansiProfileProvider.businessUserSignature, - width: 300, - height: 200, - editable: true, - fileNameController: signtureController, - userSelectedfile: newSelectedSignaturePic, - onChange: (selectedFile) { - setState(() { - newSelectedSignaturePic = selectedFile; - }); - }, - ), + child: mzansiProfileProvider.hideBusinessUserDetails + ? ClipRRect( + borderRadius: BorderRadius.circular(300 * 0.1), + child: ImageFiltered( + imageFilter: ImageFilter.blur( + sigmaX: 15.0, sigmaY: 15.0), + child: MihImageDisplay( + key: UniqueKey(), + imageFile: mzansiProfileProvider + .businessUserSignature, + width: 300, + height: 200, + editable: false, + fileNameController: signtureController, + userSelectedfile: newSelectedSignaturePic, + onChange: (selectedFile) {}, + ), + ), + ) + : MihImageDisplay( + key: UniqueKey(), + imageFile: + mzansiProfileProvider.businessUserSignature, + width: 300, + height: 200, + editable: false, + fileNameController: signtureController, + userSelectedfile: newSelectedSignaturePic, + onChange: (selectedFile) {}, + ), ), - const SizedBox(height: 10), - Visibility( - visible: false, - child: MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: fileNameController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Selected Signature File", - ), - ), - const SizedBox(height: 15), + const SizedBox(height: 20), Center( child: MihButton( onPressed: () { - if (_formKey.currentState!.validate()) { - submitForm(mzansiProfileProvider); - } else { - MihAlertServices().formNotFilledCompletely(context); - } + editBizUserProfileWindow( + mzansiProfileProvider, width); }, buttonColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), width: 300, child: Text( - "Update", + "Edit Profile", style: TextStyle( color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == @@ -452,12 +267,35 @@ class _MihMyBusinessUserState extends State { ), ), ), - const SizedBox(height: 20), ], ), - ], + ), ), - ), + Positioned( + right: 5, + top: 5, + child: MihButton( + width: 40, + height: 40, + onPressed: () { + mzansiProfileProvider.setHideBusinessUserDetails( + !mzansiProfileProvider.hideBusinessUserDetails); + }, + buttonColor: mzansiProfileProvider.hideBusinessUserDetails + ? MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark") + : MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + child: Icon( + mzansiProfileProvider.hideBusinessUserDetails + ? Icons.visibility + : Icons.visibility_off, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + ), + ], ); }, ); diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart index bd80f937..c0ad5736 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart @@ -3,16 +3,14 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_toggle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_toggle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; @@ -106,7 +104,7 @@ class _MihEditPersonalProfileWindowState message, ); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } @@ -122,7 +120,7 @@ class _MihEditPersonalProfileWindowState if (response == 200) { deleteFileApiCall(mzansiProfileProvider, oldProPicName); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } @@ -138,7 +136,7 @@ class _MihEditPersonalProfileWindowState if (response == 200) { //SQL delete } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } @@ -164,67 +162,36 @@ class _MihEditPersonalProfileWindowState MzansiProfileProvider profileProvider, String message, ) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Successfully Updated Profile", - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - if (profileProvider.user!.type.toLowerCase() == - "business" && - profileProvider.business == null) { - setupBusinessPopUp(profileProvider); - } else { - context.pop(); - context.pop(); - } - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + "Successfully Updated Profile", + message, + [ + MihButton( + onPressed: () { + if (profileProvider.user!.type.toLowerCase() == "business" && + profileProvider.business == null) { + setupBusinessPopUp(profileProvider); + } else { + context.pop(); + context.pop(); + } + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -233,17 +200,31 @@ class _MihEditPersonalProfileWindowState ) { showDialog( context: context, + barrierDismissible: false, builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - MihIcons.businessSetup, - size: 150, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Setup Business Profile?", - alertBody: Column( + return MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + windowBody: Column( children: [ + Icon( + MihIcons.businessSetup, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Text( + "Setup Business Profile?", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), Text( "It looks like this is the first time activating your business account. Would you like to set up your business now or would you like to do it later?", style: TextStyle( @@ -312,48 +293,16 @@ class _MihEditPersonalProfileWindowState ) ], ), - alertColour: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); }, ); } void notUniqueAlert() { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_amber_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Too Slow, That Username is Taken", - alertBody: const Text( - "The username you have entered is already taken by another member of Mzansi. Please choose a different username and try again.", - style: TextStyle( - fontSize: 15, - ), - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + MihAlertServices().errorBasicAlert( + "Too Slow, That Username is Taken", + "The username you have entered is already taken by another member of Mzansi. Please choose a different username and try again.", + context, ); } @@ -546,7 +495,7 @@ class _MihEditPersonalProfileWindowState if (_formKey.currentState!.validate()) { submitForm(mzansiProfileProvider); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart index a03b4364..0143133c 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 @@ -1,11 +1,13 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:provider/provider.dart'; class MzansiProfile extends StatefulWidget { @@ -18,16 +20,50 @@ class MzansiProfile extends StatefulWidget { } class _MzansiProfileState extends State { + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); + setState(() { + _isLoadingInitialData = false; + }); + } + + @override + void initState() { + super.initState(); + _loadInitialData(); + } + @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: context.watch().personalIndex, - onIndexChange: (newIndex) { - context.read().setPersonalIndex(newIndex); + return Consumer( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: profileProvider.personalIndex, + onIndexChange: (newIndex) { + profileProvider.setPersonalIndex(newIndex); + }, + ); }, ); } diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart index 1eabbf3f..526493f9 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart @@ -1,7 +1,7 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart'; import 'package:flutter/material.dart'; 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 index 3707b877..fd976a2c 100644 --- 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 @@ -1,7 +1,7 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart index abfdf4bf..7d411207 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart @@ -1,7 +1,7 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart index c47af691..e21ec303 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart @@ -1,13 +1,12 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; -import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart'; import 'package:provider/provider.dart'; @@ -26,17 +25,10 @@ class _MihPersonalProfileState extends State { void editProfileWindow(double width) { showDialog( context: context, + barrierDismissible: false, builder: (context) => Consumer( builder: (BuildContext context, MzansiProfileProvider mzansiProfileProvider, Widget? child) { - // usernameController.text = mzansiProfileProvider.user!.username; - // fnameController.text = mzansiProfileProvider.user!.fname; - // lnameController.text = mzansiProfileProvider.user!.lname; - // purposeController.text = mzansiProfileProvider.user!.purpose; - // proPicController.text = - // mzansiProfileProvider.user!.pro_pic_path.isNotEmpty - // ? mzansiProfileProvider.user!.pro_pic_path.split("/").last - // : ""; return MihEditPersonalProfileWindow(); }, ), @@ -62,13 +54,7 @@ class _MihPersonalProfileState extends State { return Center( child: Mihloadingcircle(), ); - } - // else if (mzansiProfileProvider.user!.username.isEmpty) { - // editProfileWindow(width); - // } - else { - KenLogger.success( - mzansiProfileProvider.userProfilePicture.toString()); + } else { return MihSingleChildScroll( child: Padding( padding: diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart index 58a005c1..1e9a8171 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart @@ -1,11 +1,11 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -34,7 +34,7 @@ class _MihPersonalProfileViewState extends State { MzansiDirectoryProvider directoryProvider = context.read(); futureImageUrl = MihFileApi.getMinioFileUrl( - directoryProvider.selectedUser!.pro_pic_path, context); + directoryProvider.selectedUser!.pro_pic_path); } @override diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart index 1427074d..a12f410b 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart @@ -1,11 +1,11 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; @@ -22,101 +22,64 @@ class MihPersonalSettings extends StatefulWidget { class _MihPersonalSettingsState extends State { @override Widget build(BuildContext context) { - return MihPackageToolBody( - borderOn: false, - innerHorizontalPadding: 10, - bodyItem: getBody(), - ); - } - - void deleteAccountPopUp(BuildContext ctxtd) { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - return Consumer( - builder: (BuildContext context, - MzansiProfileProvider mzansiProfileProvider, Widget? child) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_amber_rounded, - size: 100, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: - "Are you sure you want to permanently delete your MIH account?", - alertBody: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "This action will remove all of your data, and it cannot be recovered. We understand this is a big decision, so please take a moment to double-check.\n\nIf you're certain, please confirm below. If you've changed your mind, you can simply close this window.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Wrap( - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - MihUserServices.deleteAccount( - mzansiProfileProvider, context); - }, - buttonColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Text( - "Delete", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - onPressed: () { - Navigator.pop(context); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Text( - "Cancel", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ) - ], - ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + return Consumer( + builder: (BuildContext context, + MzansiProfileProvider mzansiProfileProvider, Widget? child) { + return MihPackageToolBody( + borderOn: false, + innerHorizontalPadding: 10, + bodyItem: getBody(mzansiProfileProvider), ); }, ); } - Widget getBody() { + void deleteAccountPopUp( + MzansiProfileProvider mzansiProfileProvider, BuildContext ctxtd) { + MihAlertServices().errorAdvancedAlert( + "Are you sure you want to permanently delete your MIH account?", + "This action will remove all of your data, and it cannot be recovered. We understand this is a big decision, so please take a moment to double-check.\n\nIf you're certain, please confirm below. If you've changed your mind, you can simply close this window.", + [ + MihButton( + onPressed: () { + MihUserServices.deleteAccount(mzansiProfileProvider, context); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Delete", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + Navigator.pop(context); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Cancel", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ctxtd, + ); + } + + Widget getBody(MzansiProfileProvider mzansiProfileProvider) { return MihSingleChildScroll( child: Column( children: [ @@ -142,7 +105,7 @@ class _MihPersonalSettingsState extends State { const SizedBox(height: 10.0), MihButton( onPressed: () { - deleteAccountPopUp(context); + deleteAccountPopUp(mzansiProfileProvider, context); }, buttonColor: MihColors.getRedColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index 7110a464..c9d279fe 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -3,22 +3,19 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_banner_ad.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_card_display.dart'; import 'package:flutter/material.dart'; import 'package:barcode_widget/barcode_widget.dart'; @@ -160,33 +157,16 @@ class _BuildLoyaltyCardListState extends State { if (statusCode == 200) { context.pop(); context.pop(); - // context - // .read() - // .editLoyaltyCard( - // updatedCard: MIHLoyaltyCard( - // idloyalty_cards: - // widget.cardList[index].idloyalty_cards, - // app_id: widget.signedInUser.app_id, - // shop_name: widget.cardList[index].shop_name, - // card_number: _cardNumberController.text, - // favourite: widget.cardList[index].favourite, - // priority_index: - // widget.cardList[index].priority_index, - // nickname: _nicknameController.text, - // ), - // ); - // context.goNamed( - // "mzansiWallet", - // extra: WalletArguments( - // widget.signedInUser, - // 0, - // ), - // ); + MihAlertServices().successBasicAlert( + "Success!", + "You have successfully updated the loyalty card details.", + context, + ); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -216,192 +196,175 @@ class _BuildLoyaltyCardListState extends State { void deleteCardWindow(MzansiProfileProvider mzansiProfileProvider, MzansiWalletProvider walletProvider, BuildContext ctxt, int index) { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - return MIHDeleteMessage( - deleteType: "Loyalty Card", - onTap: () async { - int statusCode = - await MIHMzansiWalletApis.deleteLoyaltyCardAPICall( - walletProvider, - mzansiProfileProvider.user!, - widget.cardList[index].idloyalty_cards, - context, - ); - if (statusCode == 200) { - context.pop(); - context.pop(); - } else { - context.pop(); - internetConnectionPopUp(); - } - }); + MihAlertServices().deleteConfirmationAlert( + "This Card will be deleted permanently from your Mzansi Wallet. Are you certain you want to delete it?", + () async { + int statusCode = await MIHMzansiWalletApis.deleteLoyaltyCardAPICall( + walletProvider, + mzansiProfileProvider.user!, + widget.cardList[index].idloyalty_cards, + context, + ); + if (statusCode == 200) { + context.pop(); + context.pop(); + MihAlertServices().successBasicAlert( + "Success!", + "You have successfully deleted the loyalty card from your Mzansi Wallet.", + context, + ); + } else { + context.pop(); + MihAlertServices().internetConnectionAlert(context); + } }, + context, ); } void addToFavCardWindow(MzansiProfileProvider mzansiProfileProvider, MzansiWalletProvider walletProvider, BuildContext ctxt, int index) { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - return MihPackageAlert( - alertColour: MihColors.getGreenColor( + MihAlertServices().warningAdvancedAlert( + // "Card Added to Favourites", + "Add Card to Favourites?", + "Would you like to add this card to your favourites for quick access?", + // "You have successfully added the loyalty card to your favourites.", + [ + MihButton( + onPressed: () async { + context.pop(); + }, + buttonColor: MihColors.getRedColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - alertIcon: Icon( - Icons.favorite, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 100, + width: 300, + child: Text( + "Cancel", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), ), - alertTitle: "Add to Favourites", - alertBody: Column( - children: [ - Text( - "Are you sure you want to add this card to your favourites?", - style: TextStyle( - fontSize: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox( - height: 15, - ), - MihButton( - onPressed: () async { - int statusCode = - await MIHMzansiWalletApis.updateLoyaltyCardAPICall( - walletProvider, - mzansiProfileProvider.user!, - widget.cardList[index].idloyalty_cards, - widget.cardList[index].shop_name, - "Yes", - _noFavourites, - widget.cardList[index].nickname, - widget.cardList[index].card_number, - ctxt, - ); - if (statusCode == 200) { - context.pop(); - context.pop(); - await MIHMzansiWalletApis.getFavouriteLoyaltyCards( - walletProvider, - mzansiProfileProvider.user!.app_id, - context, - ); - context.read().setToolIndex(1); - } else { - internetConnectionPopUp(); - } - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Add", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], + ), + MihButton( + onPressed: () async { + int statusCode = await MIHMzansiWalletApis.updateLoyaltyCardAPICall( + walletProvider, + mzansiProfileProvider.user!, + widget.cardList[index].idloyalty_cards, + widget.cardList[index].shop_name, + "Yes", + _noFavourites, + widget.cardList[index].nickname, + widget.cardList[index].card_number, + ctxt, + ); + if (statusCode == 200) { + context.pop(); + context.pop(); + await MIHMzansiWalletApis.getFavouriteLoyaltyCards( + walletProvider, + mzansiProfileProvider.user!.app_id, + context, + ); + context.read().setToolIndex(1); + MihAlertServices().successBasicAlert( + "Success!", + "You have successfully added the loyalty card to your favourites.", + context, + ); + } else { + MihAlertServices().internetConnectionAlert(context); + } + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Add", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), ), - ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, + ), + ], + context, ); } void removeFromFavCardWindow(MzansiProfileProvider mzansiProfileProvider, MzansiWalletProvider walletProvider, BuildContext ctxt, int index) { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - return MihPackageAlert( - alertColour: MihColors.getRedColor( + MihAlertServices().warningAdvancedAlert( + "Remove From Favourites?", + "Are you sure you want to remove this card from your favourites?", + [ + MihButton( + onPressed: () async { + int statusCode = await MIHMzansiWalletApis.updateLoyaltyCardAPICall( + walletProvider, + mzansiProfileProvider.user!, + widget.cardList[index].idloyalty_cards, + widget.cardList[index].shop_name, + "", + 0, + widget.cardList[index].nickname, + widget.cardList[index].card_number, + ctxt, + ); + if (statusCode == 200) { + context.pop(); + context.pop(); + await MIHMzansiWalletApis.getFavouriteLoyaltyCards( + walletProvider, + mzansiProfileProvider.user!.app_id, + context, + ); + context.read().setToolIndex(0); + MihAlertServices().successBasicAlert( + "Success!", + "You have successfully removed the loyalty card to your favourites.", + context, + ); + } else { + MihAlertServices().internetConnectionAlert(context); + } + }, + buttonColor: MihColors.getRedColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - alertIcon: Icon( - Icons.favorite_border, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 100, + width: 300, + child: Text( + "Remove", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), ), - alertTitle: "Remove From Favourites", - alertBody: Column( - children: [ - Text( - "Are you sure you want to remove this card from your favourites?", - style: TextStyle( - fontSize: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox( - height: 15, - ), - MihButton( - onPressed: () async { - int statusCode = - await MIHMzansiWalletApis.updateLoyaltyCardAPICall( - walletProvider, - mzansiProfileProvider.user!, - widget.cardList[index].idloyalty_cards, - widget.cardList[index].shop_name, - "", - 0, - widget.cardList[index].nickname, - widget.cardList[index].card_number, - ctxt, - ); - if (statusCode == 200) { - context.pop(); - context.pop(); - await MIHMzansiWalletApis.getFavouriteLoyaltyCards( - walletProvider, - mzansiProfileProvider.user!.app_id, - context, - ); - context.read().setToolIndex(0); - } else { - internetConnectionPopUp(); - } - }, - buttonColor: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Remove", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], + ), + MihButton( + onPressed: () async { + context.pop(); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Text( + "Cancel", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), ), - ); - }, + ), + ], + ctxt, ); } @@ -627,56 +590,31 @@ class _BuildLoyaltyCardListState extends State { KenLogger.success("Brightness set to: $newBrightness"); } else { context.pop(); - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.brightness_7_rounded, - size: 150, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: "Permission Required", - alertBody: Column( - children: [ - Text( - "Sometimes it can be tough to scan your loyalty card if your phone screen is dim. To make sure your scan is successful every time, we need your permission to temporarily increase your screen brightness.\n\nWould you mind enabling this in your device settings?", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - MihButton( - onPressed: () async { - context.pop(); - await ScreenBrightness.instance - .setSystemScreenBrightness(newBrightness); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Text( - "Grant Permission", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - alertColour: MihColors.getSecondaryColor( + MihAlertServices().errorAdvancedAlert( + "Permission Required", + "Sometimes it can be tough to scan your loyalty card if your phone screen is dim. To make sure your scan is successful every time, we need your permission to temporarily increase your screen brightness.\n\nWould you mind enabling this in your device settings?", + [ + MihButton( + onPressed: () async { + context.pop(); + await ScreenBrightness.instance + .setSystemScreenBrightness(newBrightness); + }, + buttonColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + width: 300, + child: Text( + "Grant Permission", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } } else { diff --git a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_add_card_window.dart b/Frontend/lib/mih_packages/mzansi_wallet/components/mih_add_card_window.dart index d97ded85..d006947a 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_add_card_window.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/components/mih_add_card_window.dart @@ -2,15 +2,13 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_card_display.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; @@ -34,68 +32,11 @@ class _MihAddCardWindowState extends State { final TextEditingController _nicknameController = TextEditingController(); final ValueNotifier _shopName = ValueNotifier(""); - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - void successPopUp(String title, String message, int packageIndex) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + MihAlertServices().successBasicAlert( + title, + message, + context, ); } @@ -294,13 +235,7 @@ class _MihAddCardWindowState extends State { onPressed: () async { if (_formKey.currentState!.validate()) { if (_shopController.text == "") { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } else { int statusCode = await MIHMzansiWalletApis .addLoyaltyCardAPICall( @@ -323,11 +258,12 @@ class _MihAddCardWindowState extends State { 0, ); } else { - internetConnectionPopUp(); + MihAlertServices() + .internetConnectionAlert(context); } } } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart b/Frontend/lib/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart index ae1c2491..e889cd29 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MihBarcodeScanner extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart b/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart index 4829c409..a7facfc3 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart @@ -20,142 +20,142 @@ class _MihCardDisplayState extends State { switch (widget.shopName.toLowerCase()) { case "apple tree": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png'); case "best before": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png'); case "checkers": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png'); case "clicks": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png'); case "cotton:on": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png'); case "dis-chem": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png'); case "pick n pay": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png'); case "shoprite": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png'); case "spar": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png'); case "woolworths": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png'); case "makro": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png'); case "fresh stop": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png'); case "panarottis": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png'); case "shell": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png'); case "edgars": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png'); case "jet": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png'); case "spur": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png'); case "infinity": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png'); case "eskom": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png'); case "+more": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png'); case "bp": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png'); case "builders warehouse": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png'); case "exclusive books": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png'); case "pna": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png'); case "pq clothing": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png'); case "rage": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png'); case "sasol": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png'); case "tfg group": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png'); case "toys r us": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png'); case "leroy merlin": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png'); case "signature cosmetics & fragrances": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png'); case "ok foods": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png'); case "choppies": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png'); case "boxer": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png'); case "carrefour": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png'); case "sefalana": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png'); case "big save": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png'); case "justrite": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png'); case "naivas": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png'); case "kero": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png'); case "auchan": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png'); case "woermann brock": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png'); case "continente": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png'); case "fresmart": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png'); case "total energies": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png'); case "engen": return Image.asset( - 'lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png'); + 'lib/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png'); default: return null; } diff --git a/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart b/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart index 91ffcd41..5f1fe247 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart @@ -1,13 +1,14 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tools/mih_cards.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart'; import 'package:provider/provider.dart'; @@ -21,7 +22,24 @@ class MihWallet extends StatefulWidget { } class _MihWalletState extends State { - bool isLoading = true; + bool _isLoadingInitialData = true; + + Future _loadInitialData() async { + setState(() { + _isLoadingInitialData = true; + }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); + MzansiWalletProvider walletProvider = context.read(); + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + await setLoyaltyCards(mzansiProfileProvider, walletProvider); + await setFavouritesCards(mzansiProfileProvider, walletProvider); + setState(() { + _isLoadingInitialData = false; + }); + } Future setLoyaltyCards( MzansiProfileProvider mzansiProfileProvider, @@ -42,33 +60,31 @@ class _MihWalletState extends State { @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - MzansiProfileProvider mzansiProfileProvider = - context.read(); - MzansiWalletProvider walletProvider = - context.read(); - await setLoyaltyCards(mzansiProfileProvider, walletProvider); - await setFavouritesCards(mzansiProfileProvider, walletProvider); - setState(() { - isLoading = false; - }); - }); + _loadInitialData(); } @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: context.watch().toolIndex, - onIndexChange: (newIndex) { - context.read().setToolIndex(newIndex); - // setState(() { - // _selcetedIndex = newValue; - // }); - // print("Index: $_selcetedIndex"); + return Consumer( + builder: (BuildContext context, MzansiWalletProvider walletProvider, + Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: walletProvider.toolIndex, + onIndexChange: (newIndex) { + walletProvider.setToolIndex(newIndex); + }, + ); }, ); } @@ -105,13 +121,6 @@ class _MihWalletState extends State { MihCards(), MihCardFavourites(), ]; - if (isLoading) { - return [ - const Center( - child: Mihloadingcircle(), - ) - ]; - } return toolBodies; } 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 index baa72c54..df42f0bb 100644 --- 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 @@ -1,7 +1,7 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart index 5df6695c..726c445a 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart index 65abd81b..98f5b828 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart @@ -1,20 +1,17 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; -import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_add_card_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart'; import 'package:flutter/material.dart'; import 'package:mobile_scanner/mobile_scanner.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:provider/provider.dart'; class MihCards extends StatefulWidget { @@ -57,67 +54,10 @@ class _MihCardsState extends State { } void successPopUp(String title, String message, int packageIndex) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, + MihAlertServices().successBasicAlert( + title, + message, + context, ); } diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart b/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart index bcbfb931..fbaf353a 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart @@ -1,19 +1,18 @@ import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_access_controls_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_service_calls.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_warning_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -35,19 +34,10 @@ class _BuildPatientsListState extends State { TextEditingController accessStatusController = TextEditingController(); final baseAPI = AppEnviroment.baseApiUrl; - void noAccessWarning() { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "No Access"); - }, - ); - } - Future hasAccessToProfile(MzansiProfileProvider profileProvider, PatientManagerProvider patientManagerProvider, int index) async { var hasAccess = false; - await MIHApiCalls.checkBusinessAccessToPatient( + await MihAccessControlsServices.checkBusinessAccessToPatient( profileProvider.business!.business_id, patientManagerProvider.patientSearchResults[index].app_id) .then((results) { @@ -71,7 +61,7 @@ class _BuildPatientsListState extends State { Future getAccessStatusOfProfile(MzansiProfileProvider profileProvider, PatientManagerProvider patientManagerProvider, int index) async { var accessStatus = ""; - await MIHApiCalls.checkBusinessAccessToPatient( + await MihAccessControlsServices.checkBusinessAccessToPatient( profileProvider.business!.business_id, patientManagerProvider.patientSearchResults[index].app_id) .then((results) { @@ -88,6 +78,12 @@ class _BuildPatientsListState extends State { return accessStatus; } + Future refreshMyPatientList(MzansiProfileProvider mzansiProfileProvider, + PatientManagerProvider patientManagerProvider) async { + await MihPatientServices().getPatientAccessListOfBusiness( + patientManagerProvider, mzansiProfileProvider.business!.business_id); + } + void patientProfileChoicePopUp( MzansiProfileProvider profileProvider, PatientManagerProvider patientManagerProvider, @@ -310,7 +306,11 @@ class _BuildPatientsListState extends State { // "business", // )); } else { - noAccessWarning(); + MihAlertServices().warningAlert( + "Access Pending", + "Your access request is currently being reviewed.\nOnce approved, you'll be able to view patient data.\nPlease follow up with the patient to approve your access request.", + context, + ); } }, buttonColor: MihColors.getGreenColor( @@ -350,6 +350,8 @@ class _BuildPatientsListState extends State { ), context, ); + refreshMyPatientList( + profileProvider, patientManagerProvider); }, buttonColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == @@ -373,7 +375,8 @@ class _BuildPatientsListState extends State { child: Center( child: MihButton( onPressed: () async { - await MIHApiCalls.reapplyPatientAccessAPICall( + await MihAccessControlsServices + .reapplyPatientAccessAPICall( profileProvider.business!.business_id, patientManagerProvider .patientSearchResults[index].app_id, @@ -385,6 +388,8 @@ class _BuildPatientsListState extends State { ), context, ); + refreshMyPatientList( + profileProvider, patientManagerProvider); }, buttonColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart b/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart index c588abf5..692f13bd 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart @@ -1,21 +1,20 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_date_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_time_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_warning_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_date_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_time_field.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -64,80 +63,43 @@ class _BuildPatientsListState extends State { successPopUp("Successfully Added Appointment", "You appointment has been successfully added to your calendar."); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - context.pop(); - setState(() { - dateController.clear(); - timeController.clear(); - idController.clear(); - fnameController.clear(); - lnameController.clear(); - }); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + context.pop(); + setState(() { + dateController.clear(); + timeController.clear(); + idController.clear(); + fnameController.clear(); + lnameController.clear(); + }); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -253,16 +215,10 @@ class _BuildPatientsListState extends State { submitApointment( profileProvider, patientManagerProvider, index); } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -293,18 +249,16 @@ class _BuildPatientsListState extends State { void noAccessWarning( PatientManagerProvider patientManagerProvider, int index) { if (patientManagerProvider.myPaitentList![index].status == "pending") { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "No Access"); - }, + MihAlertServices().warningAlert( + "Access Pending", + "Your access request is currently being reviewed.\nOnce approved, you'll be able to view patient data.\nPlease follow up with the patient to approve your access request.", + context, ); } else { - showDialog( - context: context, - builder: (context) { - return const MIHWarningMessage(warningType: "Access Declined"); - }, + MihAlertServices().errorBasicAlert( + "Access Declined", + "Your request to access the patient's profile has been denied. Please contact the patient directly to inquire about the reason for this restriction.", + context, ); } } @@ -524,6 +478,14 @@ class _BuildPatientsListState extends State { patientManagerProvider.myPaitentList![index].app_id, patientManagerProvider) .then((result) {}); + await MihUserServices() + .getMIHUserDetails( + patientManagerProvider.myPaitentList![index].app_id, context) + .then((user) async { + user; + String url = await MihFileApi.getMinioFileUrl(user!.pro_pic_path); + patientManagerProvider.setSelectedPatientProfilePicUrl(url); + }); patientProfileChoicePopUp( profileProvider, patientManagerProvider, index, width); } else { @@ -538,6 +500,11 @@ class _BuildPatientsListState extends State { ); } + @override + void initState() { + super.initState(); + } + @override void dispose() { dateController.dispose(); diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart b/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart index 438f411d..d0aa5f42 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart @@ -1,8 +1,8 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart b/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart index a795732a..0497e3b9 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart @@ -1,14 +1,14 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patient_access.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patients.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart b/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart index f2b426ee..f35c2fa7 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart @@ -1,14 +1,14 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patient_access.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart b/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart index 3c407aac..dfcae152 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart @@ -1,29 +1,27 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_calendar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_date_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_time_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_calendar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_date_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_time_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/appointment.dart'; +import 'package:mzansi_innovation_hub/mih_objects/appointment.dart'; import 'package:mzansi_innovation_hub/mih_packages/calendar/builder/build_appointment_list.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -267,7 +265,7 @@ class _WaitingRoomState extends State { patientManagerProvider.setPatientManagerIndex(1); context.pop(); }, - buttonColor: MihColors.getGreenColor( + buttonColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), width: 300, child: Text( @@ -286,7 +284,7 @@ class _WaitingRoomState extends State { patientManagerProvider.setPatientManagerIndex(2); context.pop(); }, - buttonColor: MihColors.getGreenColor( + buttonColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), width: 300, child: Text( @@ -306,7 +304,7 @@ class _WaitingRoomState extends State { addAppointmentWindow( profileProvider, mihCalendarProvider, width); }, - buttonColor: MihColors.getGreenColor( + buttonColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), width: 300, child: Text( @@ -411,7 +409,7 @@ class _WaitingRoomState extends State { addAppointmentCall( profileProvider, mihCalendarProvider); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -463,87 +461,45 @@ class _WaitingRoomState extends State { "You appointment has been successfully added to your calendar."); _loadInitialAppointments(); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } checkforchange(); } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - setState(() { - _appointmentDateController.clear(); - _appointmentTimeController.clear(); - _appointmentTitleController.clear(); - _appointmentDescriptionIDController.clear(); - }); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + setState(() { + _appointmentDateController.clear(); + _appointmentTimeController.clear(); + _appointmentTitleController.clear(); + _appointmentDescriptionIDController.clear(); + }); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart b/Frontend/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart index ff3add3b..0a6091d6 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart @@ -1,14 +1,16 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; import 'package:provider/provider.dart'; @@ -23,53 +25,68 @@ class PatManager extends StatefulWidget { } class _PatManagerState extends State { - bool isLoading = true; + bool _isLoadingInitialData = true; - Future initialisePatientData() async { + Future _loadInitialData() async { setState(() { - isLoading = true; + _isLoadingInitialData = true; }); - MzansiProfileProvider profileProvider = + MzansiProfileProvider mzansiProfileProvider = context.read(); PatientManagerProvider patientManagerProvider = context.read(); MihCalendarProvider mihCalendarProvider = context.read(); + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); patientManagerProvider.setPersonalMode(false); - if (profileProvider.business != null) { + if (mzansiProfileProvider.business != null) { await MihMzansiCalendarApis.getBusinessAppointments( - profileProvider.business!.business_id, + mzansiProfileProvider.business!.business_id, false, mihCalendarProvider.selectedDay, mihCalendarProvider, ); await MihPatientServices().getPatientAccessListOfBusiness( - patientManagerProvider, profileProvider.business!.business_id); + patientManagerProvider, mzansiProfileProvider.business!.business_id); } setState(() { - isLoading = false; + _isLoadingInitialData = false; }); } @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - initialisePatientData(); - }); + _loadInitialData(); } @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getActionButton(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: - context.watch().patientManagerIndex, - onIndexChange: (newValue) { - context.read().setPatientManagerIndex(newValue); + return Consumer( + builder: + (BuildContext context, PatientManagerProvider value, Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getActionButton(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: + context.watch().patientManagerIndex, + onIndexChange: (newValue) { + context + .read() + .setPatientManagerIndex(newValue); + }, + ); }, ); } diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart index aec587b9..b70857df 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart @@ -1,22 +1,21 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_claim_statement_generation_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_icd10_code_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_date_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_radio_options.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/icd10_code.dart.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_date_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_radio_options.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_objects/icd10_code.dart.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -389,16 +388,10 @@ class _ClaimStatementWindowState extends State { AppEnviroment.getEnv(), context); } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/full_screen_file.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/full_screen_file.dart deleted file mode 100644 index f5be6375..00000000 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/full_screen_file.dart +++ /dev/null @@ -1,364 +0,0 @@ -import 'dart:async'; - -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import '../../../../main.dart'; -import 'package:syncfusion_flutter_core/theme.dart'; -import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; -import "package:universal_html/html.dart" as html; -import 'package:http/http.dart' as http; - -import 'package:printing/printing.dart'; -import 'package:fl_downloader/fl_downloader.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'; - -class FullScreenFileViewer extends StatefulWidget { - final FileViewArguments arguments; - const FullScreenFileViewer({ - super.key, - required this.arguments, - }); - - @override - State createState() => _FullScreenFileViewerState(); -} - -class _FullScreenFileViewerState extends State { - late PdfViewerController pdfViewerController = PdfViewerController(); - int currentPageCount = 0; - int currentPage = 0; - double startZoomLevel = 1.0; - double zoomOut = 0; - - int progress = 0; - late StreamSubscription progressStream; - - String getExtType(String path) { - //print(pdfLink.split(".")[1]); - return path.split(".").last; - } - - String getFileName(String path) { - //print(pdfLink.split(".")[1]); - return path.split("/").last; - } - - void onPageSelect() { - setState(() { - currentPage = pdfViewerController.pageNumber; - }); - } - - void printDocument() async { - print("Printing ${widget.arguments.path.split("/").last}"); - http.Response response = await http.get(Uri.parse(widget.arguments.link)); - var pdfData = response.bodyBytes; - Navigator.of(context).pushNamed( - '/file-veiwer/print-preview', - arguments: pdfData, - ); - // Navigator.of(context).push( - // MaterialPageRoute( - // builder: (context) => PdfPreview( - // initialPageFormat: PdfPageFormat.a4, - // build: (format) => pdfData, - // ), - // ), - // ); - // try { - // await Printing.layoutPdf( - // onLayout: (PdfPageFormat format) async => pdfData); - // } on Exception catch (_) { - // print("Print Error"); - // } - } - - void shareDocument() async { - http.Response response = await http.get(Uri.parse(widget.arguments.link)); - var pdfData = response.bodyBytes; - await Printing.sharePdf( - bytes: pdfData, filename: widget.arguments.path.split("/").last); - } - - MIHAction getActionButton() { - return MIHAction( - icon: const Icon( - Icons.fullscreen_exit, - ), - iconSize: 35, - onTap: () { - Navigator.pop(context); - }, - ); - } - - MIHHeader getHeader(double width) { - bool isPDF; - if (getExtType(widget.arguments.path).toLowerCase() == "pdf") { - isPDF = true; - } else { - isPDF = false; - } - return MIHHeader( - headerAlignment: MainAxisAlignment.end, - headerItems: [ - Visibility( - visible: isPDF, - child: IconButton( - iconSize: 30, - padding: const EdgeInsets.all(0), - onPressed: () { - pdfViewerController.previousPage(); - //print(pdfViewerController.); - //if (pdfViewerController.pageNumber > 1) { - setState(() { - currentPage = pdfViewerController.pageNumber; - }); - // } - }, - icon: Icon( - Icons.arrow_back, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ), - Visibility( - visible: isPDF, - child: Text( - "$currentPage / $currentPageCount", - style: const TextStyle(fontSize: 20), - ), - ), - Visibility( - visible: isPDF, - child: IconButton( - iconSize: 30, - padding: const EdgeInsets.all(0), - onPressed: () { - pdfViewerController.nextPage(); - //print(pdfViewerController.pageNumber); - //if (pdfViewerController.pageNumber < currentPageCount) { - setState(() { - currentPage = pdfViewerController.pageNumber; - }); - //} - }, - icon: Icon( - Icons.arrow_forward, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ), - Visibility( - visible: isPDF, - child: IconButton( - iconSize: 30, - padding: const EdgeInsets.all(0), - onPressed: () { - if (zoomOut > 0) { - setState(() { - zoomOut = zoomOut - 100; - }); - } else { - setState(() { - pdfViewerController.zoomLevel = startZoomLevel + 0.25; - startZoomLevel = pdfViewerController.zoomLevel; - }); - } - }, - icon: Icon( - Icons.zoom_in, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ), - Visibility( - visible: isPDF, - child: IconButton( - iconSize: 30, - padding: const EdgeInsets.all(0), - onPressed: () { - if (pdfViewerController.zoomLevel > 1) { - setState(() { - pdfViewerController.zoomLevel = startZoomLevel - 0.25; - startZoomLevel = pdfViewerController.zoomLevel; - }); - } else { - if (zoomOut < (width - 100)) { - setState(() { - zoomOut = zoomOut + 100; - }); - } - } - }, - icon: Icon( - Icons.zoom_out, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ), - // IconButton( - // iconSize: 30, - // padding: const EdgeInsets.all(0), - // onPressed: () { - // printDocument(); - // }, - // icon: Icon( - // Icons.print, - // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // ), - // ), - IconButton( - iconSize: 30, - padding: const EdgeInsets.all(0), - onPressed: () { - if (MzansiInnovationHub.of(context)!.theme.getPlatform() == "Web") { - html.window.open( - widget.arguments.link, - // '${AppEnviroment.baseFileUrl}/mih/$filePath', - 'download'); - } else { - nativeFileDownload( - widget.arguments.link, - ); - } - }, - icon: Icon( - Icons.download, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ], - ); - } - - MIHBody getBody(double width, double height) { - Widget fileViewer; - if (getExtType(widget.arguments.path).toLowerCase() == "pdf") { - fileViewer = SizedBox( - width: width - zoomOut, - height: height - 70, - child: SfPdfViewerTheme( - data: SfPdfViewerThemeData( - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - child: SfPdfViewer.network( - widget.arguments.link, - controller: pdfViewerController, - initialZoomLevel: startZoomLevel, - pageSpacing: 2, - maxZoomLevel: 5, - interactionMode: PdfInteractionMode.pan, - onDocumentLoaded: (details) { - setState(() { - currentPage = pdfViewerController.pageNumber; - currentPageCount = pdfViewerController.pageCount; - }); - }, - ), - ), - ); - } else { - fileViewer = SizedBox( - width: width, - height: height - 70, - child: InteractiveViewer( - maxScale: 5.0, - //minScale: 0., - child: Image.network(widget.arguments.link), - ), - ); - } - return MIHBody( - borderOn: false, - bodyItems: [ - fileViewer, - ], - ); - } - - void mihLoadingPopUp() { - showDialog( - context: context, - builder: (context) { - return const Mihloadingcircle(); - }, - ); - } - - void nativeFileDownload(String fileLink) async { - var permission = await FlDownloader.requestPermission(); - if (permission == StoragePermissionStatus.granted) { - try { - mihLoadingPopUp(); - await FlDownloader.download(fileLink); - Navigator.of(context).pop(); - } on Exception catch (error) { - Navigator.of(context).pop(); - print(error); - } - } else { - print("denied"); - } - } - - @override - void dispose() { - pdfViewerController.dispose(); - progressStream.cancel(); - super.dispose(); - } - - @override - void initState() { - //pdfViewerController = widget.arguments.pdfViewerController!; - pdfViewerController.addListener(onPageSelect); - FlDownloader.initialize(); - progressStream = FlDownloader.progressStream.listen((event) { - if (event.status == DownloadStatus.successful) { - setState(() { - progress = event.progress; - }); - //Navigator.of(context).pop(); - print("Progress $progress%: Success Downloading"); - FlDownloader.openFile(filePath: event.filePath); - } else if (event.status == DownloadStatus.failed) { - print("Progress $progress%: Error Downloading"); - } else if (event.status == DownloadStatus.running) { - print("Progress $progress%: Download Running"); - } - }); - super.initState(); - } - - @override - Widget build(BuildContext context) { - final Size size = MediaQuery.sizeOf(context); - double width = size.width; - double height = size.height; - - return MIHLayoutBuilder( - actionButton: getActionButton(), - header: getHeader(width), - secondaryActionButton: null, - body: getBody(width, height), - actionDrawer: null, - secondaryActionDrawer: null, - bottomNavBar: null, - pullDownToRefresh: false, - onPullDown: () async {}, - ); - } -} diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart index c6699842..59d25a3b 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart @@ -1,9 +1,9 @@ import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/icd10_code.dart.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_objects/icd10_code.dart.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart'; import 'package:flutter/material.dart'; diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/medicine_search.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/medicine_search.dart index f3420c85..ab3a5d0d 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/medicine_search.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/medicine_search.dart @@ -1,11 +1,11 @@ import 'dart:convert'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/medicine.dart'; +import 'package:mzansi_innovation_hub/mih_objects/medicine.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:supertokens_flutter/http.dart' as http; @@ -38,20 +38,11 @@ class _MedicineSearchState extends State { // medicines.forEach((element) => meds.add(element.name)); return medicines; } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); throw Exception('failed to load medicine'); } } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - @override void dispose() { super.dispose(); diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart index 87defc63..afbada89 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart @@ -2,13 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_toggle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_toggle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; @@ -67,7 +66,7 @@ class _MihEditPatientDetailsWindowState "${fnameController.text} ${lnameController.text}'s information has been updated successfully! Their medical records and details are now current.", ); } else { - MihAlertServices().errorAlert( + MihAlertServices().errorBasicAlert( "Error Updating Profile", "There was an error updating your profile. Please try again later.", context, @@ -76,71 +75,31 @@ class _MihEditPatientDetailsWindowState } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - // context.goNamed( - // "patientProfile", - // extra: PatientViewArguments( - // widget.signedInUser, - // widget.selectedPatient, - // null, - // null, - // "personal", - // ), - // ); - context.pop(); - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -426,7 +385,7 @@ class _MihEditPatientDetailsWindowState if (_formKey.currentState!.validate()) { updatePatientApiCall(patientManagerProvider); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -547,7 +506,7 @@ class _MihEditPatientDetailsWindowState if (_formKey.currentState!.validate()) { updatePatientApiCall(patientManagerProvider); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } } }, diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/prescip_input.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/prescip_input.dart index 543d26a7..cde00c8e 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/prescip_input.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/components/prescip_input.dart @@ -1,23 +1,24 @@ import 'dart:convert'; +import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_numeric_stepper.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_numeric_stepper.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/components/medicine_search.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/perscription.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/patients.dart'; +import 'package:mzansi_innovation_hub/mih_objects/perscription.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; +import 'package:provider/provider.dart'; import 'package:supertokens_flutter/http.dart' as http; class PrescripInput extends StatefulWidget { @@ -95,7 +96,9 @@ class _PrescripInputState extends State { "30" ]; - Future generatePerscription() async { + Future generatePerscription( + PatientManagerProvider patManProvider, + ) async { //start loading circle showDialog( context: context, @@ -103,12 +106,11 @@ class _PrescripInputState extends State { return const Mihloadingcircle(); }, ); - DateTime now = new DateTime.now(); + DateTime now = DateTime.now(); // DateTime date = new DateTime(now.year, now.month, now.day); String fileName = "Perscription-${widget.selectedPatient.first_name} ${widget.selectedPatient.last_name}-${now.toString().substring(0, 19)}.pdf" .replaceAll(RegExp(r' '), '-'); - var response1 = await http.post( Uri.parse("${AppEnviroment.baseApiUrl}/minio/generate/perscription/"), headers: { @@ -148,65 +150,40 @@ class _PrescripInputState extends State { ); //print(response2.statusCode); if (response2.statusCode == 201) { - setState(() { - //To do - widget.medicineController.clear(); - widget.dosageController.clear(); - widget.timesDailyController.clear(); - widget.noDaysController.clear(); - widget.timesDailyController.clear(); - widget.noRepeatsController.clear(); - widget.quantityController.clear(); - widget.outputController.clear(); - // futueFiles = fetchFiles(); - }); + //To do + widget.medicineController.clear(); + widget.dosageController.clear(); + widget.timesDailyController.clear(); + widget.noDaysController.clear(); + widget.timesDailyController.clear(); + widget.noRepeatsController.clear(); + widget.quantityController.clear(); + widget.outputController.clear(); + // futueFiles = fetchFiles(); // end loading circle - Navigator.of(context).pop(); - Navigator.of(context).pop(); - Navigator.of(context).pop(); - Navigator.of(context).pushNamed('/patient-manager/patient', - arguments: PatientViewArguments( - widget.signedInUser, - widget.selectedPatient, - widget.businessUser, - widget.business, - "business", - )); + context.pop(); + context.pop(); String message = "The perscription $fileName has been successfully generated and added to ${widget.selectedPatient.first_name} ${widget.selectedPatient.last_name}'s record. You can now access and download it for their use."; - successPopUp(message); + + await MihPatientServices().getPatientDocuments(patManProvider); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - - void successPopUp(String message) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - void getMedsPopUp(TextEditingController medSearch) { showDialog( context: context, + barrierDismissible: false, builder: (context) { return MedicineSearch( searchVlaue: medSearch, @@ -453,16 +430,10 @@ class _PrescripInputState extends State { widget.noRepeatsController.text = "0"; }); } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getSecondaryColor( @@ -485,7 +456,7 @@ class _PrescripInputState extends State { ); } - Widget displayPerscList() { + Widget displayPerscList(PatientManagerProvider patManProvider) { return Column( children: [ Container( @@ -547,15 +518,9 @@ class _PrescripInputState extends State { onPressed: () async { if (perscriptionObjOutput.isNotEmpty) { //print(jsonEncode(perscriptionObjOutput)); - await generatePerscription(); - Navigator.pop(context); + await generatePerscription(patManProvider); } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -593,18 +558,23 @@ class _PrescripInputState extends State { var size = MediaQuery.of(context).size; width = size.width; height = size.height; - return Wrap( - direction: Axis.horizontal, - alignment: WrapAlignment.center, - spacing: 10, - runSpacing: 10, - // mainAxisAlignment: MainAxisAlignment.center, - // mainAxisSize: MainAxisSize.max, - // crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox(width: 500, child: displayMedInput()), - displayPerscList(), - ], + return Consumer( + builder: (BuildContext context, PatientManagerProvider patManProvider, + Widget? child) { + return Wrap( + direction: Axis.horizontal, + alignment: WrapAlignment.center, + spacing: 10, + runSpacing: 10, + // mainAxisAlignment: MainAxisAlignment.center, + // mainAxisSize: MainAxisSize.max, + // crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(width: 500, child: displayMedInput()), + displayPerscList(patManProvider), + ], + ); + }, ); } } diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart index 30bec822..026900ca 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart @@ -4,17 +4,16 @@ import 'package:fl_downloader/fl_downloader.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_file_viewer_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -45,61 +44,12 @@ class _BuildClaimStatementFileListState String teporaryFileUrl = ""; await MihFileApi.getMinioFileUrl( filePath, - context, ).then((value) { teporaryFileUrl = value; }); return teporaryFileUrl; } - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - - void successPopUp(String message) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - - // void deleteFilePopUp(String filePath, int fileID) { - // showDialog( - // context: context, - // barrierDismissible: false, - // builder: (context) => MIHDeleteMessage( - // deleteType: "File", - // onTap: () async { - // //API Call here - // await MIHClaimStatementGenerationApi - // .deleteClaimStatementFilesByFileID( - // PatientViewArguments( - // widget.signedInUser, - // widget.selectedPatient, - // widget.businessUser, - // widget.business, - // "business", - // ), - // widget.env, - // filePath, - // fileID, - // context, - // ); - // }, - // ), - // ); - // } - String getFileName(String path) { //print(pdfLink.split(".")[1]); return path.split("/").last; @@ -217,10 +167,6 @@ class _BuildClaimStatementFileListState context.pop(); context.pushNamed( 'fileViewer', - extra: FileViewArguments( - url, - filePath, - ), ); // printDocument(url, filePath); }, @@ -331,6 +277,12 @@ class _BuildClaimStatementFileListState itemCount: patientManagerProvider.patientClaimsDocuments!.length, itemBuilder: (context, index) { return ListTile( + leading: Icon( + Icons.picture_as_pdf, + size: 50, + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), title: Text( patientManagerProvider .patientClaimsDocuments![index].file_name, @@ -352,13 +304,15 @@ class _BuildClaimStatementFileListState // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), // ), onTap: () async { + MihFileViewerProvider fileViewerProvider = + context.read(); await getFileUrlApiCall(patientManagerProvider .patientClaimsDocuments![index].file_path) .then((urlHere) { //print(url); - setState(() { - fileUrl = urlHere; - }); + fileViewerProvider.setFilePath(patientManagerProvider + .patientClaimsDocuments![index].file_path); + fileViewerProvider.setFileLink(urlHere); }); viewFilePopUp( @@ -369,7 +323,7 @@ class _BuildClaimStatementFileListState .patientClaimsDocuments![index].file_path, patientManagerProvider.patientClaimsDocuments![index] .idclaim_statement_file, - fileUrl); + fileViewerProvider.fileLink); }, ); }, diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart index 454ed488..e78add87 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:syncfusion_flutter_core/theme.dart'; diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart index a7b38555..20abecb5 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart @@ -2,19 +2,20 @@ import 'dart:async'; import 'package:fl_downloader/fl_downloader.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:go_router/go_router.dart'; +import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_file_viewer_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -43,114 +44,12 @@ class _BuildFilesListState extends State { String teporaryFileUrl = ""; await MihFileApi.getMinioFileUrl( filePath, - context, ).then((value) { teporaryFileUrl = value; }); return teporaryFileUrl; } - // Future deleteFileApiCall(PatientManagerProvider patientManagerProvider, - // String filePath, int fileID) async { - // var response = await MihFileApi.deleteFile( - // patientManagerProvider.selectedPatient!.app_id, - // widget.env, - // "patient_files", - // filePath.split("/").last, - // context, - // ); - // if (response == 200) { - // // delete file from database - // await deletePatientFileLocationToDB(fileID); - // } else { - // String message = - // "The File has not been deleted successfully. Please try again."; - // successPopUp(message); - // } - // } - - // Future deletePatientFileLocationToDB(int fileID) async { - // showDialog( - // context: context, - // builder: (context) { - // return const Mihloadingcircle(); - // }, - // ); - // var response2 = await http.delete( - // Uri.parse("$baseAPI/patient_files/delete/"), - // headers: { - // "Content-Type": "application/json; charset=UTF-8" - // }, - // body: jsonEncode({ - // "idpatient_files": fileID, - // "env": widget.env, - // }), - // ); - // if (response2.statusCode == 200) { - // context.pop(); //Remove Loading Dialog - // context.pop(); //Remove Delete Dialog - // context.pop(); //Remove File View Dialog - // context.pop(); //Remove File List Dialog - // //print(widget.business); - // if (widget.business == null) { - // context.pushNamed('patientManagerPatient', - // extra: PatientViewArguments( - // widget.signedInUser, - // widget.selectedPatient, - // widget.businessUser, - // widget.business, - // "personal")); - // } else { - // context.pushNamed('patientManagerPatient', - // extra: PatientViewArguments( - // widget.signedInUser, - // widget.selectedPatient, - // widget.businessUser, - // widget.business, - // "business")); - // } - // String message = - // "The File has been deleted successfully. This means it will no longer be visible on your and cannot be used for future appointments."; - // successPopUp(message); - // } else { - // internetConnectionPopUp(); - // } - // } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - - void successPopUp(String message) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - - // void deleteFilePopUp(String filePath, int fileID) { - // showDialog( - // context: context, - // barrierDismissible: false, - // builder: (context) => MIHDeleteMessage( - // deleteType: "File", - // onTap: () async { - // await deleteFileApiCall(filePath, fileID); - // }, - // ), - // ); - // } - String getFileName(String path) { //print(pdfLink.split(".")[1]); return path.split("/").last; @@ -263,10 +162,6 @@ class _BuildFilesListState extends State { context.pop(); context.pushNamed( 'fileViewer', - extra: FileViewArguments( - url, - filePath, - ), ); }, ), @@ -324,6 +219,53 @@ class _BuildFilesListState extends State { ); } + Widget getFileIcon(String extension) { + switch (extension) { + case ("pdf"): + return Icon( + Icons.picture_as_pdf, + size: 50, + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + case ("jpeg"): + return Icon( + FontAwesomeIcons.image, + size: 50, + color: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + case ("jpg"): + return Icon( + FontAwesomeIcons.image, + size: 50, + color: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + case ("png"): + return Icon( + FontAwesomeIcons.image, + size: 50, + color: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + case ("gif"): + return Icon( + FontAwesomeIcons.image, + size: 50, + color: MihColors.getOrangeColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + default: + return Icon( + Icons.image_not_supported, + size: 50, + color: MihColors.getSilverColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + } + } + @override void dispose() { // TODO: implement dispose @@ -367,7 +309,13 @@ class _BuildFilesListState extends State { }, itemCount: patientManagerProvider.patientDocuments!.length, itemBuilder: (context, index) { + String fileExtension = patientManagerProvider + .patientDocuments![index].file_name + .split(".")[1] + .toLowerCase(); + KenLogger.success(fileExtension); return ListTile( + leading: getFileIcon(fileExtension), title: Text( patientManagerProvider.patientDocuments![index].file_name, style: TextStyle( @@ -387,13 +335,15 @@ class _BuildFilesListState extends State { // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), // ), onTap: () async { + MihFileViewerProvider fileViewerProvider = + context.read(); await getFileUrlApiCall(patientManagerProvider .patientDocuments![index].file_path) .then((urlHere) { //print(url); - setState(() { - fileUrl = urlHere; - }); + fileViewerProvider.setFilePath(patientManagerProvider + .patientDocuments![index].file_path); + fileViewerProvider.setFileLink(urlHere); }); viewFilePopUp( @@ -402,7 +352,7 @@ class _BuildFilesListState extends State { patientManagerProvider.patientDocuments![index].file_path, patientManagerProvider .patientDocuments![index].idpatient_files, - fileUrl); + fileViewerProvider.fileLink); }, ); }, diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart index 9412acec..dfc7cf16 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart @@ -1,7 +1,7 @@ import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/icd10_code.dart.dart'; +import 'package:mzansi_innovation_hub/mih_objects/icd10_code.dart.dart'; import 'package:flutter/material.dart'; class BuildICD10CodeList extends StatefulWidget { diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart index 7f0c0db8..235c4617 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart @@ -1,5 +1,5 @@ import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/medicine.dart'; +import 'package:mzansi_innovation_hub/mih_objects/medicine.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart index 832d0d9f..6bbc2b10 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart @@ -1,19 +1,17 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/notes.dart'; +import 'package:mzansi_innovation_hub/mih_objects/notes.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; import 'package:provider/provider.dart'; @@ -46,89 +44,47 @@ class _BuildNotesListState extends State { "The note has been deleted successfully. This means it will no longer be visible on your and cannot be used for future appointments."; successPopUp("Successfuly Deleted", message); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } void deletePatientPopUp( PatientManagerProvider patientManagerProvider, int NoteId) { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) => MIHDeleteMessage( - deleteType: "Note", - onTap: () { - deleteNoteApiCall(patientManagerProvider, NoteId); - }, - ), + MihAlertServices().deleteConfirmationAlert( + "This note will be deleted permanently. Are you certain you want to delete it?", + () { + deleteNoteApiCall(patientManagerProvider, NoteId); + }, + context, ); } @@ -282,6 +238,12 @@ class _BuildNotesListState extends State { notePreview = "${notePreview.substring(0, 30)} ..."; } return ListTile( + leading: Icon( + Icons.note, + size: 50, + color: MihColors.getGoldColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), title: Text( "${patientManagerProvider.consultationNotes![index].note_name}\n${patientManagerProvider.consultationNotes![index].doc_office} - ${patientManagerProvider.consultationNotes![index].doctor}", style: TextStyle( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart index e5722c52..c22b49f0 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart @@ -1,14 +1,10 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; -import 'package:provider/provider.dart'; class PatientProfileTile extends StatefulWidget { final PatientViewArguments arguments; @@ -30,27 +26,7 @@ class _PatientProfileTileState extends State { return MihPackageTile( authenticateUser: true, onTap: () async { - PatientManagerProvider patientManagerProvider = - context.read(); - MzansiProfileProvider profileProvider = - context.read(); - String? app_id = profileProvider.user!.app_id; - if (patientManagerProvider.selectedPatient == null) { - await MihPatientServices() - .getPatientDetails(app_id, patientManagerProvider); - } - patientManagerProvider.setPersonalMode(true); - if (patientManagerProvider.selectedPatient != null) { - context.goNamed( - 'patientProfile', - ); - } else { - context.goNamed("patientProfileSetup"); - } - // Navigator.of(context).pushNamed( - // '/patient-profile', - // arguments: widget.arguments, - // ); + context.goNamed("patientProfile"); }, appName: "Patient Profile", appIcon: Icon( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart index 8477da3d..e28a3bae 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart @@ -1,10 +1,10 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart'; import 'package:flutter/material.dart'; diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart index fdd28fbe..02858370 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart @@ -1,19 +1,20 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:go_router/go_router.dart'; +import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart'; import 'package:flutter/material.dart'; @@ -38,11 +39,42 @@ class _PatientConsultationState extends State { String endpoint = "${AppEnviroment.baseApiUrl}/notes/patients/"; final _formKey = GlobalKey(); - void addNotePopUp(MzansiProfileProvider profileProvider, double width) { - DateTime now = new DateTime.now(); - DateTime date = new DateTime(now.year, now.month, now.day); + Future addPatientNoteAPICall( + MzansiProfileProvider profileProvider, + PatientManagerProvider patManProvider, + ) async { + int statuscode = await MihPatientServices().addPatientNoteAPICall( + titleController.text, + noteTextController.text, + profileProvider, + patManProvider, + ); + if (statuscode == 201) { + context.pop(); + MihAlertServices().successBasicAlert( + "Success!", + "Note added successfully.", + context, + ); + titleController.clear(); + noteTextController.clear(); + officeController.clear(); + dateController.clear(); + doctorController.clear(); + } else { + MihAlertServices().internetConnectionAlert(context); + } + } + + void addNotePopUp( + MzansiProfileProvider profileProvider, + PatientManagerProvider patManProvider, + double width, + ) { + DateTime now = DateTime.now(); + DateTime date = DateTime(now.year, now.month, now.day); var title = ""; - print("Business User: ${profileProvider.businessUser}"); + KenLogger.success("Business User: ${profileProvider.businessUser}"); if (profileProvider.businessUser?.title == "Doctor") { title = "Dr."; } @@ -59,7 +91,7 @@ class _PatientConsultationState extends State { fullscreen: false, windowTitle: "Add Note", onWindowTapClose: () { - Navigator.pop(context); + context.pop(context); titleController.clear(); noteTextController.clear(); }, @@ -172,10 +204,10 @@ class _PatientConsultationState extends State { child: MihButton( onPressed: () { if (_formKey.currentState!.validate()) { - // addPatientNoteAPICall(); - Navigator.pop(context); + addPatientNoteAPICall( + profileProvider, patManProvider); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -223,27 +255,6 @@ class _PatientConsultationState extends State { } } - void successPopUp(String message) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - @override void dispose() { titleController.dispose(); @@ -314,7 +325,8 @@ class _PatientConsultationState extends State { "Dark"), onTap: () { // addConsultationNotePopUp(); - addNotePopUp(profileProvider, width); + addNotePopUp( + profileProvider, patientManagerProvider, width); }, ) ], diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart index 7f278050..9354feb0 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart @@ -1,24 +1,22 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_date_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_date_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/components/prescip_input.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart'; @@ -57,12 +55,7 @@ class _PatientDocumentsState extends State { if (isFileFieldsFilled()) { await uploadSelectedFile(patientManagerProvider, selected); } else { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Input Error"); - }, - ); + MihAlertServices().inputErrorAlert(context); } } @@ -87,7 +80,7 @@ class _PatientDocumentsState extends State { "The file $fname has been successfully generated and added to ${patientManagerProvider.selectedPatient!.first_name} ${patientManagerProvider.selectedPatient!.last_name}'s record. You can now access and download it for their use."; successPopUp("Successfully Uplouded File", message); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } @@ -103,7 +96,7 @@ class _PatientDocumentsState extends State { if (response == 200) { await addPatientFileLocationToDB(patientManagerProvider, file); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } @@ -132,9 +125,10 @@ class _PatientDocumentsState extends State { context.pop(); //Loading removal String message = "The medical certificate $fileName has been successfully generated and added to ${patientManagerProvider.selectedPatient!.first_name} ${patientManagerProvider.selectedPatient!.last_name}'s record. You can now access and download it for their use."; + await MihPatientServices().getPatientDocuments(patientManagerProvider); successPopUp("Successfully Generated Certificate", message); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } @@ -222,9 +216,8 @@ class _PatientDocumentsState extends State { if (_formKey.currentState!.validate()) { submitDocUploadForm(patientManagerProvider); // uploadSelectedFile(selected); - Navigator.pop(context); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -310,7 +303,7 @@ class _PatientDocumentsState extends State { profileProvider, patientManagerProvider); //Navigator.pop(context); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( @@ -503,66 +496,31 @@ class _PatientDocumentsState extends State { } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - context.pop(); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart index a5a04253..c73f779b 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart @@ -1,14 +1,13 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_toggle.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart'; import 'package:provider/provider.dart'; @@ -23,121 +22,132 @@ class PatientInfo extends StatefulWidget { } class _PatientInfoState extends State { - final idController = TextEditingController(); - final fnameController = TextEditingController(); - final lnameController = TextEditingController(); - final cellController = TextEditingController(); - final emailController = TextEditingController(); - final medNoController = TextEditingController(); - final medNameController = TextEditingController(); - final medSchemeController = TextEditingController(); - final addressController = TextEditingController(); - final medAidController = TextEditingController(); - final medMainMemController = TextEditingController(); - final medAidCodeController = TextEditingController(); - final _formKey = GlobalKey(); double textFieldWidth = 300; late String medAid; late bool medAidPosition; - Widget getPatientDetailsField() { - return Center( - child: Wrap( - spacing: 10, - runSpacing: 10, + String getDisplayText( + PatientManagerProvider patientManagerProvider, String originalText) { + int textLength = originalText.length >= 13 ? 13 : 6; + String displayText = ""; + if (patientManagerProvider.hidePatientDetails) { + for (int i = 0; i < textLength; i++) { + displayText += "●"; + } + } else { + displayText = originalText; + } + return displayText; + } + + Widget buildPatientInfoCard(PatientManagerProvider patientManagerProvider) { + TextStyle titleStyle = TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + TextStyle subtitleStyle = TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + TextStyle subtitleHeadingStyle = TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + return MihPackageWindow( + fullscreen: false, + windowTitle: "Patient Details Card", + onWindowTapClose: null, + backgroundColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + foregroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + windowBody: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: idController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "ID No.", - // validator: (value) { - // return MihValidationServices().isEmpty(value); - // }, + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "${patientManagerProvider.selectedPatient!.first_name} ${patientManagerProvider.selectedPatient!.last_name}", + style: titleStyle, + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "ID No: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: getDisplayText(patientManagerProvider, + patientManagerProvider.selectedPatient!.id_no), + style: subtitleStyle, + ), + ], + ), + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "Cell No: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: getDisplayText( + patientManagerProvider, + patientManagerProvider + .selectedPatient!.cell_no), + style: subtitleStyle, + ), + ], + ), + ), + ], + ), + ), + ], + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "Email: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: getDisplayText(patientManagerProvider, + patientManagerProvider.selectedPatient!.email), + style: subtitleStyle, + ), + ], ), ), - SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: fnameController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "First Name", - ), - ), - SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: lnameController, - multiLineInput: false, - requiredText: true, - hintText: "Surname", - readOnly: true, - ), - ), - SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: cellController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Cell No.", - ), - ), - SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: emailController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Email", - ), - ), - SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - height: 100, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: addressController, - multiLineInput: true, - requiredText: true, - readOnly: true, - hintText: "Address", + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "Address: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: getDisplayText(patientManagerProvider, + patientManagerProvider.selectedPatient!.address), + style: subtitleStyle, + ), + ], ), ), ], @@ -145,170 +155,111 @@ class _PatientInfoState extends State { ); } - Widget getMedAidDetailsFields() { - List medAidDet = []; - medAidDet.add( - SizedBox( - width: textFieldWidth, - child: MihToggle( - hintText: "Medical Aid", - initialPostion: medAidPosition, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryFillColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - readOnly: true, - onChange: (value) { - if (value) { - setState(() { - medAidController.text = "Yes"; - medAidPosition = value; - }); - } else { - setState(() { - medAidController.text = "No"; - medAidPosition = value; - }); - } - }, - ), - // MihTextFormField( - // // width: textFieldWidth, - // fillColor: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // inputColor: MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // controller: medAidController, - // multiLineInput: false, - // requiredText: true, - // readOnly: true, - // hintText: "Medical Aid", - // ), - ), + Widget buildMedAidInfoCard(PatientManagerProvider patientManagerProvider) { + TextStyle titleStyle = TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); - bool req; - if (medAid == "Yes") { - req = true; - } else { - req = false; - } - medAidDet.addAll([ - Visibility( - visible: req, - child: SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: medMainMemController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Main Member", + TextStyle subtitleStyle = TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + TextStyle subtitleHeadingStyle = TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + return MihPackageWindow( + fullscreen: false, + windowTitle: "Medical Aid Card", + onWindowTapClose: null, + backgroundColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + foregroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + windowBody: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "${patientManagerProvider.selectedPatient!.medical_aid_name} - ${patientManagerProvider.selectedPatient!.medical_aid_scheme}", + style: titleStyle, + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "Main Member: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: getDisplayText( + patientManagerProvider, + patientManagerProvider + .selectedPatient!.medical_aid_main_member), + style: subtitleStyle, + ), + ], + ), + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "No: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: getDisplayText( + patientManagerProvider, + patientManagerProvider + .selectedPatient!.medical_aid_no), + style: subtitleStyle, + ), + ], + ), + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: "Code: ", + style: subtitleHeadingStyle, + ), + TextSpan( + text: getDisplayText( + patientManagerProvider, + patientManagerProvider + .selectedPatient!.medical_aid_code), + style: subtitleStyle, + ), + ], + ), + ), + ], + ), + ), + ], ), - ), - ), - Visibility( - visible: req, - child: SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: medNoController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "No.", - ), - ), - ), - Visibility( - visible: req, - child: SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: medAidCodeController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Code", - ), - ), - ), - Visibility( - visible: req, - child: SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: medNameController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Name", - ), - ), - ), - Visibility( - visible: req, - child: SizedBox( - width: textFieldWidth, - child: MihTextFormField( - // width: textFieldWidth, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - controller: medSchemeController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Plan", - ), - ), - ), - ]); - return Center( - child: Wrap( - spacing: 10, - runSpacing: 10, - children: medAidDet, + ], ), ); } void initialiseControllers(PatientManagerProvider patientManagerProvider) { - idController.text = patientManagerProvider.selectedPatient!.id_no; - fnameController.text = patientManagerProvider.selectedPatient!.first_name; - lnameController.text = patientManagerProvider.selectedPatient!.last_name; - cellController.text = patientManagerProvider.selectedPatient!.cell_no; - emailController.text = patientManagerProvider.selectedPatient!.email; - medNameController.text = - patientManagerProvider.selectedPatient!.medical_aid_name; - medNoController.text = - patientManagerProvider.selectedPatient!.medical_aid_no; - medSchemeController.text = - patientManagerProvider.selectedPatient!.medical_aid_scheme; - addressController.text = patientManagerProvider.selectedPatient!.address; - medAidController.text = patientManagerProvider.selectedPatient!.medical_aid; - medMainMemController.text = - patientManagerProvider.selectedPatient!.medical_aid_main_member; - medAidCodeController.text = - patientManagerProvider.selectedPatient!.medical_aid_code; medAid = patientManagerProvider.selectedPatient!.medical_aid; if (medAid == "Yes") { medAidPosition = true; @@ -320,6 +271,7 @@ class _PatientInfoState extends State { void showEditPatientWindow() { showDialog( context: context, + barrierDismissible: false, builder: (context) { return MihEditPatientDetailsWindow(); }); @@ -327,18 +279,6 @@ class _PatientInfoState extends State { @override void dispose() { - idController.dispose(); - fnameController.dispose(); - lnameController.dispose(); - cellController.dispose(); - emailController.dispose(); - medNameController.dispose(); - medNoController.dispose(); - medSchemeController.dispose(); - addressController.dispose(); - medAidController.dispose(); - medMainMemController.dispose(); - medAidCodeController.dispose(); super.dispose(); } @@ -364,60 +304,52 @@ class _PatientInfoState extends State { initialiseControllers(patientManagerProvider); return Stack( children: [ - MihSingleChildScroll( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - MihForm( - formKey: _formKey, - formFields: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - //crossAxisAlignment: , - children: [ - Text( - "Personal", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - ), - ), - ]), - Divider( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark")), - const SizedBox(height: 10), - getPatientDetailsField(), - const SizedBox(height: 10), - Center( - child: Text( - "Medical Aid", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ), - Divider( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark")), - const SizedBox(height: 10), - getMedAidDetailsFields(), - ], - ), - ], + Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + MihCircleAvatar( + imageFile: + patientManagerProvider.selectedPatientProfilePicture, + width: 160, + editable: false, + fileNameController: null, + userSelectedfile: null, + frameColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onChange: () {}, + ), + const SizedBox(height: 10), + buildPatientInfoCard(patientManagerProvider), + const SizedBox(height: 10), + if (patientManagerProvider.selectedPatient!.medical_aid == + "Yes") + buildMedAidInfoCard(patientManagerProvider), + ], + ), + Positioned( + right: 5, + top: 5, + child: MihButton( + width: 40, + height: 40, + onPressed: () { + patientManagerProvider.setHidePatientDetails( + !patientManagerProvider.hidePatientDetails); + }, + buttonColor: patientManagerProvider.hidePatientDetails + ? MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark") + : MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + child: Icon( + patientManagerProvider.hidePatientDetails + ? Icons.visibility + : Icons.visibility_off, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), ), ), Visibility( @@ -450,13 +382,6 @@ class _PatientInfoState extends State { MzansiInnovationHub.of(context)!.theme.mode == "Dark"), onTap: () { - // context.goNamed( - // 'patientProfileEdit', - // extra: PatientEditArguments( - // profileProvider.user!, - // patientManagerProvider.selectedPatient!, - // ), - // ); showEditPatientWindow(); }, ) diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart index c982820a..5dda6ece 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart @@ -1,14 +1,12 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_toggle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_toggle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; @@ -66,73 +64,38 @@ class _PatientSetupFormState extends State { "${fnameController.text} ${lnameController.text} patient profile has been successfully added!\n"; successPopUp("Successfully created Patient Profile", message); } else { - internetConnectionPopUp(); + MihAlertServices().internetConnectionAlert(context); } } void successPopUp(String title, String message) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.pop(); - context.goNamed( - 'patientProfile', - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.pop(); + context.goNamed( + 'patientProfile', + ); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - ); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } @@ -468,7 +431,7 @@ class _PatientSetupFormState extends State { addPatientService( profileProvider, patientManagerProvider); } else { - MihAlertServices().formNotFilledCompletely(context); + MihAlertServices().inputErrorAlert(context); } }, buttonColor: MihColors.getGreenColor( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart index 3fced665..8016a307 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart @@ -1,15 +1,17 @@ import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_claim_statement_generation_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; import 'package:provider/provider.dart'; @@ -23,14 +25,30 @@ class PatientProfile extends StatefulWidget { } class _PatientProfileState extends State { - bool isLoading = true; + bool _isLoadingInitialData = true; - Future initialisePatientData() async { + Future _loadInitialData() async { setState(() { - isLoading = true; + _isLoadingInitialData = true; }); + MzansiProfileProvider mzansiProfileProvider = + context.read(); PatientManagerProvider patientManagerProvider = context.read(); + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + if (patientManagerProvider.selectedPatient == null) { + await MihPatientServices().getPatientDetails( + mzansiProfileProvider.user!.app_id, patientManagerProvider); + } + if (patientManagerProvider.selectedPatient == null) { + context.goNamed("patientProfileSetup"); + return; + } + patientManagerProvider.setSelectedPatientProfilePicUrl( + mzansiProfileProvider.userProfilePicUrl!); + patientManagerProvider.setPersonalMode(mzansiProfileProvider.personalHome); if (patientManagerProvider.selectedPatient != null) { await MihPatientServices() .getPatientConsultationNotes(patientManagerProvider); @@ -39,29 +57,41 @@ class _PatientProfileState extends State { patientManagerProvider); } setState(() { - isLoading = false; + _isLoadingInitialData = false; }); } @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - initialisePatientData(); - }); + _loadInitialData(); } @override Widget build(BuildContext context) { - return MihPackage( - appActionButton: getAction(), - appTools: getTools(), - appBody: getToolBody(), - appToolTitles: getToolTitle(), - selectedbodyIndex: - context.watch().patientProfileIndex, - onIndexChange: (newValue) { - context.read().setPatientProfileIndex(newValue); + return Consumer( + builder: (BuildContext context, + PatientManagerProvider patientManagerProvider, Widget? child) { + if (_isLoadingInitialData) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } + return MihPackage( + appActionButton: getAction(), + appTools: getTools(), + appBody: getToolBody(), + appToolTitles: getToolTitle(), + selectedbodyIndex: + context.watch().patientProfileIndex, + onIndexChange: (newValue) { + context + .read() + .setPatientProfileIndex(newValue); + }, + ); }, ); } @@ -73,7 +103,6 @@ class _PatientProfileState extends State { icon: const Icon(Icons.arrow_back), iconSize: 35, onTap: () { - patientManagerProvider.setPatientProfileIndex(0); if (!patientManagerProvider.personalMode) { context.pop(); } else { @@ -81,6 +110,8 @@ class _PatientProfileState extends State { 'mihHome', ); } + patientManagerProvider.setPatientProfileIndex(0); + patientManagerProvider.setHidePatientDetails(true); FocusScope.of(context).unfocus(); }, ); @@ -109,20 +140,6 @@ class _PatientProfileState extends State { } List getToolBody() { - if (isLoading) { - return [ - Center( - child: Mihloadingcircle(), - ), - ]; - } - PatientManagerProvider patientManagerProvider = - context.read(); - if (patientManagerProvider.selectedPatient == null) { - return [ - const SizedBox(), - ]; - } List toolBodies = [ PatientInfo(), PatientConsultation(), diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart b/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart index 5f4f319d..cc968072 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart +++ b/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart'; import 'package:provider/provider.dart'; diff --git a/Frontend/lib/mih_components/mih_providers/about_mih_provider.dart b/Frontend/lib/mih_providers/about_mih_provider.dart similarity index 100% rename from Frontend/lib/mih_components/mih_providers/about_mih_provider.dart rename to Frontend/lib/mih_providers/about_mih_provider.dart diff --git a/Frontend/lib/mih_components/mih_providers/mih_access_controlls_provider.dart b/Frontend/lib/mih_providers/mih_access_controlls_provider.dart similarity index 90% rename from Frontend/lib/mih_components/mih_providers/mih_access_controlls_provider.dart rename to Frontend/lib/mih_providers/mih_access_controlls_provider.dart index dd7f11a0..5c6f97fc 100644 --- a/Frontend/lib/mih_components/mih_providers/mih_access_controlls_provider.dart +++ b/Frontend/lib/mih_providers/mih_access_controlls_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patient_access.dart'; class MihAccessControllsProvider extends ChangeNotifier { int toolIndex; diff --git a/Frontend/lib/mih_components/mih_providers/mih_authentication_provider.dart b/Frontend/lib/mih_providers/mih_authentication_provider.dart similarity index 100% rename from Frontend/lib/mih_components/mih_providers/mih_authentication_provider.dart rename to Frontend/lib/mih_providers/mih_authentication_provider.dart diff --git a/Frontend/lib/mih_components/mih_providers/mih_banner_ad_provider.dart b/Frontend/lib/mih_providers/mih_banner_ad_provider.dart similarity index 100% rename from Frontend/lib/mih_components/mih_providers/mih_banner_ad_provider.dart rename to Frontend/lib/mih_providers/mih_banner_ad_provider.dart diff --git a/Frontend/lib/mih_components/mih_providers/mih_calculator_provider.dart b/Frontend/lib/mih_providers/mih_calculator_provider.dart similarity index 100% rename from Frontend/lib/mih_components/mih_providers/mih_calculator_provider.dart rename to Frontend/lib/mih_providers/mih_calculator_provider.dart diff --git a/Frontend/lib/mih_components/mih_providers/mih_calendar_provider.dart b/Frontend/lib/mih_providers/mih_calendar_provider.dart similarity index 96% rename from Frontend/lib/mih_components/mih_providers/mih_calendar_provider.dart rename to Frontend/lib/mih_providers/mih_calendar_provider.dart index fe4ee6b6..cdcdde0e 100644 --- a/Frontend/lib/mih_components/mih_providers/mih_calendar_provider.dart +++ b/Frontend/lib/mih_providers/mih_calendar_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter/foundation.dart'; import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/appointment.dart'; +import 'package:mzansi_innovation_hub/mih_objects/appointment.dart'; class MihCalendarProvider extends ChangeNotifier { int toolIndex; diff --git a/Frontend/lib/mih_providers/mih_file_viewer_provider.dart b/Frontend/lib/mih_providers/mih_file_viewer_provider.dart new file mode 100644 index 00000000..7d1a4cba --- /dev/null +++ b/Frontend/lib/mih_providers/mih_file_viewer_provider.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; + +class MihFileViewerProvider extends ChangeNotifier { + String filePath; + String fileLink; + int toolIndex; + + MihFileViewerProvider({ + this.filePath = '', + this.fileLink = '', + this.toolIndex = 0, + }); + + void setToolIndex(int index) { + toolIndex = index; + notifyListeners(); + } + + void setFilePath(String path) { + filePath = path; + notifyListeners(); + } + + void setFileLink(String name) { + fileLink = name; + notifyListeners(); + } +} diff --git a/Frontend/lib/mih_components/mih_providers/mih_mine_sweeper_provider.dart b/Frontend/lib/mih_providers/mih_mine_sweeper_provider.dart similarity index 94% rename from Frontend/lib/mih_components/mih_providers/mih_mine_sweeper_provider.dart rename to Frontend/lib/mih_providers/mih_mine_sweeper_provider.dart index 50b58831..dd1e9bf8 100644 --- a/Frontend/lib/mih_components/mih_providers/mih_mine_sweeper_provider.dart +++ b/Frontend/lib/mih_providers/mih_mine_sweeper_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter/widgets.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/minesweeper_player_score.dart'; +import 'package:mzansi_innovation_hub/mih_objects/minesweeper_player_score.dart'; class MihMineSweeperProvider extends ChangeNotifier { String difficulty; diff --git a/Frontend/lib/mih_components/mih_providers/mzansi_ai_provider.dart b/Frontend/lib/mih_providers/mzansi_ai_provider.dart similarity index 98% rename from Frontend/lib/mih_components/mih_providers/mzansi_ai_provider.dart rename to Frontend/lib/mih_providers/mzansi_ai_provider.dart index 574977a0..a74520ca 100644 --- a/Frontend/lib/mih_components/mih_providers/mzansi_ai_provider.dart +++ b/Frontend/lib/mih_providers/mzansi_ai_provider.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_ai_toolkit/flutter_ai_toolkit.dart'; import 'package:flutter_markdown_plus/flutter_markdown_plus.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/ollama_provider.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/ollama_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; diff --git a/Frontend/lib/mih_components/mih_providers/mzansi_directory_provider.dart b/Frontend/lib/mih_providers/mzansi_directory_provider.dart similarity index 90% rename from Frontend/lib/mih_components/mih_providers/mzansi_directory_provider.dart rename to Frontend/lib/mih_providers/mzansi_directory_provider.dart index ef05f620..ed88e863 100644 --- a/Frontend/lib/mih_components/mih_providers/mzansi_directory_provider.dart +++ b/Frontend/lib/mih_providers/mzansi_directory_provider.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/bookmarked_business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/bookmarked_business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; class MzansiDirectoryProvider extends ChangeNotifier { int toolIndex; diff --git a/Frontend/lib/mih_components/mih_providers/mzansi_profile_provider.dart b/Frontend/lib/mih_providers/mzansi_profile_provider.dart similarity index 85% rename from Frontend/lib/mih_components/mih_providers/mzansi_profile_provider.dart rename to Frontend/lib/mih_providers/mzansi_profile_provider.dart index 3570dc3c..333d6dfb 100644 --- a/Frontend/lib/mih_components/mih_providers/mzansi_profile_provider.dart +++ b/Frontend/lib/mih_providers/mzansi_profile_provider.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_employee.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/user_consent.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_employee.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/user_consent.dart'; class MzansiProfileProvider extends ChangeNotifier { bool personalHome; @@ -21,11 +21,13 @@ class MzansiProfileProvider extends ChangeNotifier { UserConsent? userConsent; List? employeeList; List userSearchResults = []; + bool hideBusinessUserDetails; MzansiProfileProvider({ this.personalHome = true, this.personalIndex = 0, this.businessIndex = 0, + this.hideBusinessUserDetails = true, }); void reset() { @@ -67,6 +69,11 @@ class MzansiProfileProvider extends ChangeNotifier { notifyListeners(); } + void setHideBusinessUserDetails(bool hideBusinessUserDetails) { + this.hideBusinessUserDetails = hideBusinessUserDetails; + notifyListeners(); + } + void setUserProfilePicUrl(String url) { userProfilePicUrl = url; userProfilePicture = url.isNotEmpty ? NetworkImage(url) : null; diff --git a/Frontend/lib/mih_components/mih_providers/mzansi_wallet_provider.dart b/Frontend/lib/mih_providers/mzansi_wallet_provider.dart similarity index 93% rename from Frontend/lib/mih_components/mih_providers/mzansi_wallet_provider.dart rename to Frontend/lib/mih_providers/mzansi_wallet_provider.dart index e7904531..ac9b13ac 100644 --- a/Frontend/lib/mih_components/mih_providers/mzansi_wallet_provider.dart +++ b/Frontend/lib/mih_providers/mzansi_wallet_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart'; +import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart'; class MzansiWalletProvider extends ChangeNotifier { List loyaltyCards; diff --git a/Frontend/lib/mih_components/mih_providers/ollama_provider.dart b/Frontend/lib/mih_providers/ollama_provider.dart similarity index 100% rename from Frontend/lib/mih_components/mih_providers/ollama_provider.dart rename to Frontend/lib/mih_providers/ollama_provider.dart diff --git a/Frontend/lib/mih_components/mih_providers/patient_manager_provider.dart b/Frontend/lib/mih_providers/patient_manager_provider.dart similarity index 71% rename from Frontend/lib/mih_components/mih_providers/patient_manager_provider.dart rename to Frontend/lib/mih_providers/patient_manager_provider.dart index 03761c94..b7fa1b7d 100644 --- a/Frontend/lib/mih_components/mih_providers/patient_manager_provider.dart +++ b/Frontend/lib/mih_providers/patient_manager_provider.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/claim_statement_file.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/files.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/notes.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.dart'; +import 'package:mzansi_innovation_hub/mih_objects/claim_statement_file.dart'; +import 'package:mzansi_innovation_hub/mih_objects/files.dart'; +import 'package:mzansi_innovation_hub/mih_objects/notes.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patient_access.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patients.dart'; class PatientManagerProvider extends ChangeNotifier { int patientProfileIndex; @@ -12,6 +12,9 @@ class PatientManagerProvider extends ChangeNotifier { bool personalMode; List? myPaitentList; Patient? selectedPatient; + String? selectedPatientProfilePictureUrl; + ImageProvider? selectedPatientProfilePicture; + bool hidePatientDetails; List? consultationNotes; List? patientDocuments; List? patientClaimsDocuments; @@ -22,6 +25,7 @@ class PatientManagerProvider extends ChangeNotifier { this.patientManagerIndex = 0, this.fileViewerIndex = 0, this.personalMode = true, + this.hidePatientDetails = true, }); void reset() { @@ -56,6 +60,17 @@ class PatientManagerProvider extends ChangeNotifier { notifyListeners(); } + void setSelectedPatientProfilePicUrl(String url) { + selectedPatientProfilePictureUrl = url; + selectedPatientProfilePicture = url.isNotEmpty ? NetworkImage(url) : null; + notifyListeners(); + } + + void setHidePatientDetails(bool hidePatientDetails) { + this.hidePatientDetails = hidePatientDetails; + notifyListeners(); + } + void setMyPatientList({required List? myPaitentList}) { this.myPaitentList = myPaitentList ?? []; notifyListeners(); diff --git a/Frontend/lib/mih_services/mih_access_controls_services.dart b/Frontend/lib/mih_services/mih_access_controls_services.dart index 322031f9..ba2ad08f 100644 --- a/Frontend/lib/mih_services/mih_access_controls_services.dart +++ b/Frontend/lib/mih_services/mih_access_controls_services.dart @@ -1,13 +1,13 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_access_controlls_provider.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/patient_access.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_access_controlls_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_notification_services.dart'; import 'package:supertokens_flutter/http.dart' as http; @@ -35,6 +35,29 @@ class MihAccessControlsServices { } } + /// This function is used to check if a business has access to a specific patients profile. + /// + /// Patameters: String business_id & app_id (app_id of patient). + /// + /// Returns List (List of access that match the above parameters). + static Future> checkBusinessAccessToPatient( + String business_id, + String app_id, + ) async { + final response = await http.get(Uri.parse( + "${AppEnviroment.baseApiUrl}/access-requests/patient/check/$business_id?app_id=$app_id")); + // var errorCode = response.statusCode.toString(); + //print(response.body); + if (response.statusCode == 200) { + Iterable l = jsonDecode(response.body); + List patientAccesses = List.from( + l.map((model) => PatientAccess.fromJson(model))); + return patientAccesses; + } else { + throw Exception('failed to pull patient access for business'); + } + } + /// This function is used to create patient access and trigger notification to patient /// /// Patameters:- @@ -74,7 +97,7 @@ class MihAccessControlsServices { await MihNotificationApis.addAccessRequestNotificationAPICall( app_id, requested_by, personalSelected, args, context); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } @@ -112,21 +135,10 @@ class MihAccessControlsServices { app_id, personalSelected, args, context); //notification here } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } - static void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - /// This function is used to UPDATE access the business has. /// /// Patameters:- diff --git a/Frontend/lib/mih_services/mih_alert_services.dart b/Frontend/lib/mih_services/mih_alert_services.dart index 70a59bc5..df8fbefd 100644 --- a/Frontend/lib/mih_services/mih_alert_services.dart +++ b/Frontend/lib/mih_services/mih_alert_services.dart @@ -1,125 +1,1294 @@ import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; class MihAlertServices { - void formNotFilledCompletely(BuildContext context) { + double getPadingBasedOnScreenWidth(BuildContext context) { + var size = MediaQuery.of(context).size; + if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { + return size.width / 7; // Large screens + } else { + return 25.0; + } + } + + void internetConnectionAlert(BuildContext context) { showDialog( context: context, + barrierDismissible: false, builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_amber_rounded, - size: 150, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), ), - alertTitle: "Oops! Looks like some fields are missing.", - alertBody: Column( - children: [ - Text( - "We noticed that some required fields are still empty. To ensure your request is processed smoothly, please fill out all the highlighted fields before submitting the form again.", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - RichText( - text: TextSpan( - style: TextStyle( + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, ), - children: [ - TextSpan( - text: "Here's a quick tip: ", - style: TextStyle( - fontStyle: FontStyle.italic, - color: MihColors.getRedColor( + Center( + child: Text( + "Internet Connection Lost!", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "We seem to be having some trouble connecting you to the internet. This could be due to a temporary outage or an issue with your device's connection.", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void locationPermissionAlert(BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Location Services Not Enabled", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "To get the most out of MIH, we need your location. Please go to the site settings of the app and enable location services. Once you do that, we can start showing you relevant information based on your location.", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void inputErrorAlert(BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Oops! Looks like some fields are missing.", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "We noticed that some required fields are still empty. To ensure your request is processed smoothly, please fill out all the highlighted fields before submitting the form again.", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + RichText( + text: TextSpan( + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 15, + fontWeight: FontWeight.bold, + ), + children: [ + TextSpan( + text: "Here's a quick tip: ", + style: TextStyle( + fontStyle: FontStyle.italic, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"))), + const TextSpan( + text: "Look for fields with an asterisk ("), + TextSpan( + text: "*", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"))), + const TextSpan( + text: ") next to them, as these are mandatory."), + ], + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void passwordRequirementAlert(BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Password Doesn't Meet Requirements", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "Oops! Your password doesn't quite meet our standards. To keep your account secure, please make sure your password meets the following requirements", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + RichText( + text: TextSpan( + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + children: [ + TextSpan( + text: "Requirements:\n", + style: TextStyle( + fontStyle: FontStyle.italic, + fontSize: 20, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"))), + const TextSpan( + text: "1) Contailes at least 8 characters\n", + ), + const TextSpan( + text: + "2) Contains at least 1 uppercase letter (A-Z)\n", + ), + const TextSpan( + text: + "3) Contains at least 1 lowercase letter (a-z)\n", + ), + const TextSpan( + text: "4) Contains at least 1 number (0-9)\n", + ), + const TextSpan( + text: + "5) Contains at least 1 special character (!@#\$%^&*)\n", + ), + ], + ), + ), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void passwordMatchAlert(BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Passwords Don't Match", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "The password and confirm password fields do not match. Please make sure they are identical.", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void loginErrorAlert(BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Uh oh! Login attempt unsuccessful.", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "The email address or password you entered doesn't seem to match our records. Please double-check your information and try again.", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 10), + Text( + "Here are some things to keep in mind:", + textAlign: TextAlign.left, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18.0, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 10), + Text( + "1) Are you sure you're using the correct email address associated with your account?\n2) Is your caps lock key on? Passwords are case-sensitive.\n3) If you've forgotten your password, no worries! Click on \"Forgot Password?\" to reset it.", + textAlign: TextAlign.left, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void emailExistsAlert(BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Email Already Exists", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "It looks like that email is already registered. Please sign in or try a different email.", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void invalidEmailAlert(BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Oops! Invalid Email", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "Looks like there's a little hiccup with that email address. Please double-check that you've entered it correctly, including the \"@\" symbol and a domain (like example@email.com).", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void warningAlert(String title, String message, BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + title, + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + message, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void warningAdvancedAlert( + String title, + String message, + List actions, + BuildContext context, + ) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + title, + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + message, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Center( + child: Wrap( + spacing: 10.0, + runSpacing: 10.0, + alignment: WrapAlignment.center, + children: actions, + ), + ), + ], + ), + ), + ), + ); + }, + ); + } + + void deleteConfirmationAlert( + String message, + void Function()? onpressed, + BuildContext context, + ) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Are You Sure?", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + message, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Wrap( + spacing: 10.0, + runSpacing: 10.0, + alignment: WrapAlignment.center, + children: [ + MihButton( + onPressed: onpressed, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + width: 300, + elevation: 10, + child: Text( + "Delete", + style: TextStyle( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == - "Dark"))), - const TextSpan( - text: - "Look for fields without the \"(Optional)\" indicator next to them, as these are mandatory."), - ], - ), + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + width: 300, + elevation: 10, + child: Text( + "Cancel", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ], ), - ], + ), ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); }, ); } - void successAlert(String title, String message, BuildContext context) { + void successBasicAlert( + String title, + String message, + BuildContext context, + ) { showDialog( context: context, + barrierDismissible: false, builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.check_circle_outline_rounded, + size: 150, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Text( + title, + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Center( + child: Text( + message, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], ), - const SizedBox(height: 25), - ], + ), ), - alertColour: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); }, ); } - void errorAlert(String title, String message, BuildContext context) { + void successAdvancedAlert( + String title, + String message, + List actions, + BuildContext context, + ) { showDialog( context: context, + barrierDismissible: false, builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.warning_amber_rounded, - size: 150, - color: MihColors.getRedColor( + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.check_circle_outline_rounded, + size: 150, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Text( + title, + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Center( + child: Text( + message, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Center( + child: Wrap( + spacing: 10.0, + runSpacing: 10.0, + alignment: WrapAlignment.center, + children: actions, + ), + ), + ], ), - const SizedBox(height: 25), - ], + ), + ), + ); + }, + ); + } + + void errorBasicAlert( + String title, + String message, + BuildContext context, + ) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Text( + title, + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Center( + child: Text( + message, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Center( + child: MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ) + ], + ), + ), + ), + ); + }, + ); + } + + void errorAdvancedAlert( + String title, + String message, + List actions, + BuildContext context, + ) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: getPadingBasedOnScreenWidth(context), + ), + child: MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + windowBody: MihSingleChildScroll( + child: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 150, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Text( + title, + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + Center( + child: Text( + message, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Center( + child: Wrap( + spacing: 10.0, + runSpacing: 10.0, + alignment: WrapAlignment.center, + children: actions, + ), + ) + ], + ), + ), ), - alertColour: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); }, ); diff --git a/Frontend/lib/mih_services/mih_authentication_services.dart b/Frontend/lib/mih_services/mih_authentication_services.dart index 50c747aa..3b1f6cd7 100644 --- a/Frontend/lib/mih_services/mih_authentication_services.dart +++ b/Frontend/lib/mih_services/mih_authentication_services.dart @@ -2,82 +2,17 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -// import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; import 'package:supertokens_flutter/http.dart' as http; -// import 'package:supertokens_flutter/supertokens.dart'; class MihAuthenticationServices { final baseAPI = AppEnviroment.baseApiUrl; - // Future signUserUp( - // TextEditingController emailController, - // TextEditingController passwordController, - // TextEditingController confirmPasswordController, - // BuildContext context, - // ) async { - // showDialog( - // context: context, - // builder: (context) { - // return const Mihloadingcircle(); - // }, - // ); - // try { - // Uri uri = Uri.parse( - // "$baseAPI/auth/emailpassword/email/exists?email=${emailController.text}"); - // var response = await http.get(uri); - // if (response.statusCode == 200) { - // var userExists = jsonDecode(response.body); - // if (userExists["exists"]) { - // Navigator.of(context).pop(); - // signUpError(context); - // } else { - // var response2 = await http.post( - // Uri.parse("$baseAPI/auth/signup"), - // body: - // '{"formFields": [{"id": "email","value": "${emailController.text}"}, {"id": "password","value": "${passwordController.text}"}]}', - // headers: { - // 'Content-type': 'application/json', - // 'Accept': 'application/json', - // "Authorization": "leatucczyixqwkqqdrhayiwzeofkltds" - // }, - // ); - // //print("response 2: ${response2.statusCode}"); - // if (response2.statusCode == 200) { - // //print("response 2: ${response2.body}"); - // var userCreated = jsonDecode(response2.body); - // //print("Created user $userCreated"); - // if (userCreated["status"] == "OK") { - // //print("Here1"); - // //Creat user in db - // String uid = await SuperTokens.getUserId(); - // //print("uid: $uid"); - // await MihUserServices() - // .createUser(emailController.text, uid, context); - // // addUserAPICall(emailController.text, uid); - // Navigator.of(context).pop(); - // //print("Here1"); - // } else if (userCreated["status"] == "FIELD_ERROR") { - // Navigator.of(context).pop(); - // passwordReqError(context); - // } else { - // Navigator.of(context).pop(); - // internetConnectionPopUp(context); - // } - // } - // } - // } - // } on Exception catch (error) { - // Navigator.of(context).pop(); - // loginError(error.toString(), context); - // emailController.clear(); - // passwordController.clear(); - // confirmPasswordController.clear(); - // } - // } - Future signUserIn( String email, String password, @@ -162,18 +97,10 @@ class MihAuthenticationServices { } } - void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - void loginError(String error, BuildContext context) { showDialog( context: context, + barrierDismissible: false, builder: (context) { return AlertDialog( title: Text(error), @@ -182,20 +109,80 @@ class MihAuthenticationServices { ); } - void passwordReqError(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Password Requirements"); - }, - ); - } - void signUpError(BuildContext context) { showDialog( context: context, + barrierDismissible: false, builder: (context) { - return const MIHErrorMessage(errorType: "User Exists"); + return MihPackageWindow( + fullscreen: false, + windowTitle: null, + onWindowTapClose: null, + backgroundColor: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + windowBody: Column( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 100, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + Center( + child: Text( + "Email Already Exists", + textAlign: TextAlign.center, + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 15), + Text( + "Here are some things to keep in mind:", + style: TextStyle( + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 10), + Text( + "1) Are you sure you're using the correct email address associated with your account?\n2) Is your caps lock key on? Passwords are case-sensitive.\n3) If you've forgotten your password, no worries! Click on \"Forgot Password?\" to reset it.", + textAlign: TextAlign.left, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 15), + MihButton( + onPressed: () { + context.pop(); + }, + buttonColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + elevation: 10, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ); }, ); } diff --git a/Frontend/lib/mih_services/mih_business_details_services.dart b/Frontend/lib/mih_services/mih_business_details_services.dart index f12e1282..9240e714 100644 --- a/Frontend/lib/mih_services/mih_business_details_services.dart +++ b/Frontend/lib/mih_services/mih_business_details_services.dart @@ -2,15 +2,13 @@ import 'dart:convert'; import 'package:go_router/go_router.dart'; import 'package:http/http.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:provider/provider.dart'; import 'package:supertokens_flutter/supertokens.dart'; -import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:supertokens_flutter/http.dart' as http; class MihBusinessDetailsServices { @@ -80,7 +78,7 @@ class MihBusinessDetailsServices { } Future getBusinessDetailsByUser( - BuildContext context, + MzansiProfileProvider profileProvider, ) async { String app_id = await SuperTokens.getUserId(); var response = await http.get( @@ -93,7 +91,7 @@ class MihBusinessDetailsServices { String body = response.body; var jsonBody = jsonDecode(body); Business? business = Business.fromJson(jsonBody); - context.read().setBusiness(newBusiness: business); + profileProvider.setBusiness(newBusiness: business); return business; } else { return null; @@ -276,7 +274,7 @@ class MihBusinessDetailsServices { businessMissionVision, ), ); - String newProPicUrl = await MihFileApi.getMinioFileUrl(filePath, context); + String newProPicUrl = await MihFileApi.getMinioFileUrl(filePath); provider.setBusinessProfilePicUrl(newProPicUrl); return 200; } else { @@ -329,13 +327,4 @@ class MihBusinessDetailsServices { return 500; } } - - void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } } diff --git a/Frontend/lib/mih_services/mih_business_employee_services.dart b/Frontend/lib/mih_services/mih_business_employee_services.dart index 4518437b..72484693 100644 --- a/Frontend/lib/mih_services/mih_business_employee_services.dart +++ b/Frontend/lib/mih_services/mih_business_employee_services.dart @@ -2,10 +2,10 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_employee.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_employee.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:supertokens_flutter/http.dart' as http; diff --git a/Frontend/lib/mih_services/mih_claim_statement_generation_services.dart b/Frontend/lib/mih_services/mih_claim_statement_generation_services.dart index 7cb073bd..9b705d35 100644 --- a/Frontend/lib/mih_services/mih_claim_statement_generation_services.dart +++ b/Frontend/lib/mih_services/mih_claim_statement_generation_services.dart @@ -1,18 +1,16 @@ import 'dart:convert'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/claim_statement_file.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_objects/claim_statement_file.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:supertokens_flutter/http.dart' as http; -import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../mih_config/mih_env.dart'; - class MIHClaimStatementGenerationApi { final baseAPI = AppEnviroment.baseApiUrl; @@ -96,12 +94,16 @@ class MIHClaimStatementGenerationApi { getClaimStatementFilesByPatient(patientManagerProvider); String message = "The ${data.document_type}: $fileName has been successfully generated and added to ${data.patient_full_name}'s record. You can now access and download it for their use."; - successPopUp(message, context); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } @@ -228,37 +230,17 @@ class MIHClaimStatementGenerationApi { // setState(() {}); String message = "The File has been deleted successfully. This means it will no longer be visible on your and cannot be used for future appointments."; - successPopUp(message, context); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } - - //================== POP UPS ========================================================================== - - static void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - - static void successPopUp(String message, BuildContext context) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } } +//================== POP UPS ========================================================================== diff --git a/Frontend/lib/mih_services/mih_currency_exchange_rate_services.dart b/Frontend/lib/mih_services/mih_currency_exchange_rate_services.dart index 02f5bd35..95173c67 100644 --- a/Frontend/lib/mih_services/mih_currency_exchange_rate_services.dart +++ b/Frontend/lib/mih_services/mih_currency_exchange_rate_services.dart @@ -1,8 +1,8 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/currency.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calculator_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/currency.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calculator_provider.dart'; import 'package:provider/provider.dart'; import 'package:supertokens_flutter/http.dart' as http; diff --git a/Frontend/lib/mih_services/mih_data_helper_services.dart b/Frontend/lib/mih_services/mih_data_helper_services.dart new file mode 100644 index 00000000..a2dcc3f6 --- /dev/null +++ b/Frontend/lib/mih_services/mih_data_helper_services.dart @@ -0,0 +1,67 @@ +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_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_my_business_user_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_user_consent_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; + +class MihDataHelperServices { + Future getUserData(MzansiProfileProvider profileProvider) async { + String url; + await MihUserServices().getMyUserDetails(profileProvider); + url = await MihFileApi.getMinioFileUrl( + profileProvider.user!.pro_pic_path, + ); + profileProvider.setUserProfilePicUrl(url); + } + + Future getUserConsentStatus( + MzansiProfileProvider profileProvider) async { + await MihUserConsentServices().getUserConsentStatus(profileProvider); + } + + Future getBusinessData(MzansiProfileProvider profileProvider) async { + AppUser? user = profileProvider.user; + String logoUrl; + String signatureUrl; + Business? responseBusiness = await MihBusinessDetailsServices() + .getBusinessDetailsByUser(profileProvider); + if (responseBusiness != null && user!.type == "business") { + logoUrl = await MihFileApi.getMinioFileUrl( + profileProvider.business!.logo_path, + ); + profileProvider.setBusinessProfilePicUrl(logoUrl); + await MihMyBusinessUserServices().getBusinessUser(profileProvider); + signatureUrl = await MihFileApi.getMinioFileUrl( + profileProvider.businessUser!.sig_path, + ); + profileProvider.setBusinessUserSignatureUrl(signatureUrl); + } + } + + Future loadUserDataOnly(MzansiProfileProvider profileProvider) async { + if (profileProvider.user == null) { + await getUserData(profileProvider); + } + if (profileProvider.userConsent == null) { + await getUserConsentStatus(profileProvider); + } + } + + Future loadUserDataWithBusinessesData( + MzansiProfileProvider profileProvider) async { + if (profileProvider.user == null) { + await getUserData(profileProvider); + } + if (profileProvider.userConsent == null) { + await getUserConsentStatus(profileProvider); + } + if (profileProvider.user != null && + profileProvider.user!.type == "business" && + profileProvider.business == null) { + await getBusinessData(profileProvider); + } + } +} diff --git a/Frontend/lib/mih_services/mih_file_services.dart b/Frontend/lib/mih_services/mih_file_services.dart index e3eec301..c9106c2c 100644 --- a/Frontend/lib/mih_services/mih_file_services.dart +++ b/Frontend/lib/mih_services/mih_file_services.dart @@ -2,10 +2,7 @@ import 'dart:convert'; import 'package:file_picker/file_picker.dart'; import 'package:go_router/go_router.dart'; -import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:flutter/material.dart'; import 'package:supertokens_flutter/http.dart' as http; @@ -17,7 +14,6 @@ class MihFileApi { static Future getMinioFileUrl( String filePath, - BuildContext context, ) async { // loadingPopUp(context); // print("here"); @@ -45,9 +41,9 @@ class MihFileApi { fileUrl = decodedData['minioURL']; } else { // internetConnectionPopUp(context); - KenLogger.error("Get File Error: $url"); - KenLogger.error("Get File Error: ${response.statusCode}"); - KenLogger.error("Get File Error: ${response.body}"); + // KenLogger.error("Get File Error: $url"); + // KenLogger.error("Get File Error: ${response.statusCode}"); + // KenLogger.error("Get File Error: ${response.body}"); } } catch (e) { // internetConnectionPopUp(context); @@ -106,44 +102,8 @@ class MihFileApi { return response.statusCode; } - // Future signOut() async { - // await SuperTokens.signOut(completionHandler: (error) { - // print(error); - // }); - // if (await SuperTokens.doesSessionExist() == false) { - // Navigator.of(context).pop(); - // Navigator.of(context).popAndPushNamed( - // '/', - // arguments: AuthArguments(true, false), - // ); - // } - // } - //================== POP UPS ========================================================================== - static void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - - static void successPopUp(String message, BuildContext context) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - static void loadingPopUp(BuildContext context) { showDialog( context: context, diff --git a/Frontend/lib/mih_services/mih_icd10_code_services.dart b/Frontend/lib/mih_services/mih_icd10_code_services.dart index e0326e2c..8f6ac599 100644 --- a/Frontend/lib/mih_services/mih_icd10_code_services.dart +++ b/Frontend/lib/mih_services/mih_icd10_code_services.dart @@ -1,7 +1,7 @@ import 'dart:convert'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/icd10_code.dart.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_objects/icd10_code.dart.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:flutter/material.dart'; import 'package:supertokens_flutter/http.dart' as http; diff --git a/Frontend/lib/mih_services/mih_location_services.dart b/Frontend/lib/mih_services/mih_location_services.dart index 4cdc0848..a27c6e61 100644 --- a/Frontend/lib/mih_services/mih_location_services.dart +++ b/Frontend/lib/mih_services/mih_location_services.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; -import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; class MIHLocationAPI { final LocationSettings locationSettings = const LocationSettings( @@ -19,10 +19,10 @@ class MIHLocationAPI { if (permission == LocationPermission.denied) { permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied) { - showPermissionError(context); + MihAlertServices().locationPermissionAlert(context); return null; } else if (permission == LocationPermission.deniedForever) { - showPermissionError(context); + MihAlertServices().locationPermissionAlert(context); return null; } else { Position location = await Geolocator.getCurrentPosition( @@ -30,7 +30,7 @@ class MIHLocationAPI { return location; } } else if (permission == LocationPermission.deniedForever) { - showPermissionError(context); + MihAlertServices().locationPermissionAlert(context); return null; } else { Position location = await Geolocator.getCurrentPosition( @@ -47,13 +47,4 @@ class MIHLocationAPI { return Geolocator.distanceBetween( startLatitude, startLogitude, endLatitude, endLogitude); } - - void showPermissionError(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Location Denied"); - }, - ); - } } diff --git a/Frontend/lib/mih_services/mih_minesweeper_services.dart b/Frontend/lib/mih_services/mih_minesweeper_services.dart index 6d5eb524..19edf598 100644 --- a/Frontend/lib/mih_services/mih_minesweeper_services.dart +++ b/Frontend/lib/mih_services/mih_minesweeper_services.dart @@ -1,7 +1,7 @@ import 'dart:convert'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/minesweeper_player_score.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/minesweeper_player_score.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:supertokens_flutter/http.dart' as http; diff --git a/Frontend/lib/mih_services/mih_my_business_user_services.dart b/Frontend/lib/mih_services/mih_my_business_user_services.dart index bb927b5f..286de533 100644 --- a/Frontend/lib/mih_services/mih_my_business_user_services.dart +++ b/Frontend/lib/mih_services/mih_my_business_user_services.dart @@ -1,19 +1,18 @@ import 'dart:convert'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_user.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:provider/provider.dart'; import 'package:supertokens_flutter/supertokens.dart'; -import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:supertokens_flutter/http.dart' as http; class MihMyBusinessUserServices { Future getBusinessUser( - BuildContext context, + MzansiProfileProvider profileProvider, ) async { String app_id = await SuperTokens.getUserId(); var response = await http.get( @@ -26,9 +25,7 @@ class MihMyBusinessUserServices { // KenLogger.success(response.body); BusinessUser? businessUser = BusinessUser.fromJson(jsonDecode(response.body)); - context - .read() - .setBusinessUser(newBusinessUser: businessUser); + profileProvider.setBusinessUser(newBusinessUser: businessUser); return businessUser; } else { return null; @@ -73,7 +70,7 @@ class MihMyBusinessUserServices { ); return 201; } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); return 500; } } @@ -122,21 +119,12 @@ class MihMyBusinessUserServices { bUserAccess, ), ); - String newProPicUrl = await MihFileApi.getMinioFileUrl(filePath, context); + String newProPicUrl = await MihFileApi.getMinioFileUrl(filePath); provider.setBusinessUserSignatureUrl(newProPicUrl); return 200; } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); return 500; } } - - void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } } diff --git a/Frontend/lib/mih_services/mih_mzansi_calendar_services.dart b/Frontend/lib/mih_services/mih_mzansi_calendar_services.dart index 6c18fb47..255ee4c0 100644 --- a/Frontend/lib/mih_services/mih_mzansi_calendar_services.dart +++ b/Frontend/lib/mih_services/mih_mzansi_calendar_services.dart @@ -1,17 +1,15 @@ import 'dart:convert'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/appointment.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/appointment.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_user.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_calendar_provider.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:supertokens_flutter/http.dart' as http; -import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../mih_config/mih_env.dart'; class MihMzansiCalendarApis { final baseAPI = AppEnviroment.baseApiUrl; @@ -537,29 +535,6 @@ class MihMzansiCalendarApis { //================== POP UPS ========================================================================== - static void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - - static void successPopUp(String message, BuildContext context) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - static void loadingPopUp(BuildContext context) { showDialog( context: context, diff --git a/Frontend/lib/mih_services/mih_mzansi_directory_services.dart b/Frontend/lib/mih_services/mih_mzansi_directory_services.dart index 6b4bc076..a959d4b0 100644 --- a/Frontend/lib/mih_services/mih_mzansi_directory_services.dart +++ b/Frontend/lib/mih_services/mih_mzansi_directory_services.dart @@ -1,7 +1,7 @@ import 'dart:convert'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/bookmarked_business.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/bookmarked_business.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business_review.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:supertokens_flutter/http.dart' as http; diff --git a/Frontend/lib/mih_services/mih_mzansi_wallet_services.dart b/Frontend/lib/mih_services/mih_mzansi_wallet_services.dart index 1acf927b..39013ba7 100644 --- a/Frontend/lib/mih_services/mih_mzansi_wallet_services.dart +++ b/Frontend/lib/mih_services/mih_mzansi_wallet_services.dart @@ -2,15 +2,13 @@ import 'dart:convert'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:supertokens_flutter/http.dart' as http; -import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../mih_config/mih_env.dart'; class MIHMzansiWalletApis { final baseAPI = AppEnviroment.baseApiUrl; @@ -213,29 +211,6 @@ class MIHMzansiWalletApis { //================== POP UPS ========================================================================== - static void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - - static void successPopUp(String message, BuildContext context) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } - static void loadingPopUp(BuildContext context) { showDialog( context: context, diff --git a/Frontend/lib/mih_services/mih_notification_services.dart b/Frontend/lib/mih_services/mih_notification_services.dart index 0b45bbd4..b651112d 100644 --- a/Frontend/lib/mih_services/mih_notification_services.dart +++ b/Frontend/lib/mih_services/mih_notification_services.dart @@ -1,12 +1,11 @@ import 'dart:convert'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/notification.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; +import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; +import 'package:mzansi_innovation_hub/mih_objects/notification.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:supertokens_flutter/http.dart' as http; class MihNotificationApis { @@ -71,9 +70,13 @@ class MihNotificationApis { args.businessUser, ), ); - successPopUp(message, context); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } @@ -127,9 +130,13 @@ class MihNotificationApis { // args.businessUser, // ), // ); - successPopUp(message, context); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } @@ -183,9 +190,13 @@ class MihNotificationApis { ); String message = "The appointment has been successfully rescheduled."; - successPopUp(message, context); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } @@ -236,9 +247,13 @@ class MihNotificationApis { ); String message = "The appointment has been cancelled successfully. This means it will no longer be visible in your waiting room and calender."; - successPopUp(message, context); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } @@ -291,33 +306,14 @@ class MihNotificationApis { ); String message = "The appointment was been created successfully. This means it will now be visible in your waiting room and calender."; - successPopUp(message, context); + MihAlertServices().successBasicAlert( + "Success!", + message, + context, + ); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } -//================== POP UPS ========================================================================== - - static void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - - static void successPopUp(String message, BuildContext context) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } } +//================== POP UPS ========================================================================== diff --git a/Frontend/lib/mih_services/mih_patient_services.dart b/Frontend/lib/mih_services/mih_patient_services.dart index a4b26c4d..bec56256 100644 --- a/Frontend/lib/mih_services/mih_patient_services.dart +++ b/Frontend/lib/mih_services/mih_patient_services.dart @@ -1,12 +1,12 @@ import 'dart:convert'; import 'package:file_picker/file_picker.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/files.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/notes.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/files.dart'; +import 'package:mzansi_innovation_hub/mih_objects/notes.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patient_access.dart'; +import 'package:mzansi_innovation_hub/mih_objects/patients.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:supertokens_flutter/http.dart' as http; diff --git a/Frontend/lib/mih_services/mih_service_calls.dart b/Frontend/lib/mih_services/mih_service_calls.dart deleted file mode 100644 index d0de0899..00000000 --- a/Frontend/lib/mih_services/mih_service_calls.dart +++ /dev/null @@ -1,569 +0,0 @@ -import 'dart:convert'; -import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_my_business_user_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_notification_services.dart'; -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; -import 'package:supertokens_flutter/supertokens.dart'; -import 'package:supertokens_flutter/http.dart' as http; -import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../mih_config/mih_env.dart'; -import '../mih_components/mih_objects/app_user.dart'; -import '../mih_components/mih_objects/arguments.dart'; -import '../mih_components/mih_objects/business.dart'; -import '../mih_components/mih_objects/business_user.dart'; -import '../mih_components/mih_objects/notification.dart'; -import '../mih_components/mih_objects/patient_access.dart'; -import '../mih_components/mih_objects/patient_queue.dart'; -import '../mih_components/mih_objects/patients.dart'; - -class MIHApiCalls { - final baseAPI = AppEnviroment.baseApiUrl; - -//================== PROFILE DATA ========================================================================== - - /// This function is used to get profile details of signed in user. - /// - /// Patameters: int notificationAmount which is used to get number of notifications to show. - /// - /// Returns HomeArguments which contains:- - /// - Signed In user data. - /// - Business user belongs to. - /// - Business User details. - /// - notifications. - /// - user profile picture. - Future getProfile( - int notificationAmount, - BuildContext context, - ) async { - AppUser userData; - Business? busData; - BusinessUser? bUserData; - Patient? patientData; - List notifi; - String userPic; - - // Get Userdata - var uid = await SuperTokens.getUserId(); - AppUser? user = await MihUserServices().getUserDetails(context); - if (user != null) { - userData = user; - } else { - throw Exception("Error: GetUserData returned null"); - } - - // Get BusinessUserdata - BusinessUser? businessUser = - await MihMyBusinessUserServices().getBusinessUser(context); - if (businessUser != null) { - bUserData = businessUser; - } else { - bUserData = null; - } - - // Get Businessdata - Business? business = - await MihBusinessDetailsServices().getBusinessDetailsByUser(context); - if (business != null) { - busData = business; - } else { - busData = null; - } - - //get profile picture - if (userData.pro_pic_path == "") { - userPic = ""; - } else { - userPic = - await MihFileApi.getMinioFileUrl(userData.pro_pic_path, context); - } - - //Get Notifications - notifi = await MihNotificationApis().getNotificationByUser( - uid, - notificationAmount, - ); - - //get patient profile - // Patient? patient = await MihPatientServices().getPatientDetails( - // uid, - // ); - // if (patient != null) { - // patientData = patient; - // } else { - // patientData = null; - // } - - return HomeArguments( - userData, bUserData, busData, patientData, notifi, userPic); - } - -//================== BUSINESS PATIENT/PERSONAL ACCESS ========================================================================== - - /// This function is used to check if a business has access to a specific patients profile. - /// - /// Patameters: String business_id & app_id (app_id of patient). - /// - /// Returns List (List of access that match the above parameters). - static Future> checkBusinessAccessToPatient( - String business_id, - String app_id, - ) async { - final response = await http.get(Uri.parse( - "${AppEnviroment.baseApiUrl}/access-requests/patient/check/$business_id?app_id=$app_id")); - // var errorCode = response.statusCode.toString(); - //print(response.body); - - if (response.statusCode == 200) { - Iterable l = jsonDecode(response.body); - List patientAccesses = List.from( - l.map((model) => PatientAccess.fromJson(model))); - return patientAccesses; - } else { - throw Exception('failed to pull patient access for business'); - } - } - - /// This function is used to UPDATE access the business has. - /// - /// Patameters:- - /// String business_id, - /// String business_name, - /// String app_id, - /// String status, - /// String approved_by, - /// AppUser signedInUser, - /// BuildContext context, - /// - /// Returns void (on success 200 navigate to /mih-access ). - static Future updatePatientAccessAPICall( - String business_id, - String business_name, - String app_id, - String status, - String approved_by, - AppUser signedInUser, - BuildContext context, - ) async { - var response = await http.put( - Uri.parse( - "${AppEnviroment.baseApiUrl}/access-requests/update/permission/"), - headers: { - "Content-Type": "application/json; charset=UTF-8" - }, - // business_id: str - // app_id: str - // status: str - // approved_by: str - body: jsonEncode({ - "business_id": business_id, - "app_id": app_id, - "status": status, - "approved_by": approved_by, - }), - ); - if (response.statusCode == 200) { - //Navigator.of(context).pushNamed('/home'); - Navigator.of(context).pop(); - Navigator.of(context).pop(); - Navigator.of(context).pushNamed( - '/mih-access', - arguments: signedInUser, - ); - String message = ""; - if (status == "approved") { - message = - "You've successfully approved the access request! $business_name now has access to your profile forever."; - } else { - message = - "You've declined the access request. $business_name will not have access to your profile."; - } - successPopUp(message, context); - } else { - internetConnectionPopUp(context); - } - } - - /// This function is used to reapply for access to patient. - /// - /// Patameters:- - /// String business_id, - /// String app_id, - /// BuildContext context, - /// - /// Returns void (on success 200 navigate to /mih-access ). - static Future reapplyPatientAccessAPICall( - String business_id, - String app_id, - bool personalSelected, - BusinessArguments args, - BuildContext context, - ) async { - var response = await http.put( - Uri.parse("${AppEnviroment.baseApiUrl}/access-requests/re-apply/"), - headers: { - "Content-Type": "application/json; charset=UTF-8" - }, - // business_id: str - // app_id: str - // status: str - // approved_by: str - body: jsonEncode({ - "business_id": business_id, - "app_id": app_id, - }), - ); - if (response.statusCode == 200) { - MihNotificationApis.reapplyAccessRequestNotificationAPICall( - app_id, personalSelected, args, context); - //notification here - } else { - internetConnectionPopUp(context); - } - } - - /// This function is used to create patient access and trigger notification to patient - /// - /// Patameters:- - /// String business_id, - /// String app_id, - /// String type, - /// String requested_by, - /// BuildContext context, - /// - /// Returns void (triggers notification of success 201). - static Future addPatientAccessAPICall( - String business_id, - String app_id, - String type, - String requested_by, - bool personalSelected, - BusinessArguments args, - BuildContext context, - ) async { - var response = await http.post( - Uri.parse("${AppEnviroment.baseApiUrl}/access-requests/insert/"), - headers: { - "Content-Type": "application/json; charset=UTF-8" - }, - // business_id: str - // app_id: str - // type: str - // requested_by: str - body: jsonEncode({ - "business_id": business_id, - "app_id": app_id, - "type": type, - "requested_by": requested_by, - }), - ); - if (response.statusCode == 201) { - MihNotificationApis.addAccessRequestNotificationAPICall( - app_id, requested_by, personalSelected, args, context); - } else { - internetConnectionPopUp(context); - } - } - - //================== PATIENT DATA ========================================================================== - - /// This function is used to fetch a list of patients matching a search criteria - /// - /// Patameters: String dsearch. - /// - /// Returns List. - - static Future> fetchPatients(String search) async { - final response = await http - .get(Uri.parse("${AppEnviroment.baseApiUrl}/patients/search/$search")); - if (response.statusCode == 200) { - Iterable l = jsonDecode(response.body); - List patients = - List.from(l.map((model) => Patient.fromJson(model))); - return patients; - } else { - throw Exception('failed to load patients'); - } - } - - /// This function is used to fetch a patient matching a app_id - /// - /// Patameters: String app_id. - /// - /// Returns Patient. - static Future fetchPatientByAppId( - String app_id, - ) async { - final response = await http - .get(Uri.parse("${AppEnviroment.baseApiUrl}/patients/$app_id")); - // errorCode = response.statusCode.toString(); - // errorBody = response.body; - //print(response.body); - if (response.statusCode == 200) { - Patient patient = Patient.fromJson(jsonDecode(response.body)); - // userData = u; - // Iterable l = jsonDecode(response.body); - // List patients = - // List.from(l.map((model) => Patient.fromJson(model))); - return patient; - } else { - throw Exception('failed to load patient'); - } - } - - //================== APPOINTMENT/ PATIENT QUEUE ========================================================================== - - /// This function is used to fetch a list of appointments for a doctors office for a date. - /// - /// Patameters: String date & business_id . - /// - /// Returns List. - static Future> fetchBusinessAppointmentsAPICall( - String date, - String business_id, - ) async { - //print("Patien manager page: $endpoint"); - final response = await http.get(Uri.parse( - "${AppEnviroment.baseApiUrl}/queue/appointments/business/$business_id?date=$date")); - // print("Here"); - // print("Body: ${response.body}"); - // print("Code: ${response.statusCode}"); - // errorCode = response.statusCode.toString(); - // errorBody = response.body; - - if (response.statusCode == 200) { - //print("Here1"); - Iterable l = jsonDecode(response.body); - //print("Here2"); - List patientQueue = List.from( - l.map((model) => PatientQueue.fromJson(model))); - //print("Here3"); - //print(patientQueue); - return patientQueue; - } else { - throw Exception('failed to fatch patient queue'); - } - } - - /// This function is used to fetch a list of appointments for a doctors office for a date. - /// - /// Patameters: String date & business_id . - /// - /// Returns List. - static Future> fetchPersonalAppointmentsAPICall( - String date, - String app_id, - ) async { - //print("Patien manager page: $endpoint"); - final response = await http.get(Uri.parse( - "${AppEnviroment.baseApiUrl}/queue/appointments/personal/$app_id?date=$date")); - // print("Here"); - // print("Body: ${response.body}"); - // print("Code: ${response.statusCode}"); - // errorCode = response.statusCode.toString(); - // errorBody = response.body; - - if (response.statusCode == 200) { - //print("Here1"); - Iterable l = jsonDecode(response.body); - //print("Here2"); - List patientQueue = List.from( - l.map((model) => PatientQueue.fromJson(model))); - //print("Here3"); - //print(patientQueue); - return patientQueue; - } else { - throw Exception('failed to fatch patient queue'); - } - } - - /// This function is used to UPDATE AN appointments for a doctors office for a date. - /// - /// Patameters:- - /// int idpatient_queue, - /// String app_id, - /// String business_name, - /// String origDate_time, - /// String date, - /// String time, - /// BusinessArguments args, - /// BuildContext context, - /// - /// Returns VOID (TRIGGERS NOTIGICATIOPN ON SUCCESS) - static Future updateApointmentAPICall( - int idpatient_queue, - String app_id, - bool personalSelected, - String business_name, - String origDate_time, - String date, - String time, - BusinessArguments args, - BuildContext context, - ) async { - var response = await http.put( - Uri.parse("${AppEnviroment.baseApiUrl}/queue/appointment/update/"), - headers: { - "Content-Type": "application/json; charset=UTF-8" - }, - body: jsonEncode({ - "idpatient_queue": idpatient_queue, - "date": date, - "time": time, - }), - ); - if (response.statusCode == 200) { - MihNotificationApis.addRescheduledAppointmentNotificationAPICall( - app_id, - personalSelected, - business_name, - origDate_time, - date, - time, - args, - context, - ); - } else { - internetConnectionPopUp(context); - } - } - - /// This function is used to Delete/ cancel AN appointments for a doctors office for a date. - /// - /// Patameters:- - /// int idpatient_queue, - /// PatientViewArguments args, - /// BuildContext context, - /// - /// Returns VOID (TRIGGERS NOTIGICATIOPN ON SUCCESS) - static Future deleteApointmentAPICall( - int idpatient_queue, - String app_id, - bool personalSelected, - String date_time, - BusinessArguments args, - BuildContext context, - ) async { - var response = await http.delete( - Uri.parse("${AppEnviroment.baseApiUrl}/queue/appointment/delete/"), - headers: { - "Content-Type": "application/json; charset=UTF-8" - }, - body: jsonEncode({"idpatient_queue": idpatient_queue}), - ); - //print("Here4"); - //print(response.statusCode); - if (response.statusCode == 200) { - MihNotificationApis.addCancelledAppointmentNotificationAPICall( - app_id, - personalSelected, - date_time, - args, - context, - ); - // Navigator.of(context).pop(); - // Navigator.of(context).pop(); - // String message = - // "The note has been deleted successfully. This means it will no longer be visible on your and cannot be used for future appointments."; - // successPopUp(message, context); - } else { - internetConnectionPopUp(context); - } - } - - /// This function is used to create AN appointments for a doctors office for a date. - /// - /// Patameters:- - /// int idpatient_queue, - /// PatientViewArguments args, - /// BuildContext context, - /// - /// Returns VOID (TRIGGERS NOTIGICATIOPN ON SUCCESS) - static Future addAppointmentAPICall( - String business_id, - String app_id, - bool personalSelected, - String date, - String time, - BusinessArguments args, - BuildContext context, - ) async { - var response = await http.post( - Uri.parse("${AppEnviroment.baseApiUrl}/queue/appointment/insert/"), - headers: { - "Content-Type": "application/json; charset=UTF-8" - }, - body: jsonEncode({ - "business_id": business_id, - "app_id": app_id, - "date": date, - "time": time, - }), - ); - if (response.statusCode == 201) { - // Navigator.pushNamed(context, '/patient-manager/patient', - // arguments: widget.signedInUser); - // String message = - // "The appointment has been successfully booked!\n\nAn approval request as been sent to the patient.Once the access request has been approved, you will be able to access the patientAccesses profile. ou can check the status of your request in patient queue under the appointment."; - // "${fnameController.text} ${lnameController.text} patient profiole has been successfully added!\n"; - // Navigator.pop(context); - // Navigator.pop(context); - // Navigator.pop(context); - // setState(() { - // dateController.text = ""; - // timeController.text = ""; - // }); - // Navigator.of(context).pushNamed( - // '/patient-manager', - // arguments: BusinessArguments( - // widget.arguments.signedInUser, - // widget.arguments.businessUser, - // widget.arguments.business, - // ), - // ); - // successPopUp(message); - // String app_id, - // String date, - // String time, - // BusinessArguments args, - // BuildContext context, - MihNotificationApis.addNewAppointmentNotificationAPICall( - app_id, - personalSelected, - date, - time, - args, - context, - ); - } else { - internetConnectionPopUp(context); - } - } - - //================== POP UPS ========================================================================== - - static void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - - static void successPopUp(String message, BuildContext context) { - showDialog( - context: context, - builder: (context) { - return MIHSuccessMessage( - successType: "Success", - successMessage: message, - ); - }, - ); - } -} diff --git a/Frontend/lib/mih_services/mih_user_consent_services.dart b/Frontend/lib/mih_services/mih_user_consent_services.dart index f55424f6..d8104a49 100644 --- a/Frontend/lib/mih_services/mih_user_consent_services.dart +++ b/Frontend/lib/mih_services/mih_user_consent_services.dart @@ -1,16 +1,15 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/user_consent.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/user_consent.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; -import 'package:provider/provider.dart'; import 'package:supertokens_flutter/http.dart' as http; import 'package:supertokens_flutter/supertokens.dart'; class MihUserConsentServices { Future getUserConsentStatus( - BuildContext context, + MzansiProfileProvider profileProvider, ) async { var app_id = await SuperTokens.getUserId(); final response = await http.get( @@ -18,12 +17,8 @@ class MihUserConsentServices { if (response.statusCode == 200) { Map userMap = jsonDecode(response.body); UserConsent userConsent = UserConsent.fromJson(userMap); - context.read().setUserConsent(userConsent); - // return userConsent; + profileProvider.setUserConsent(userConsent); } - // else { - // return null; - // } } Future insertUserConsentStatus( diff --git a/Frontend/lib/mih_services/mih_user_services.dart b/Frontend/lib/mih_services/mih_user_services.dart index 0d8dadbb..d92c8295 100644 --- a/Frontend/lib/mih_services/mih_user_services.dart +++ b/Frontend/lib/mih_services/mih_user_services.dart @@ -1,17 +1,15 @@ import 'dart:convert'; - import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:provider/provider.dart'; import 'package:supertokens_flutter/http.dart' as http; @@ -73,7 +71,7 @@ class MihUserServices { extra: true, ); } else { - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } @@ -99,8 +97,27 @@ class MihUserServices { } } - Future getUserDetails( + Future getMIHUserDetails( + String app_id, BuildContext context, + ) async { + var response = await http.get( + Uri.parse("${AppEnviroment.baseApiUrl}/user/$app_id"), + headers: { + "Content-Type": "application/json; charset=UTF-8" + }, + ); + if (response.statusCode == 200) { + String body = response.body; + var jsonBody = jsonDecode(body); + return AppUser.fromJson(jsonBody); + } else { + return null; + } + } + + Future getMyUserDetails( + MzansiProfileProvider profileProvider, ) async { String app_id = await SuperTokens.getUserId(); var response = await http.get( @@ -109,13 +126,12 @@ class MihUserServices { "Content-Type": "application/json; charset=UTF-8" }, ); - if (response.statusCode == 200) { String body = response.body; var jsonBody = jsonDecode(body); - context.read().setUser( - newUser: AppUser.fromJson(jsonBody), - ); + profileProvider.setUser( + newUser: AppUser.fromJson(jsonBody), + ); return AppUser.fromJson(jsonBody); } else { return null; @@ -171,7 +187,7 @@ class MihUserServices { purpose, ), ); - String newProPicUrl = await MihFileApi.getMinioFileUrl(filePath, context); + String newProPicUrl = await MihFileApi.getMinioFileUrl(filePath); context.read().setUserProfilePicUrl(newProPicUrl); return response.statusCode; } else { @@ -247,81 +263,40 @@ class MihUserServices { } } else { Navigator.of(context).pop(); // Pop loading dialog - internetConnectionPopUp(context); + MihAlertServices().internetConnectionAlert(context); } } //================== POP UPS ========================================================================== - static void internetConnectionPopUp(BuildContext context) { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage( - errorType: "Internet Connection", - ); - }, - ); - } - static void successPopUp(String title, String message, BuildContext context) { - showDialog( - context: context, - builder: (context) { - return MihPackageAlert( - alertIcon: Icon( - Icons.check_circle_outline_rounded, - size: 150, - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - alertTitle: title, - alertBody: Column( - children: [ - Text( - message, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - context.goNamed( - 'mihHome', - extra: true, - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - elevation: 10, - width: 300, - child: Text( - "Dismiss", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ) - ], - ), - alertColour: MihColors.getGreenColor( + MihAlertServices().successAdvancedAlert( + title, + message, + [ + MihButton( + onPressed: () { + context.goNamed( + 'mihHome', + extra: true, + ); + }, + buttonColor: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - // return MIHSuccessMessage( - // successType: "Success", - // successMessage: message, - // ); - }, + elevation: 10, + width: 300, + child: Text( + "Dismiss", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + context, ); } diff --git a/Frontend/pubspec.yaml b/Frontend/pubspec.yaml index c0aa09bd..6c59e9c0 100644 --- a/Frontend/pubspec.yaml +++ b/Frontend/pubspec.yaml @@ -1,7 +1,7 @@ name: mzansi_innovation_hub description: "" publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 1.2.3+112 +version: 1.2.4+117 # version: 1.1.1+97 #--- Updated version for upgrader package testing environment: @@ -74,27 +74,27 @@ dev_dependencies: flutter: uses-material-design: true assets: - - lib/mih_components/mih_package_components/assets/images/ - - lib/mih_components/mih_package_components/assets/fonts/ - - lib/mih_components/mih_package_components/assets/images/loyalty_cards/ - - lib/mih_components/mih_package_components/assets/images/loyalty_cards/mini/ - - lib/mih_components/mih_package_components/assets/images/app_icon/ - - lib/mih_components/mih_package_components/assets/images/splash_screen/ + - lib/mih_package_components/assets/images/ + - lib/mih_package_components/assets/fonts/ + - lib/mih_package_components/assets/images/loyalty_cards/ + - lib/mih_package_components/assets/images/loyalty_cards/mini/ + - lib/mih_package_components/assets/images/app_icon/ + - lib/mih_package_components/assets/images/splash_screen/ fonts: - family: MihIcons fonts: - - asset: lib/mih_components/mih_package_components/assets/fonts/Mih_Icons.ttf + - asset: lib/mih_package_components/assets/fonts/Mih_Icons.ttf flutter_native_splash: color: "#3A4454" - image: lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash.png - branding: lib/mih_components/mih_package_components/assets/images/splash_screen/mih_branding_splash.png - image_web: lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif - branding_web: lib/mih_components/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif + image: lib/mih_package_components/assets/images/splash_screen/mih_image_splash.png + branding: lib/mih_package_components/assets/images/splash_screen/mih_branding_splash.png + image_web: lib/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif + branding_web: lib/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif branding_mode: bottom branding_bottom_padding: 24 android_12: color: "#3A4454" - image: lib/mih_components/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png - branding: lib/mih_components/mih_package_components/assets/images/splash_screen/mih_branding_splash.png \ No newline at end of file + image: lib/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png + branding: lib/mih_package_components/assets/images/splash_screen/mih_branding_splash.png \ No newline at end of file