diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index b156e09a..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,66 +0,0 @@ -# Contributing to MIH Project - -Thank you for your interest in contributing to the MIH Project! To help us maintain a clean, stable, and secure codebase, please review and follow these contribution guidelines. - ---- - -## 1. Important Repository Notice (GitHub Users) - -> ⚠️ **CRITICAL NOTE:** If you are viewing or found this repository on GitHub, please be aware that this is a **read-only mirror** used strictly for backup purposes. -> -> **No Pull Requests (PRs) or Issues will be accepted or reviewed on GitHub.** - -To contribute, you must use our active development repository hosted on **MIH Git**: -🔗 [Active MIH Git Repo](https://git.mzansi-innovation-hub.co.za/yaso_meth/mih-project) - -Please conduct all development, issue tracking, and collaboration on the MIH Git platform. - ---- - -## 2. Branching Strategy & Pull/Merge Request Rules - -To ensure production stability, we enforce strict branching rules. Please ensure your contributions align with the following structure: - -* **Do NOT target the `main` branch:** Pull or Merge Requests made directly against the `main` branch will be automatically rejected or closed. -* **Target the Latest Version Branch:** All bug fixes, features, and documentation updates must be made against the active version branch (e.g., branch naming convention follows `v.1.4.0` or later). - ---- - -## 3. Recommended Workflow (Fork & Pull) - -We use a **Fork-and-Pull** model to manage contributions safely and keep the main repository organized. Please follow these steps to submit your changes: - -1. **Fork the Repository:** Log into **MIH Git** and click the **Fork** button on the main [mih-project](https://git.mzansi-innovation-hub.co.za/yaso_meth/mih-project) repository to create a copy under your personal account. -2. **Clone Your Fork:** Clone your personal fork locally to your machine: - ```bash - git clone --depth 1 https://git.mzansi-innovation-hub.co.za/YOUR_USERNAME/mih-project.git - cd mih-project - ``` -3. **Checkout the Active Version Branch:** Fetch the latest branches and switch to the current active version branch (e.g., `v.1.4.0`): - ```bash - git fetch origin - git checkout v.1.4.0 - ``` -4. **Create a Feature or Fix Branch:** Create a dedicated branch for your changes stemming directly from that version branch: - ```bash - git checkout -b feature/your-feature-name - ``` - or - ```bash - git checkout -b fix/your-fix-name - ``` -5. **Commit and Push:** Make your changes, commit them with clear descriptive messages, and push the feature branch to your fork: - ```bash - git push origin feature/your-feature-name - ``` - or - ```bash - git push origin fix/your-fix-name - ``` -6. **Open a Pull/Merge Request:** Go to the main repository on MIH Git. You will see a prompt to open a new Pull/Merge Request. Ensure that: - * The **Source (Head)** is your fork's feature branch (`YOUR_USERNAME/mih-project:feature/your-feature-name`). - * The **Target (Base)** is the main repository's active version branch (`yaso_meth/mih-project:v.1.4.0`). - ---- - -Thank you for your time and effort in helping build and improve the MIH Project! diff --git a/mih_ui/android/gradle.properties b/mih_ui/android/gradle.properties index f018a618..475a6280 100644 --- a/mih_ui/android/gradle.properties +++ b/mih_ui/android/gradle.properties @@ -1,3 +1,7 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/mih_ui/lib/firebase_options.dart b/mih_ui/lib/firebase_options.dart index 45d9eb80..b606fb0e 100644 --- a/mih_ui/lib/firebase_options.dart +++ b/mih_ui/lib/firebase_options.dart @@ -11,7 +11,7 @@ import 'package:flutter/foundation.dart' /// import 'firebase_options.dart'; /// // ... /// await Firebase.initializeApp( -/// options: DefaultFirebaseOptions.currentPlatform, +/// options: DefaultFirebaseOptions.currentPlatform, /// ); /// ``` class DefaultFirebaseOptions { @@ -30,6 +30,10 @@ class DefaultFirebaseOptions { return windows; case TargetPlatform.linux: return web; + // throw UnsupportedError( + // 'DefaultFirebaseOptions have not been configured for linux - ' + // 'you can reconfigure this by running the FlutterFire CLI again.', + // ); default: throw UnsupportedError( 'DefaultFirebaseOptions are not supported for this platform.', @@ -38,48 +42,48 @@ class DefaultFirebaseOptions { } static const FirebaseOptions web = FirebaseOptions( - apiKey: 'YOUR_WEB_API_KEY', - appId: 'YOUR_WEB_APP_ID', - messagingSenderId: 'YOUR_MESSAGING_SENDER_ID', - projectId: 'YOUR_PROJECT_ID', - authDomain: 'YOUR_AUTH_DOMAIN', - storageBucket: 'YOUR_STORAGE_BUCKET', - measurementId: 'YOUR_MEASUREMENT_ID', + apiKey: 'AIzaSyDN-f4sJ4n_fyvrLR193_IIkTsccRVUQxw', + appId: '1:33677883408:web:47b8021df7fcacd2223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + authDomain: 'mzansi-innovation-hub.firebaseapp.com', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + measurementId: 'G-Y3B5E3HCJY', ); static const FirebaseOptions android = FirebaseOptions( - apiKey: 'YOUR_ANDROID_API_KEY', - appId: 'YOUR_ANDROID_APP_ID', - messagingSenderId: 'YOUR_MESSAGING_SENDER_ID', - projectId: 'YOUR_PROJECT_ID', - storageBucket: 'YOUR_STORAGE_BUCKET', + apiKey: 'AIzaSyBUkjWdu9YcgiF-e9TC5hoiEoCjPyjA5hU', + appId: '1:33677883408:android:ebd8565991c56257223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', ); static const FirebaseOptions ios = FirebaseOptions( - apiKey: 'YOUR_IOS_API_KEY', - appId: 'YOUR_IOS_APP_ID', - messagingSenderId: 'YOUR_MESSAGING_SENDER_ID', - projectId: 'YOUR_PROJECT_ID', - storageBucket: 'YOUR_STORAGE_BUCKET', - iosBundleId: 'YOUR_IOS_BUNDLE_ID', + apiKey: 'AIzaSyDRqY5I5CXjEtWkUX1YUfKT8IUlln9PUuY', + appId: '1:33677883408:ios:2048dac086428716223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + iosBundleId: 'za.co.mzansiinnovationhub.mih', ); static const FirebaseOptions macos = FirebaseOptions( - apiKey: 'YOUR_MACOS_API_KEY', - appId: 'YOUR_MACOS_APP_ID', - messagingSenderId: 'YOUR_MESSAGING_SENDER_ID', - projectId: 'YOUR_PROJECT_ID', - storageBucket: 'YOUR_STORAGE_BUCKET', - iosBundleId: 'YOUR_MACOS_BUNDLE_ID', + apiKey: 'AIzaSyDRqY5I5CXjEtWkUX1YUfKT8IUlln9PUuY', + appId: '1:33677883408:ios:e2db11a42fc3452e223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + iosBundleId: 'com.example.patientManager', ); static const FirebaseOptions windows = FirebaseOptions( - apiKey: 'YOUR_WINDOWS_API_KEY', - appId: 'YOUR_WINDOWS_APP_ID', - messagingSenderId: 'YOUR_MESSAGING_SENDER_ID', - projectId: 'YOUR_PROJECT_ID', - authDomain: 'YOUR_AUTH_DOMAIN', - storageBucket: 'YOUR_STORAGE_BUCKET', - measurementId: 'YOUR_MEASUREMENT_ID', + apiKey: 'AIzaSyDN-f4sJ4n_fyvrLR193_IIkTsccRVUQxw', + appId: '1:33677883408:web:e08becaef3261c59223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + authDomain: 'mzansi-innovation-hub.firebaseapp.com', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + measurementId: 'G-FKKENBX8TT', ); } diff --git a/mih_ui/lib/main_dev.dart b/mih_ui/lib/main_dev.dart index 437c62b9..0776a77f 100644 --- a/mih_ui/lib/main_dev.dart +++ b/mih_ui/lib/main_dev.dart @@ -42,7 +42,6 @@ void main() async { debugPrint('APP INSTALLED!'); }); final GoRouter appRouter = MihGoRouter().mihRouter; - FlutterNativeSplash.remove(); runApp(MzansiInnovationHub( router: appRouter, )); diff --git a/mih_ui/lib/main_prod.dart b/mih_ui/lib/main_prod.dart index c8ce2935..8c1c5e74 100644 --- a/mih_ui/lib/main_prod.dart +++ b/mih_ui/lib/main_prod.dart @@ -33,8 +33,7 @@ void main() async { debugPrint('APP INSTALLED!'); }); final GoRouter appRouter = MihGoRouter().mihRouter; - FlutterNativeSplash.remove(); - runApp(MzansiInnovationHub( + (MzansiInnovationHub( router: appRouter, )); } diff --git a/mih_ui/lib/mih_config/mih_go_router.dart b/mih_ui/lib/mih_config/mih_go_router.dart index 2d5db6b4..36b7a22f 100644 --- a/mih_ui/lib/mih_config/mih_go_router.dart +++ b/mih_ui/lib/mih_config/mih_go_router.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:go_router/go_router.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'; @@ -85,6 +86,7 @@ class MihGoRouter { ]; KenLogger.success( "Redirect Check: ${state.fullPath}, isUserSignedIn: $isUserSignedIn"); + FlutterNativeSplash.remove(); if (!isUserSignedIn && !unauthenticatedPaths.contains(state.fullPath)) { return MihGoRouterPaths.mihAuthentication; } diff --git a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart index e4a445e2..f03873a4 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart @@ -5,6 +5,7 @@ import 'package:file_picker/file_picker.dart'; import 'package:file_saver/file_saver.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; @@ -403,6 +404,30 @@ class _MihBusinessQrCodeState extends State { ); }, ), + SpeedDialChild( + child: Icon( + Icons.copy_rounded, + color: MihColors.primary(), + ), + label: "Copy Link", + labelBackgroundColor: MihColors.green(), + labelStyle: TextStyle( + color: MihColors.primary(), + fontWeight: FontWeight.bold, + ), + backgroundColor: MihColors.green(), + onTap: () async { + await Clipboard.setData( + ClipboardData(text: "$qrCodedata${business.business_id}"), + ); + if (!context.mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + MihSnackBar( + child: Text("Link Copied!"), + ), + ); + }, + ), ]), ) ], diff --git a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_qr_code.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_qr_code.dart index 232c399a..b9f86d4f 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_qr_code.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_qr_code.dart @@ -4,6 +4,7 @@ import 'package:file_picker/file_picker.dart'; import 'package:file_saver/file_saver.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:go_router/go_router.dart'; import 'package:ken_logger/ken_logger.dart'; @@ -402,6 +403,31 @@ class _MihPersonalQrCodeState extends State { ); }, ), + SpeedDialChild( + child: Icon( + Icons.copy_rounded, + color: MihColors.primary(), + ), + label: "Copy Link", + labelBackgroundColor: MihColors.green(), + labelStyle: TextStyle( + color: MihColors.primary(), + fontWeight: FontWeight.bold, + ), + backgroundColor: MihColors.green(), + onTap: () async { + await Clipboard.setData( + ClipboardData( + text: "$_qrCodedata${user.username.toLowerCase()}"), + ); + if (!context.mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + MihSnackBar( + child: Text("Link Copied!"), + ), + ); + }, + ), ]), ) ],